JHProgressHJHProgressH08-14 09:49

《HelloGitHub》第 39 期

兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣!

简介

分享 GitHub 上有趣、入门级的开源项目。

这是一个面向编程新手热爱编程对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编程语言的项目让生活变得更美好的工具书籍、学习笔记、教程等,这些开源项目大多都是非常容易上手,而且非常 Cool。主要是希望大家能动手用起来,加入到开源社区中。

  • 会编程的可以贡献代码
  • 不会编程的可以反馈使用这些工具中的 Bug
  • 帮着宣传你觉得优秀的项目
  • Star 项目??

在浏览、参与这些项目的过程中,你将学习到更多编程知识提高编程技巧找到编程的乐趣

?? 最后 HelloGitHub 这个项目就诞生了 ??


以下为本期内容|每个月 28 号发布最新一期|点击查看往期内容

C# 项目

1、FreeSql:一个功能强大的 C# 对象关系映射程序(ORM),支持 .NETCore 2.1+、.NETFramework 4.5+ 开发模式下,开箱即用,可繁可简的使用方式。支持 CodeFirst 迁移、丰富的表达式函数、支持多种数据库、大量采用 ExpressionTree 技术提升性能等功能。示例代码:

var t0 = fsql.Select<Tag>()
    .Where(a => a.Parent.Parent.Name == "粤语")
    .IncludeMany(a => a.Tags, then => then.Where(sub => sub.Name == "xxx"))
    .ToList();

var t3 = fsql.Select<Xxx>()
    .Where(a => a.IsDelete == 0)
    .WhereIf(keyword != null, a => a.UserName.Contains(keyword))
    .WhereIf(role_id > 0, a => a.RoleId == role_id)
    .Where(a => a.Nodes.AsSelect().Any(t => t.Parent.Id == t.UserId))
    .Count(out var total)
    .Page(page, size)
    .OrderByDescending(a => a.Id)
    .ToList()

C++ 项目

2、pprint:一个让输出变得更漂亮的 C++ 库。就像 python 语言的 pprint 库,它对基本类型、字符串、复数、enum 类型、STL 容器等做了输出格式优化,有了缩紧和分行才更容易发现这个世界的美好。示例代码如下:

#include <pprint.hpp>
printer.print(std::map<std::string, std::set<int>>{{"foo", {1, 2, 3, 3, 2, 1}}, {"bar", {7, 6, 5, 4}}});

// 输出结果如下
{
  "bar" : {4, 5, 6, 7}, 
  "foo" : {1, 2, 3}
}

3、marksencent:这是一个在托福听力中标记句子的工具(即精听工具)。在听力时可文本对照,并且对听力音频中没听懂片段进行标记,并选择标记理由,方便日后的反复复习

CSS 项目

4、RemixIcon:一套免费、可商用、设计精美、细致的图标库。看到它第一眼后,我感觉自己之前用的图标简直就是枯草??。这个项目可以让开发者、设计师在一个图标库中快速找到适合的图标,用于自己的网站或 APP 开发。不同于混搭收集的图标库,RemixIcon 的每一枚图标都是由设计师精心设计而成,并且每一枚图标都包含填充和描边两种风格,便于切换使用

Go 项目

5、olivia:一个类似 Siri 的开源语音助手,目前只支持英文。开源的语音助手并不多,而且涉及的问题很复杂,现在有了它就可以基于这个项目做一些有趣的小应用

6、goalert:一个基于 Go 语言实现的报警和处理报警系统。它以发请求或者手动添加方式进行告警,支持短信、电话、发邮件等通知方式。集成了一个看板,基本上算是开箱即用。安装命令如下:

docker run -it --rm -p 8081:8081 goalert/all-in-one
访问本地 8081 端口,用户名 admin,密码 admin123

7、geziyor:Go 的分布式爬虫框架。示例代码:

func main() {
    geziyor.NewGeziyor(&geziyor.Options{
        StartURLs: []string{"http://quotes.toscrape.com/"},
        ParseFunc: quotesParse,
// exporter 可以用来把最终结果存成各种格式,例如 json
        Exporters: []geziyor.Exporter{exporter.JSONExporter{}},
    }).Start()
}

// 请求的结果直接进了一个管道处理函数,这样的函数可以串联起来,爬虫和清洗二合一
// 这样拆分爬虫逻辑,某些逻辑也可以重用
func quotesParse(g *geziyor.Geziyor, r *geziyor.Response) {
    r.HTMLDoc.Find("div.quote").Each(func(i int, s *goquery.Selection) {
        g.Exports <- map[string]interface{}{
            "text":   s.Find("span.text").Text(),
            "author": s.Find("small.author").Text(),
        }
    })
    if href, ok := r.HTMLDoc.Find("li.next > a").Attr("href"); ok {
        g.Get(r.JoinURL(href), quotesParse)
    }
}

8、script:一个封装好的 OS 三方库,解决了 Go 使用 OS 标准库错误处理的麻烦。如果没有它,打开一个文件查找一个关键字再统计下数量,你至少会需要 2-3 个异常处理的逻辑。有了它,只需要:

numErrors, err := script.File("test.txt").Match("Error").CountLines()
// 等同于 grep Error test.txt | wc -l

9、unioffice:一个让 Go 可以创建、操作 Office Word、Excel、Powerpoint 三件套的库。示例代码:

dox := document.New()
doc.X().Background = wordprocessingml.NewCT_Background()
doc.X().Background.ColorAttr = &wordprocessingml.ST_HexColor{}
doc.X().Background.ColorAttr.ST_HexColorRGB = color.RGB(50, 50, 50).AsRGBString()

Java 项目

10、Java:一份算法清单,详细演示了 Java 中内置的算法实现。如果你想要知道平时使用 Java 时,Java 的内置算法如何帮你处理任务,那么这个项目值得一读。此外,这份清单中还用到了配图来帮助你理解

11、Linkage-RecyclerView:一款基于 MVP 架构开发的二级联动列表控件,高度解耦、轻松配置、使用方便。依托于 MVP 的 “配置解耦” 特性,使用者无需知道内部的实现细节,仅通过实现配置类即可完成功能的定制和扩展。此外,在不设置自定义配置的情况下,最少只需一行代码即可运行起来

12、SmoothRefreshLayout:一个高效、强大的 Android 刷新库。支持越界回弹、二级刷新、横向刷新、拉伸回弹、类QQ下拉回弹效果等

JavaScript 项目

13、wechat-format:公众号文章的排版真是让人头大,还好有这个微信公众号排版编辑器。便捷地把 Markdown 内容转换成微信特定的 HTML 内容,然后粘贴到公众号的编辑后台就完活了。虽然不是特别美观,但是节省了很多时间,在线尝试

14、fe-interview:每天早上 4 个基础前端面试题,助你在前端面试中‘所向披靡’,无人能挡

15、AutoPiano:自由钢琴(AutoPiano)是利用 HTML5 技术开发的在线钢琴应用。在学习工作之余可以享受钢琴、音乐的美好,支持钢琴曲的自动播放功能、按键提示。让学习钢琴变得简单,谁都可以练成‘钢琴手’,在线体验

16、HitUP:一款发现 Top 系列的 Chrome 扩展。它会替换掉浏览器默认的 New Tab 空白页面,助你保持对流行技术趋势的跟进。核心功能是展示 GitHub 上近期最流行的项目,并会围绕 “Find top things” 的主题谨慎添加新特性,让你对新技术和新事物‘了如指掌’

17、filepond:一个 JavaScript 文件上传库。可以上传拖入的任何内容,具有体积小、上传快、方便的文件管理等特点,从而让用户享受‘丝滑’般的文件上传体验

Objective-C 项目

18、OpenEmu:在 macOS 系统上回味下童年时的游戏,一个可以玩各种复古游戏的游戏机

PHP 项目

19、FreshRSS:一个 PHP 写的免费自托管 RSS 阅读器(free and free),据说上万条订阅都不带卡顿。可分配多账户、支持第三方安卓、iOS 客户端、支持 FEVER API 协议,与 Rsshub 搭配使用,完美解决 RSS 重度用户的痛点。是 RSS 爱好者的福音和神器

Python 项目

20、psutil:一个跨平台库的进程和系统资源监控、管理库。用于查看有关正在运行的进程和系统利用率,如 CPU、内存、磁盘、网络等信息