{"action":"created","comment":{"url":"https://api.github.com/repos/dyweb/blog/pulls/comments/94110600","pull_request_review_id":14640963,"id":94110600,"diff_hunk":"@@ -10,9 +10,166 @@ preview: Ayi 跨平台的工具库\n \n ---\n \n-## 阿姨呀咿呀\n+## 简介\n \n-## 嘿呀\n+[Ayi](https://github.com/dyweb/Ayi) 是一个跨平台的命令行工具，类似于[busybox](https://busybox.net/about.html)。\n+开始于 2015 年 7 月。主要目的是为了方便配置环境和解决各种由于配置环境导致的问题，比如:\n+\n+> - 我这里跑的好好的，怎么到了你那(服务器上)就挂了\n+> - 我用 Mac 自带的 PHP 和 Apache 就挺好，我不用 Vagrant 和 Nginx\n+> - 我就想用 Windows 下的一键安装包\n+\n+考虑到没钱给大家每人配个 Mac，以及东岳的男女比例。\n+我们需要一个跨平台的配置环境和收集环境信息的工具，用于**快速**的解决上述问题。\n+\n+## 技术选型\n+\n+在选择 Ayi 使用的技术时主要考虑的是以下几个问题\n+\n+- 跨平台\n+- 可维护性\n+- 对于东岳其他项目的帮助\n+\n+<!-- TODO:找不到是哪个 issue 了，倒是找到了 commit https://github.com/dyweb/Ayi/commit/3a96921ccb6b5edb7c294e2a1eab2b9e63cc130b -->\n+最开始和咩的考虑是使用 shell 来进行操作， 但是 shell 的问题在于很难维护，基本不可能测试。\n+东岳 shell 用的很少，并且 shell 对于其他项目帮助十分有限。\n+\n+之后考虑到 PHP, python, java 都需要运行时，C/C++ 写起来太累， Rust 没人会 (那会还没有 Ivan 和 Codewarm)，\n+就选择了 Golang，当时版本是 1.5。\n+\n+Golang 的主要优点是\n+\n+- 跨平台 & 交叉编译\n+- 简洁的包管理\n+- 性能好，可以用来改进东岳现有的纯 PHP 服务端体系\n+- 一个活跃的社区，PHP 沉浸在 CMS 和抄 Rails 中不能自拔，JS 日新月异\n+- Google 老爹\n+\n+## 主要问题\n+\n+- 人太少，基本只有 @at15 (我) 一个人","path":"source/ayi.md","position":43,"original_position":43,"commit_id":"93b49641e1255bf34bca8924016640370864d2cd","original_commit_id":"93b49641e1255bf34bca8924016640370864d2cd","user":{"login":"JasonQSY","id":15360639,"avatar_url":"https://avatars.githubusercontent.com/u/15360639?v=3","gravatar_id":"","url":"https://api.github.com/users/JasonQSY","html_url":"https://github.com/JasonQSY","followers_url":"https://api.github.com/users/JasonQSY/followers","following_url":"https://api.github.com/users/JasonQSY/following{/other_user}","gists_url":"https://api.github.com/users/JasonQSY/gists{/gist_id}","starred_url":"https://api.github.com/users/JasonQSY/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JasonQSY/subscriptions","organizations_url":"https://api.github.com/users/JasonQSY/orgs","repos_url":"https://api.github.com/users/JasonQSY/repos","events_url":"https://api.github.com/users/JasonQSY/events{/privacy}","received_events_url":"https://api.github.com/users/JasonQSY/received_events","type":"User","site_admin":false},"body":"可以mos开个坑=。= ink github支持插件=，=","created_at":"2016-12-29T08:18:06Z","updated_at":"2016-12-29T08:26:10Z","html_url":"https://github.com/dyweb/blog/pull/7#discussion_r94110600","pull_request_url":"https://api.github.com/repos/dyweb/blog/pulls/7","_links":{"self":{"href":"https://api.github.com/repos/dyweb/blog/pulls/comments/94110600"},"html":{"href":"https://github.com/dyweb/blog/pull/7#discussion_r94110600"},"pull_request":{"href":"https://api.github.com/repos/dyweb/blog/pulls/7"}}},"pull_request":{"url":"https://api.github.com/repos/dyweb/blog/pulls/7","id":99626432,"html_url":"https://github.com/dyweb/blog/pull/7","diff_url":"https://github.com/dyweb/blog/pull/7.diff","patch_url":"https://github.com/dyweb/blog/pull/7.patch","issue_url":"https://api.github.com/repos/dyweb/blog/issues/7","number":7,"state":"open","locked":false,"title":"[WIP][post][ayi] Ayi ya yi ya","user":{"login":"at15","id":5621298,"avatar_url":"https://avatars.githubusercontent.com/u/5621298?v=3","gravatar_id":"","url":"https://api.github.com/users/at15","html_url":"https://github.com/at15","followers_url":"https://api.github.com/users/at15/followers","following_url":"https://api.github.com/users/at15/following{/other_user}","gists_url":"https://api.github.com/users/at15/gists{/gist_id}","starred_url":"https://api.github.com/users/at15/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/at15/subscriptions","organizations_url":"https://api.github.com/users/at15/orgs","repos_url":"https://api.github.com/users/at15/repos","events_url":"https://api.github.com/users/at15/events{/privacy}","received_events_url":"https://api.github.com/users/at15/received_events","type":"User","site_admin":false},"body":"<!-- Please specify your purpose by use one of the following title -->\r\n<!-- [post][post title] -->\r\n<!-- [workflow] description -->\r\n<!-- [util] description -->\r\n\r\n<!-- the following template is for creating new post only, util/workflow just need to refer the issue -->\r\n<!-- optional: list related issue here, use comma for several issues -->\r\nRelated issue: N/A\r\n\r\n<!-- basic meta about the post -->\r\n## Post info\r\n\r\n- Title: Ayi \r\n- Author: @at15\r\n- License: default\r\n- Estimate finish time: 12/29 PST\r\n\r\n<!--  optional: sometimes a post is one of a long series -->\r\n## Related posts\r\n\r\n- N/A\r\n\r\n<!--  optional: projects related to this post, i.e. tongqu -->\r\n## Related projects\r\n\r\n<!-- open source project with a brief introduction -->\r\n- [Ayi](https://github.com/dyweb/Ayi) A common util application\r\n","created_at":"2016-12-29T07:35:35Z","updated_at":"2016-12-29T08:26:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c21db387276acdf27dd52f48c6ccbbe16018221c","assignee":{"login":"at15","id":5621298,"avatar_url":"https://avatars.githubusercontent.com/u/5621298?v=3","gravatar_id":"","url":"https://api.github.com/users/at15","html_url":"https://github.com/at15","followers_url":"https://api.github.com/users/at15/followers","following_url":"https://api.github.com/users/at15/following{/other_user}","gists_url":"https://api.github.com/users/at15/gists{/gist_id}","starred_url":"https://api.github.com/users/at15/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/at15/subscriptions","organizations_url":"https://api.github.com/users/at15/orgs","repos_url":"https://api.github.com/users/at15/repos","events_url":"https://api.github.com/users/at15/events{/privacy}","received_events_url":"https://api.github.com/users/at15/received_events","type":"User","site_admin":false},"assignees":[{"login":"at15","id":5621298,"avatar_url":"https://avatars.githubusercontent.com/u/5621298?v=3","gravatar_id":"","url":"https://api.github.com/users/at15","html_url":"https://github.com/at15","followers_url":"https://api.github.com/users/at15/followers","following_url":"https://api.github.com/users/at15/following{/other_user}","gists_url":"https://api.github.com/users/at15/gists{/gist_id}","starred_url":"https://api.github.com/users/at15/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/at15/subscriptions","organizations_url":"https://api.github.com/users/at15/orgs","repos_url":"https://api.github.com/users/at15/repos","events_url":"https://api.github.com/users/at15/events{/privacy}","received_events_url":"https://api.github.com/users/at15/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/dyweb/blog/pulls/7/commits","review_comments_url":"https://api.github.com/repos/dyweb/blog/pulls/7/comments","review_comment_url":"https://api.github.com/repos/dyweb/blog/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dyweb/blog/issues/7/comments","statuses_url":"https://api.github.com/repos/dyweb/blog/statuses/93b49641e1255bf34bca8924016640370864d2cd","head":{"label":"dyweb:post/ayi","ref":"post/ayi","sha":"93b49641e1255bf34bca8924016640370864d2cd","user":{"login":"dyweb","id":8973605,"avatar_url":"https://avatars.githubusercontent.com/u/8973605?v=3","gravatar_id":"","url":"https://api.github.com/users/dyweb","html_url":"https://github.com/dyweb","followers_url":"https://api.github.com/users/dyweb/followers","following_url":"https://api.github.com/users/dyweb/following{/other_user}","gists_url":"https://api.github.com/users/dyweb/gists{/gist_id}","starred_url":"https://api.github.com/users/dyweb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dyweb/subscriptions","organizations_url":"https://api.github.com/users/dyweb/orgs","repos_url":"https://api.github.com/users/dyweb/repos","events_url":"https://api.github.com/users/dyweb/events{/privacy}","received_events_url":"https://api.github.com/users/dyweb/received_events","type":"Organization","site_admin":false},"repo":{"id":77100533,"name":"blog","full_name":"dyweb/blog","owner":{"login":"dyweb","id":8973605,"avatar_url":"https://avatars.githubusercontent.com/u/8973605?v=3","gravatar_id":"","url":"https://api.github.com/users/dyweb","html_url":"https://github.com/dyweb","followers_url":"https://api.github.com/users/dyweb/followers","following_url":"https://api.github.com/users/dyweb/following{/other_user}","gists_url":"https://api.github.com/users/dyweb/gists{/gist_id}","starred_url":"https://api.github.com/users/dyweb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dyweb/subscriptions","organizations_url":"https://api.github.com/users/dyweb/orgs","repos_url":"https://api.github.com/users/dyweb/repos","events_url":"https://api.github.com/users/dyweb/events{/privacy}","received_events_url":"https://api.github.com/users/dyweb/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dyweb/blog","description":"Dongyue Tech Blog","fork":false,"url":"https://api.github.com/repos/dyweb/blog","forks_url":"https://api.github.com/repos/dyweb/blog/forks","keys_url":"https://api.github.com/repos/dyweb/blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dyweb/blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dyweb/blog/teams","hooks_url":"https://api.github.com/repos/dyweb/blog/hooks","issue_events_url":"https://api.github.com/repos/dyweb/blog/issues/events{/number}","events_url":"https://api.github.com/repos/dyweb/blog/events","assignees_url":"https://api.github.com/repos/dyweb/blog/assignees{/user}","branches_url":"https://api.github.com/repos/dyweb/blog/branches{/branch}","tags_url":"https://api.github.com/repos/dyweb/blog/tags","blobs_url":"https://api.github.com/repos/dyweb/blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dyweb/blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dyweb/blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/dyweb/blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dyweb/blog/statuses/{sha}","languages_url":"https://api.github.com/repos/dyweb/blog/languages","stargazers_url":"https://api.github.com/repos/dyweb/blog/stargazers","contributors_url":"https://api.github.com/repos/dyweb/blog/contributors","subscribers_url":"https://api.github.com/repos/dyweb/blog/subscribers","subscription_url":"https://api.github.com/repos/dyweb/blog/subscription","commits_url":"https://api.github.com/repos/dyweb/blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/dyweb/blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/dyweb/blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/dyweb/blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/dyweb/blog/contents/{+path}","compare_url":"https://api.github.com/repos/dyweb/blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dyweb/blog/merges","archive_url":"https://api.github.com/repos/dyweb/blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dyweb/blog/downloads","issues_url":"https://api.github.com/repos/dyweb/blog/issues{/number}","pulls_url":"https://api.github.com/repos/dyweb/blog/pulls{/number}","milestones_url":"https://api.github.com/repos/dyweb/blog/milestones{/number}","notifications_url":"https://api.github.com/repos/dyweb/blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dyweb/blog/labels{/name}","releases_url":"https://api.github.com/repos/dyweb/blog/releases{/id}","deployments_url":"https://api.github.com/repos/dyweb/blog/deployments","created_at":"2016-12-22T01:47:13Z","updated_at":"2016-12-23T06:22:02Z","pushed_at":"2016-12-29T07:35:36Z","git_url":"git://github.com/dyweb/blog.git","ssh_url":"git@github.com:dyweb/blog.git","clone_url":"https://github.com/dyweb/blog.git","svn_url":"https://github.com/dyweb/blog","homepage":"http://blog.dongyueweb.com","size":197,"stargazers_count":6,"watchers_count":6,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":1,"mirror_url":null,"open_issues_count":2,"forks":1,"open_issues":2,"watchers":6,"default_branch":"master"}},"base":{"label":"dyweb:master","ref":"master","sha":"7b8ab8db7850819239179f089bda13913ee1c3bf","user":{"login":"dyweb","id":8973605,"avatar_url":"https://avatars.githubusercontent.com/u/8973605?v=3","gravatar_id":"","url":"https://api.github.com/users/dyweb","html_url":"https://github.com/dyweb","followers_url":"https://api.github.com/users/dyweb/followers","following_url":"https://api.github.com/users/dyweb/following{/other_user}","gists_url":"https://api.github.com/users/dyweb/gists{/gist_id}","starred_url":"https://api.github.com/users/dyweb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dyweb/subscriptions","organizations_url":"https://api.github.com/users/dyweb/orgs","repos_url":"https://api.github.com/users/dyweb/repos","events_url":"https://api.github.com/users/dyweb/events{/privacy}","received_events_url":"https://api.github.com/users/dyweb/received_events","type":"Organization","site_admin":false},"repo":{"id":77100533,"name":"blog","full_name":"dyweb/blog","owner":{"login":"dyweb","id":8973605,"avatar_url":"https://avatars.githubusercontent.com/u/8973605?v=3","gravatar_id":"","url":"https://api.github.com/users/dyweb","html_url":"https://github.com/dyweb","followers_url":"https://api.github.com/users/dyweb/followers","following_url":"https://api.github.com/users/dyweb/following{/other_user}","gists_url":"https://api.github.com/users/dyweb/gists{/gist_id}","starred_url":"https://api.github.com/users/dyweb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dyweb/subscriptions","organizations_url":"https://api.github.com/users/dyweb/orgs","repos_url":"https://api.github.com/users/dyweb/repos","events_url":"https://api.github.com/users/dyweb/events{/privacy}","received_events_url":"https://api.github.com/users/dyweb/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dyweb/blog","description":"Dongyue Tech Blog","fork":false,"url":"https://api.github.com/repos/dyweb/blog","forks_url":"https://api.github.com/repos/dyweb/blog/forks","keys_url":"https://api.github.com/repos/dyweb/blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dyweb/blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dyweb/blog/teams","hooks_url":"https://api.github.com/repos/dyweb/blog/hooks","issue_events_url":"https://api.github.com/repos/dyweb/blog/issues/events{/number}","events_url":"https://api.github.com/repos/dyweb/blog/events","assignees_url":"https://api.github.com/repos/dyweb/blog/assignees{/user}","branches_url":"https://api.github.com/repos/dyweb/blog/branches{/branch}","tags_url":"https://api.github.com/repos/dyweb/blog/tags","blobs_url":"https://api.github.com/repos/dyweb/blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dyweb/blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dyweb/blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/dyweb/blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dyweb/blog/statuses/{sha}","languages_url":"https://api.github.com/repos/dyweb/blog/languages","stargazers_url":"https://api.github.com/repos/dyweb/blog/stargazers","contributors_url":"https://api.github.com/repos/dyweb/blog/contributors","subscribers_url":"https://api.github.com/repos/dyweb/blog/subscribers","subscription_url":"https://api.github.com/repos/dyweb/blog/subscription","commits_url":"https://api.github.com/repos/dyweb/blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/dyweb/blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/dyweb/blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/dyweb/blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/dyweb/blog/contents/{+path}","compare_url":"https://api.github.com/repos/dyweb/blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dyweb/blog/merges","archive_url":"https://api.github.com/repos/dyweb/blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dyweb/blog/downloads","issues_url":"https://api.github.com/repos/dyweb/blog/issues{/number}","pulls_url":"https://api.github.com/repos/dyweb/blog/pulls{/number}","milestones_url":"https://api.github.com/repos/dyweb/blog/milestones{/number}","notifications_url":"https://api.github.com/repos/dyweb/blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dyweb/blog/labels{/name}","releases_url":"https://api.github.com/repos/dyweb/blog/releases{/id}","deployments_url":"https://api.github.com/repos/dyweb/blog/deployments","created_at":"2016-12-22T01:47:13Z","updated_at":"2016-12-23T06:22:02Z","pushed_at":"2016-12-29T07:35:36Z","git_url":"git://github.com/dyweb/blog.git","ssh_url":"git@github.com:dyweb/blog.git","clone_url":"https://github.com/dyweb/blog.git","svn_url":"https://github.com/dyweb/blog","homepage":"http://blog.dongyueweb.com","size":197,"stargazers_count":6,"watchers_count":6,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":1,"mirror_url":null,"open_issues_count":2,"forks":1,"open_issues":2,"watchers":6,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dyweb/blog/pulls/7"},"html":{"href":"https://github.com/dyweb/blog/pull/7"},"issue":{"href":"https://api.github.com/repos/dyweb/blog/issues/7"},"comments":{"href":"https://api.github.com/repos/dyweb/blog/issues/7/comments"},"review_comments":{"href":"https://api.github.com/repos/dyweb/blog/pulls/7/comments"},"review_comment":{"href":"https://api.github.com/repos/dyweb/blog/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dyweb/blog/pulls/7/commits"},"statuses":{"href":"https://api.github.com/repos/dyweb/blog/statuses/93b49641e1255bf34bca8924016640370864d2cd"}}}}
{"actor":{"display_login":"JasonQSY"}}