興趣是最好的老師,HelloGitHub 就是幫你找到興趣!
簡介
分享 GitHub 上有趣、入門級的開源專案。
這是一個面向程式設計新手、熱愛程式設計、對開源社群感興趣 人群的月刊,月刊的內容包括:各種程式語言的專案、讓生活變得更美好的工具、書籍、學習筆記、教程等,這些開源專案大多都是非常容易上手,而且非常 Cool。主要是希望大家能動手用起來,加入到開源社群中。
- 會程式設計的可以貢獻程式碼
- 不會程式設計的可以反饋使用這些工具中的 Bug
- 幫著宣傳你覺得優秀的專案
- Star 專案⭐️
在瀏覽、參與這些專案的過程中,你將學習到更多程式設計知識、提高程式設計技巧、找到程式設計的樂趣。
? 最後 HelloGitHub 這個專案就誕生了 ?
以下為本期內容|每個月 28 號釋出最新一期|點選檢視往期內容
C 專案
1、reading-code-of-nginx-1.9.2:nginx-1.9.2 原始碼通讀分析註釋,帶詳盡函式中文分析註釋以及相關函式流程呼叫註釋
Go 專案
2、annie:Go 編寫的快速、簡單、乾淨的視訊下載程式。支援嗶哩嗶哩、YouTube 視訊網站
$ annie -c cookies.txt https://www.bilibili.com/video/av20203945/
Site: 嗶哩嗶哩 bilibili.com
Title: 【2018拜年祭單品】相遇day by day
Type: video
Stream:
[default] -------------------
Quality: 高清 1080P60
Size: 220.65 MiB (231363071 Bytes)
# download with: annie -f default "URL"
16.03 MiB / 220.65 MiB [==>----------------------------] 7.26% 9.65 MiB/s 19s
複製程式碼
3、knowledge:Go 知識圖譜
Java 專案
4、PreLoader:Android 頁面在開啟後需要在 UI 初始化完成後才能發起網路請求,以免網路請求返回後展示到 UI 時出現錯誤。但這種序列的做法導致頁面的整個初始化時間變長。使用該工具可以在開啟頁面之前預載入資料,然後在頁面 UI 初始化完成後提取預載入好的資料進行展示,從而縮短頁面初始化時間,提升使用者體驗。示例程式碼如下:
// 開啟預載入任務
int preLoaderId = PreLoader.preLoad(new Loader());
Intent intent = new Intent(this, PreLoadBeforeLaunchActivity.class);
intent.putExtra("preLoaderId", preLoaderId);
startActivity(intent);
// 預載入任務:模擬網路介面請求獲取資料
class Loader implements DataLoader<String> {
@Override
public String loadData() {
//此方法線上程池中執行,無需再開子執行緒去載入資料
try {
Thread.sleep(600);
} catch (InterruptedException ignored) {
}
return "data from network server";
}
}
// 在Activity(或Fragment)中UI初始化完成後開始監聽預載入資料
PreLoader.listenData(preLoaderId, new Listener());
// 資料載入完成後,會呼叫DataListener.onDataArrived(...)來處理載入後的資料
class Listener implements DataListener<String> {
@Override
public void onDataArrived(String data) {
//此方法在主執行緒中執行,無需使用Handler切換執行緒執行
Toast.makeText(activity, data, Toast.LENGTH_SHORT).show();
}
}
複製程式碼
5、SuperLike:仿今日頭條點贊噴射表情動畫
JavaScript 專案
6、node-in-debugging:《Node.js 除錯指南》作者整理了使用 Node.js 開發這幾年的除錯經驗和思路
7、chrome-music-lab:Chrome 音樂實驗室是一個網站,讓學習音樂變得更加簡單、好玩。完全基於Web端,國內可直接訪問、老少皆宜、支援多種樂器,圓你一個音樂夢
8、mpvue:小程式的前端框架。框架基於 Vue.js 核心,修改了 Vue.js 的 runtime 和 compiler 實現。使其可以執行在小程式環境中,為小程式開發引入了整套 Vue.js 開發體驗。5 分鐘上手視訊- 徹底的元件化開發能力:提高程式碼複用性
- 完整的 Vue.js 開發體驗
- 方便的 Vuex 資料管理方案:方便構建複雜應用
- 快捷的 webpack 構建機制:自定義構建策略、開發階段 hotReload
- 支援使用 npm 外部依賴
- 使用 Vue.js 命令列工具 vue-cli 快速初始化專案
- H5 程式碼轉換編譯成小程式目的碼的能力
9、30-seconds-of-code:精選可以在 30秒 或更短的時間內理解的實用 JavaScript 程式碼片段集合
Objective-C 專案
10、WeChatPlugin-MacOS:Mac 版微信小助手,支援自動回覆、訊息防撤回、遠端控制、微信多開、會話置底、免認證登入、通知快捷回覆等功能
11、LSAnimator:通過使用 LSAnimator(Objective-C)或者 CoreAnimator(Swift)可以用少量的程式碼實現複雜而又易於維護的動畫,並且彌補了 JHChainableAnimations 的致命缺陷。詳細描述PHP 專案
12、DzzOffice:一套開源辦公套件,適用於企業、團隊搭建自己的 類似 Google 企業應用套件、微軟 Office365 的企業協同辦公平臺。線上演示
Python 專案
13、HAipproxy:使用 Scrapy+Redis 實現的高可用分散式 IP 代理池,為大型分散式爬蟲提供高可用低延遲的代理 IP 資源。
from client.py_cli import ProxyFetcher
args = dict(host='127.0.0.1', port=6379, password='123456', db=0)
# 這裡`zhihu`的意思是,去和`zhihu`相關的代理ip校驗佇列中獲取ip
# 這麼做的原因是同一個代理IP對不同網站代理效果不同
fetcher = ProxyFetcher('zhihu', strategy='greedy', redis_args=args)
# 獲取一個可用代理
print(fetcher.get_proxy())
# 獲取可用代理列表
print(fetcher.get_proxies()) # or print(fetcher.pool)
複製程式碼
以知乎為目標抓取網站,該代理IP池的實際效能測試結果如下:
14、MovieHeavens:基於 Pyqt4 的電影天堂電影搜尋工具,再也不用忍受各種廣告和點選跳轉了
15、WechatSogou:基於搜狗微信搜尋的微信公眾號爬蟲庫,極易上手。示例程式碼:
import wechatsogou
ws_api = wechatsogou.WechatSogouAPI()
ws_api.get_gzh_info('微信名稱')
複製程式碼
Swift 專案
16、iina:Mac 下開源多媒體播放器,支援多國語言、高逼格 UI。安裝:brew cask install iina
其它
17、Interview-Notebook:該專案整理了技術面試中需要掌握的基礎知識,包含了網路、作業系統、演算法、資料庫、Java、分散式等
18、blog:螞蟻資料體驗技術團隊的部落格
19、work-in-australia:介紹程式設計師如何申請到澳洲工作
20、front-end-interview-handbook:與典型的軟體工程師面試不同,前端面試對演算法的重視比較低。面試會更多考查錯綜複雜的前端知識,像 HTML、CSS、JavaScript 等等。這個專案整理了這些問題,並給出了答案以及參考連線。中文版
機器學習
21、MachineLearning:ApacheCN 製作的《機器學習實戰》。配套視訊:編碼能力強,建議觀看《機器學習實戰 - 教學版》。 編碼能力弱,建議觀看《機器學習實戰 - 討論版》
22、tensorflow-docs:TensorFlow Docs 是由掘金翻譯計劃實時維護的 TensorFlow 官方文件中文版,維護者為全球各大公司開發人員和各著名高校研究者及學生
23、DeepLeague:英雄聯盟的機器學習專案,規模不大,適合研究一些 CV 和 ML 的演算法應用
換種方式閱讀
- 網站: https://hellogithub.com
- GitBook: https://gitbook.hellogithub.com
宣告
如果你發現了好玩、有意義的開源專案 點選這裡 分享你覺得有意思的專案。
歡迎轉載,請註明出處和作者,同時保留宣告。