开源百宝箱《HelloGitHub》第 64 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣!
简介
分享 GitHub 上有趣、入门级的开源项目。
HelloGitHub 有实战、教程、黑科技、开源书籍、企业级开源项目,涵盖多种编程语言 Python、Java、Go、C/C++、Swift...让你在短时间内感受到开源的魅力,对编程产生兴趣!
感谢大家点亮的每一个 Star ✨
以下为本期内容|每个月 28 号更新
C 项目
1、X-TRACK:开源的 GPS 自行车码表。功能齐全且拥有美观的界面,支持离线地图、显示轨迹等功能。在线观看
C# 项目
2、XboxDownload:Xbox 下载助手。支持 Xbox 游戏加速下载、比价等功能
3、ToastFish:利用 Windows 通知栏背单词的软件。能够选择单词集合,并在背完后进行测验
C++ 项目
4、Plants-vs.-Zombies-Online-Battle:在没有游戏源代码的前提下,通过逆向工程和代码注入实现植物大战僵尸局域网对战模式。成功加载后解密模式的最后一关,会变为网络对战关卡。玩法为其中一个玩家放置植物进行防御,另一玩家放置僵尸进攻。项目结合逆向工程、C++和汇编相关技术,在无源代码的前提下为游戏增加功能。对逆向工程感兴趣的小伙可以看看源码
5、xpack:实现 C++ 结构体和 JSON/XML/BSON 互转的库。C++ 初学者可以通过该项目学到高阶的宏技巧和初级的 SFINAE 写法
#include <iostream>
#include "xpack/json.h" // 包含该头文件
struct User {
int id;
std::string name;
XPACK(O(id, name)); // 添加宏定义XPACK在结构体定义结尾
};
int main(int argc, char *argv[]) {
User u;
string data = "{\"id\":12345, \"name\":\"xpack\"}";
xpack::json::decode(data, u); // json转结构体
cout<<u.id<<';'<<u.name<<endl;
string json = xpack::json::encode(u); // 结构体转json
cout<<json<<endl;
return 0;
}
CSS 项目
6、normalize.css:用来消除浏览器默认样式的 CSS 库。不同浏览器对于同一个元素会有不一样的默认样式,比如:超链接线的颜色。相较于 reset(重制样式)解决办法,normalize.css 采用更加和平且高效地方式,解决了浏览器默认样式的问题,尽可能让同一个 CSS 文件在不同的浏览器上显示效果一样和正常
Go 项目
7、goim:轻量级、高性能、支持集群的 IM 和实时推送服务。纯 Golang 实现支持广播消息、房间推送、安全验证和多协议支持等功能,还有基于 Kafka 的异步消息推送
8、dtm:Go 语言实现的分布式事务管理器。优雅的解决了微服务架构下幂等、空补偿、悬挂等分布式事务难题,提供了简单易用、高性能、易水平扩展的分布式事务解决方案,除 Go 外还有 Python、PHP、Node.js 等语言的客户端
// 具体业务微服务地址
const qsBusi = "http://localhost:8081/api/busi_saga"
req := &gin.H{"amount": 30} // 微服务的载荷
// DtmServer为DTM服务的地址,是一个url
saga := dtmcli.NewSaga("http://localhost:8080/api/dtmsvr").
// 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransOutCompensate"
Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req).
// 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransInCompensate"
Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req)
// 提交saga事务,dtm会完成所有的子事务/回滚所有的子事务
err := saga.Submit()
9、erda:企业级一站式 PaaS 平台。基于 Kubernetes 以应用为中心的 DevOps 且支持微服务治理的多云架构,可以让复杂业务的开发、运维、监控和问题诊断变得更简单、更高效。能减轻使用不同的工具混搭技术底座和云平台的运维难度,同时还有漂亮、简单易用的界面设计
10、hugo:Go 语言的静态网站生成器。静态网站生成器就是在本地把内容文件生成静态网页(HTML+CSS),然后把生成好的页面上传到服务器的工具。这种工具能够帮你轻松且快速地上线网站,而用户仅需选择喜欢的主题,便可以专注于内容创作。Hugo 作为最流行的静态网站生成器之一,拥有丰富的插件和主题,就算没有编程基础也能帮你快速制作出满意的博客或者网站
Java 项目
12、Mybatis-PageHelper:MyBatis 通用分页插件,使用方法
13、guava:Google 开源的 Java 三方类库。该库提供包括集合、I/O、缓存、并发等开箱即用的工具方法,任何的 Java 应用都可以通过依赖的方式引入该项目。作为 Google 的开源项目,本身的源码也是非常值得开发者学习
14、dataease:开源的数据可视化和分析工具。采用 SpringBoot+Vue.js 技术栈实现,通过丰富的可视化图表让数据更加直观
- 数据连接:支持关系型数据库、Excel 等文件、Hadoop 等大数据平台、NoSQL 等各种数据源
- 图表展示:支持 PC 端、移动端及大屏
- 制作图表:支持丰富的图表类型、支持拖拉拽方式快速制作仪表板
- 数据引擎:支持直连模式、本地模式
JavaScript 项目
15、etherpad-lite:支持实时协作的富文本 WYSIWYG 编辑器
16、sjcl:斯坦福大学开源的 JavaScript 加密库。用于 JS 的加密和解密,体积小且支持多种加密算法
sjcl.encrypt("password", "data") //加密数据
sjcl.decrypt("password", "encrypted-data") //解密数据
17、rubick:基于 Electron 开发的开源插件化工具箱。起初项目作者是 uTools 的用户但 uTools 没有开源,他又想接入公司内部的工具,然后 Rubick(拉比克)就诞生了。它实现了 uTools 的大部分功能,可以适配 uTools 丰富的开源插件,享受用完即走的便利
18、50projects50days:50 个采用 HTML+CSS+JS 的前端小项目集合。项目包含网页源码和效果展示,标准入门级的前端开源项目。通过查看效果让新手感受前端的美妙,简单的源码降低了上手写代码门槛。或许其中某个网页的效果也会让工作多年的你大呼哇塞
19、gogocode:简化 JavaScript 抽象语法树(AST)处理的工具。借鉴了类似 jQuery 的预发和字符串构建 AST 的思想,大大简化了学习成本、降低了开发复杂度,官方团队在此基础上还开发出了 Vue2 转 Vue3 的插件
Kotlin 项目
20、FengYunWeather:开源的安卓天气 APP。使用 Kotlin 语言编写,采用 MVVM 架构和 OkHttp、coil、Room 等框架,代码逻辑清晰,适合新手入门和学习
21、k-9:开源的 Android 电子邮件客户端
Python 项目
22、tqsdk-python:开源的 Python 量化交易框架。使用少量代码即可实现量化交易程序,还支持历史数据、实时数据、策略回测、实盘交易、图形化界面展示等功能。但免费版本仅提供全部的期货、商品/金融期权和上证50、沪深300 和中证500 的实时行情,付费版支持更多种类以及更加稳定的服务
from tqsdk import TqApi, TqAuth, TqAccount, TargetPosTask
api = TqApi(TqAccount("H海通期货", "4003242", "123456"), auth=TqAuth("信易账户", "账户密码")) # 创建 TqApi 实例, 指定交易账户
q_1910 = api.get_quote("SHFE.rb1910") # 订阅近月合约行情
t_1910 = TargetPosTask(api, "SHFE.rb1910") # 创建近月合约调仓工具
q_2001 = api.get_quote("SHFE.rb2001") # 订阅远月合约行情
t_2001 = TargetPosTask(api, "SHFE.rb2001") # 创建远月合约调仓工具
while True:
api.wait_update() # 等待数据更新
spread = q_1910.last_price - q_2001.last_price # 计算近月合约-远月合约价差
print("当前价差:", spread)
if spread > 250:
print("价差过高: 空近月,多远月")
t_1910.set_target_volume(-1) # 要求把1910合约调整为空头1手
t_2001.set_target_volume(1) # 要求把2001合约调整为多头1手
elif spread < 200:
print("价差回复: 清空持仓") # 要求把 1910 和 2001合约都调整为不持仓
t_1910.set_target_volume(0)
t_2001.set_target_volume(0)
23、Pillow:最流行的 Python 图像处理库。它的诞生是由于 PIL 的年久失修,现已于 2011 年停止维护,所以开源爱好者们就在 PIL 的基础上创建了 Pillow。该库支持丰富的图像格式和强大的图像处理功能,如果你要用 Python 处理图像,它绝对是不二之选
# 安装:pip install pillow
# 注意安装的版本,不同版本支持的 Python 版本也不同
from PIL import Image
# 打开 jpg 图像文件
im = Image.open('hellogithub.jpg')
# 转换成黑白图像
grayscale = tatras.convert('L')
# 展示图像
grayscale.show()
24、JDMemberCloseAccount:用 Python 操作 selenium 的实战项目。该项目以全自动退出京东加入的店铺会员为例,介绍了 Python 自动化的知识和方案
25、bigdata_analyse:大数据分析实战项目的集合。该项目包含了淘宝、租房、招聘等数据的分析实例,不仅有 Python、SQL、HQL 的实例代码,还附上了数据集下载地址。想学习大数据的同学们,万事俱备就差你来学了
26、OnlineJudge:青岛大学开源的在线评测系统(OJ),采用 Django+Vue.js 实现。功能如下:
- 基于 Docker 的一键部署
- 支持 ACM/OI 两种比赛模式、实时/非实时评判
- 丰富的可视化图表,一图胜千言
- 支持多种编程语言:C/C++、Java、Python2/3
- 比赛用户 IP 限制 (CIDR ranges)
Swift 项目
27、SwifterSwift:500合1 的原生 Swift 扩展库集合。集成了 500 多个原生 Swift 扩展的库,提供了更加方便的函数、语法糖、数据类型、UIKit 以及更高性能的 Cocoa 类,提高 Swift 的开发效率实现 1+1>2 的效果。适用于 iOS、macOS、tvOS 等系统
// 原来使用 UIAlertController 实现提醒的代码如下:
let alert = UIAlertController(title: "测试", message: "HelloGitHub", preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alert.addAction(okAction)
present(alert, animated: true, completion: nil)
// 改成 SwifterSwift 后:
let alert = UIAlertController(title: "测试", message: "HelloGitHub")
alert.show()
28、firefox-ios:Firefox 浏览器 iOS 源码
其它
29、nocodb:开源的智能表格制作工具。我最初以为 nocodb 只是数据库桌面管理工具,后来我发现自己狭隘了。它不仅可以把数据库和图片等数据转化成表格的方式展现,还提供了团队协作、工作流接入以及更加开放 API 服务。让团队在数据上工作,数据就在手边“即视即用”。知名电子表格-数据库混合体 Airtable 产品的开源替代品
30、elasticsearch-dump:Elasticsearch 数据导入/导出工具,可以用于 ES 的数据备份和迁移
31、freeCodeCamp:免费学习编程的开源社区。它创立于 2014 年,期间帮助了无数编程爱好者学习编程,中文站点于 2021 年上线。freeCodeCamp 采用在线编程闯关的学习形式,遇到问题还可以通过活跃的社区答疑解惑。平台鼓励新手多动手写代码、运行代码,提倡 RSA 即:遇到问题先阅读文档资料,然后求助于搜索引擎,最后实在没招了再提问,这样有助于培养良好的提问习惯终身受益。同时作为非盈利组织,freeCodeCamp 不仅提供了免费学习的课程还开源了网站代码
32、developer-roadmap:开发者学习路线图。这是一份包含后端、前端、运维部署等方向的学习路径图,帮你指明前进的方向。中文
33、adarkroom:《小黑屋》是一款有趣的文字冒险类游戏。支持中文能够运行在浏览器、iOS 和 Android 设备,浏览器上默认会保存游戏进度到本地,另外还支持存档导入/导出防止丢失。友情提示:没玩过的同学刚开始容易摸不着头脑,因为事件触发需要时间,看滚动的文字+点击“添柴”耐心等 30 秒,就会触发新的事件了。如果你喜欢养成类游戏,那它一定会是你的菜。在线试玩
34、hyper:基于 Electron 的超高颜值终端工具。颜值即正义不仅在找对象时有用,挑工具时也同样奏效。它支持包括 Windows、Linux、macOS 等主流操作系统快下载试试,让你的终端漂亮的不像实力派
35、git-split-diffs:更加直观展示代码改动的命令行工具。在终端上使用 git diff
查看修改时,默认的展示效果并不直观,该项目将代码的改动以类似 GitHub 网站的风格展示方便查看,还有多种主题可供选择
开源书籍
36、understand_linux_process:《理解 Linux 进程》
37、http-api-guide:《HTTP 接口设计指北》内容为设计 Web API 的一些建议
38、CheatSheetSeries:OWASP(开放式 Web 应用程序安全项目)速查表。项目由 OWASP 社区的安全专家编写,列举了多种安全问题和解决方案,从而更好地保护你的 Web 应用。在线阅读
机器学习
39、HyperLPR:中文车牌识别开源框架。支持 Python、Android、C++ 等编程语言调用,接入简单准确度较高。推荐给有车牌识别需求的小伙伴
40、insightface:支持 2D&3D 人脸分析的 Python 库。基于 PyTorch 和 MXNet 实现,采用先进的 ArcFace 人脸识别方法,高效地实现了人脸检测、识别等功能
41、Statistical-Learning-Method_Code:用 Python 实现《统计学习方法》书中的算法
42、DouZero_For_HappyDouDiZhu:基于快手开源的斗地主强化学习框架,实现的欢乐斗地主 AI 助手
最后
如果你发现了 GitHub 上有趣的项目,就分享给大家伙吧。
以上就是本期的所有内容了,看完还不过瘾?
关注 HelloGitHub 公众号不仅可以收到第一时间的更新。点击菜单栏->往期->月刊
往期月刊所有的内容尽收眼底一次看过瘾!还有更多开源项目的介绍和宝藏项目等待你的发现。
作者:削微寒
扫描左侧的二维码可以联系到我
本作品采用署名-非商业性使用-禁止演绎 4.0 国际 进行许可。