整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

程序员经常看的开源月刊《HelloGitHub》第 57 期

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

简介

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

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

  • 会编程的可以贡献代码
  • 不会编程的可以反馈使用这些工具中的 Bug
  • 帮着宣传你觉得优秀的项目
  • Star 项目⭐️
  • 在浏览、参与这些项目的过程中,你将学习到更多编程知识提高编程技巧找到编程的乐趣

    最后 HelloGitHub 这个项目就诞生了


    以下为本期内容|每个月 28 号发刊

    C 项目

    1、ngx_waf:一个 Nginx 防火墙模块。我差点就错过了的宝藏项目,它使用简单不需要复杂的配置,支持的功能直戳我的痛点。你看:

  • 支持 IPV4、IPV6 和 IP 段黑白名单
  • CC 防御即自动拉黑 IP 一段时间
  • 支持 GET、POST、URL、Cookie 等黑名单(正则)
  • C++ 项目

    2、fast-cpp-csv-parser:读取 CSV 文件的 C++ 库(仅头文件)。示例代码:

    # include "csv.h"
    
    int main(){
      io::CSVReader<3> in("ram.csv");
      in.read_header(io::ignore_extra_column, "vendor", "size", "speed");
      std::string vendor; int size; double speed;
      while(in.read_row(vendor, size, speed)){
        // 对 ram.csv 文件中的数据,做你想做的事情吧!
      }
    }
    

    3、UNO:使用 C++ 编写的命令行 UNO 纸牌游戏。操作方便支持人机或联机对战,游戏基于 Asio 网络库和现代 C++ 开发,也有对 C++17 的尝试。分别实现了服务端、客户端,代码简单对 C++ 新手友好,UNO 的爱好者快来玩一玩吧!

    4、godot:一款功能丰富的开源游戏引擎。最初它只是一款 2D 引擎,近期拓展了 3D 部分的能力。相较于 UE4 或者 Unity 这样的成熟商业引擎来说,Godot 还很年轻不够成熟,尤其 3D 方面的能力。但它拥有简易的开发方式,上手简单。而且社区活跃、文档覆盖全面、有较为丰富的示例代码,对于刚入门的游戏开发者友好。同时开源引擎底层代码完全开源,开发者可以阅读和贡献代码,而不是只停留在游戏逻辑开发层面。总而言之 Godot 是一个极有潜力的游戏引擎,推荐给想学习游戏开发的同学

    CSS 项目

    5、water.css:一个专门为简单页面和示例网页准备的 CSS 框架

    Go 项目

    6、fyne:一款 Go 语言跨平台 UI 库。想用 Go 写图形界面应用的小伙伴,快速上手:

    安装
    $ go get fyne.io/fyne
    运行一个 demo
    $ go get fyne.io/fyne/cmd/fyne_demo/
    $ fyne_demo
    

    7、golearn:Go 写的机器学习框架。来,跑个模型试试吧:

    cd $GOPATH/src/github.com/sjwhitworth/golearn/examples/knnclassifier
    go run knnclassifier_iris.go
    

    Java 项目

    8、keepass2android:一个开源的 Android 密码管理器。下载地址,功能:

  • 仅需输入一次安全性很强的密码(很长或随机的密码)
  • 支持几乎可与所有的 Android 的浏览器
  • 支持 .kdbx 文件的读写
  • 能够编辑条目包括附加字符串字段、文件附件、标签等
  • 等等
  • 9、PrettyZoo:一款 Java 写的高颜值 ZooKeeper 客户端桌面应用。该项目使用了 JDK11 以及 JavaFX 编写的 GUI 客户端,代码量适中适合想学习 JavaFX 编写应用的朋友。需要连接 ZK 服务端查看数据的话,手边有这么个工具还是挺方便的。实用和颜值集一身的项目

    10、vueblog:一款轻量级 Java 博客项目。基于 SpringBoot+Vue 实现并附有详细开发文档和讲解视频,让刚学会 Java 的同学也能搞定。每个体面的技术人员可能都有一个自己说了算的博客吧

    JavaScript 项目

    11、x-spreadsheet:基于 JavaScript 实现的轻量级 Web 电子表格库。它功能齐全,包含表格的基本操作和函数等,还有详细的中文文档,在线尝试

    12、h5-Dooring:一款功能齐全的 H5 页面可视化配置平台。让你通过可视化的方式制作出 H5 页面,技术栈以 React 为主,后台采用 Node.js 实现。虽然网上有很多这种工具,但本项目免费开源、功能齐全值得一试

    13、Ant-Forest:基于 Auto.js 的蚂蚁森林能量自动收获脚本。它是个“绿色环保”的项目,我能从中感受到满满的爱和想把它做好的决心!来看看作者开发 Ant-Forest 时解决了哪些难题:

    1. 能量球识别无法使用控件信息(使用基于霍夫变换的图像识别)
    2. 脚本执行逻辑易被打断(使用事件监听及扩展模块增强鲁棒性)
    3. 每次只能运行一次(完善的复查及定时循环功能)
    4. 不同设备分辨率及屏幕比例不同(使用等比缩放/定宽缩放等进行适配)

    14、tui.image-editor:功能齐全的图片编辑器。支持图片剪裁、旋转、涂鸦等功能,实现了 Vue 和 React 封装的组件,便于整合进你的项目

    15、windows95:基于 Electron 实现的 Windows 95 操作系统。它实现了该操作系统下的所有东西,对!所有!想体验下 Windows 95 版的扫雷吗?下载安装即可

    Objective-C 项目

    16、LuLu:免费开源的 macOS 防火墙软件

    PHP 项目

    17、humhub:用 PHP 写的开源社交平台。看过《社交网络》的小伙伴,都知道大名鼎鼎的 Facebook 最早就是扎克伯格用 PHP 语言写出来的,humhub 能够让不会编程的小伙伴也可以用创建出一个社交平台啦。跟着提示一步步操作,不到 1 分钟我的社交平台就建好了

    18、phpbrew:一个编译、安装、管理多版本 PHP 的工具。有了它就可以方便地在不同 PHP 版本之间自由切换啦,特性:

  • 配置选项简化为 Variants 无需担心路径问题
  • 集成至 bash/zsh 等,易于切换版本
  • 易于安装、启用 PHP 扩展
  • Python 项目

    19、python-patterns:Python 设计模式和使用场景的集合

    20、pgcli:支持语法高亮和自动补全的 Postgres 数据库客户端命令行工具。它安装简单上手快速,如果你用过 Postgres 数据库自带的命令行工具,就一定能感受到 pgcli 的迷人之处

    21、15-minute-apps:基于 PyQt 框架写的小型桌面应用程序的集合。想用 Python 写桌面应用的小伙伴,这个项目应该可以帮到你。比如写个扫雷游戏:

    Swift 项目

    22、Pine:一个免费、轻量、简洁的 macOS Markdown 编辑器。功能:

  • 主题
  • LaTex 公式
  • 自动保存
  • 自定义字体
  • 字数统计等写作分析
  • 等等
  • 23、Publish:专为 Swift 开发人员准备的静态网站生成器。让你实现整个网站都是用 Swift 构建的工具,支持多种主题、插件以及更多强大的自定义选项。示例网站,安装和快速开始:

    $ git clone https://github.com/JohnSundell/Publish.git
    $ cd Publish
    $ make
    $ mkdir MyWebsite
    $ cd MyWebsite
    $ publish new
    

    其它

    24、open-source-rover:NASA 面向科技爱好者开源的火星漫游车设计方案和代码。通过该项目你可以使用便宜的树莓派做出自己的火星漫游车,所需的零件很容易就可以买到,遥控部分是使用现成的 Xbox 手柄或者手机,减少花销。喜欢动手和硬件的小伙伴们,这个东西够酷吗?

    25、bat:替代 cat 的命令行工具。你还在命令行用 cat 查看文件吗?那你就 out 啦!今天推荐的 bat 它不仅支持语法高亮,还能展示 Git 的改动。macOS 下安装命令:brew install bat 相信你用过 bat 后就不会再想用回 cat 了

    26、Web-Dev-For-Beginners:微软开源的 Web 开发教程。该教程共有 24 节课,但目前只有英文版

    27、neofetch:展示操作系统信息的命令行工具,支持将近 150 种操作系统

    28、jpeg_tutorial:教你编写 JPEG 解码器的教程,示例为 Rust 代码

    29、sql-style-guide:一份 SQL 语句编写风格建议。比如:

    -- Good
    select *
    from users
    where email = 'example@domain.com'
    
    -- Bad
    select *
    from users
    where email = "example@domain.com"
    

    开源书籍

    30、pure-bash-bible:该书有好多复制就能用的 bash 函数,我愿称其为 bash 的“奇技淫巧”。比如把字母转为大写的函数:

    upper() {
        # Usage: upper "string"
        printf '%s\n' "${1^^}"
    }
    
    $ upper "hello"
    HELLO
    

    机器学习

    31、pulse:根据包含马赛克的人脸图像,生成一张相似容貌的结果。注意不是复原哦,仅可用于人脸

    32、Surface-Defect-Detection:该项目整理了目前大量靠谱的表面缺陷检测数据集,还有最新的顶会论文以及作者的解读笔记。从事视觉方向的小伙伴,心动了吗?


    最后

    迎留言告诉我本期你最喜欢那个项目,如果觉得本文还不错的话,就点赞、转发一波吧~

    这篇文章中,我将分享21个HTML技巧,包括代码片段,可以提升你的编码技能。

    让我们立即开始吧。

    (本文视频讲解:java567.com)

    习CSS是构建好看网页的一种方式。但是,在学习过程中,我们倾向于(大部分时间)限制自己,一遍又一遍地使用相同的属性。毕竟,我们是一种习惯性的动物,我们会使用自己习惯且熟悉的东西。

    因此,在这篇文章中,向你介绍7个 比较少见且好用的 CSS 属性,希望对你有所帮助。

    1. vertical-align

    CSS 的属性 vertical-align 用来指定行内元素(inline)或表格单元格(table-cell)元素的垂直对齐方式。

    就像定义说的,这个属性允许你垂直对齐文本。它对于顺序指示器(st, nd等)、需要的输入星号(*)或没有正确居中的图标特别有用。vertical-align取其中一个值:super | top | middle | bottom | baseline (default) | sub | text-top | text-bottom,或从基线开始的长度(px,%, em, rem等等)。

    baseline: 使元素的基线与父元素的基线对齐。HTML规范没有详细说明部分可替换元素的基线,如<textarea> ,这意味着这些元素使用此值的表现因浏览器而异。

    sub:使元素的基线与父元素的下标基线对齐。

    super:使元素的基线与父元素的上标基线对齐。

    text-top:使元素的基线与父元素的上标基线对齐。

    text-bottom:使元素的底部与父元素的字体底部对齐。

    middle:使元素的中部与父元素的基线加上父元素x-height(译注:x高度)的一半对齐。

    注意 vertical-align 只对行内元素、表格单元格元素生效:不能用它垂直对齐块级元素。

    资源:MDN(https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align)。

    2. writing-mode

    writing-mode 属性定义了文本水平或垂直排布以及在块级元素中文本的行进方向。为整个文档设置书时,应在根元素上设置它(对于 HTML 文档应该在 html 元素上设置)。它采用以下值之一horizontal-tb (default) | vertical-rl | vertical-lr。

    horizontal-tb:对于左对齐(ltr)脚本,内容从左到右水平流动。对于右对齐(rtr)脚本,内容从右到左水平流动。下一水平行位于上一行下方。

    vertical-rl:对于左对齐(ltr)脚本,内容从上到下垂直流动,下一垂直行位于上一行左侧。对于右对齐(rtr)脚本,内容从下到上垂直流动,下一垂直行位于上一行右侧。

    vertical-lr:对于左对齐(ltr)脚本,内容从上到下垂直流动,下一垂直行位于上一行右侧。对于右对齐(rtr)脚本,内容从下到上垂直流动,下一垂直行位于上一行左侧。

    资源:MDN(https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode)。

    3. font-variant-numeric

    font-variant-numeric CSS属性控制数字,分数和序号标记的替代字形的使用。

    它采用以下这些值之一:normal | ordinal | slashed-zero | lining-nums | oldstyle-nums | proportional-nums | tabular-nums | diagonal-fractions | stacked-fractions。

    此属性对于设置数字样式很有用。根据情况,你可能希望显示老式的数字或带有斜杠的零,对于这些情况,font-feature-settings很有用。

    请注意,font-variant-numeric是font-feature-settings组属性的一部分。诸如font-variant-caps或font-variant-ligatures之类的属性也属于该组。还要注意,像所有font-feature-settings属性一样,你的字体需要实现上述功能才能正常工作。我使用的字体是Fira Sans。

    资源:MDN(https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant-numeric)。

    4. user-select

    每当我们有不想让用户选择的文本,或者相反,如果发生了双击或上下文单击,希望选择所有文本时,user-select属性将非常有用。

    此属性采用以下值之一:none | auto | text | all。

    none:元素及其子元素的文本不可选中。请注意这个Selection 对象可以包含这些元素。从Firefox 21开始, none 表现的像 -moz-none,因此可以使用 -moz-user-select: text 在子元素上重新启用选择。

    autoauto 的具体取值取决于一系列条件,具体如下:

    • 在 ::before 和 ::after 伪元素上,采用的属性值是 none
    • 如果元素是可编辑元素,则采用的属性值是 contain
    • 否则,如果此元素的父元素的 user-select 采用的属性值为 all,则该元素采用的属性值也为 all
    • 否则,如果此元素的父元素的 user-select 采用的属性值为none,则该元素采用的属性值也为 none
    • 否则,采用的属性值为text

    text:用户可以选择文本。all:在一个HTML编辑器中,当双击子元素或者上下文时,那么包含该子元素的最顶层元素也会被选中。

    资源:MDN(https://developer.mozilla.org/en-US/docs/Web/CSS/user-select)。

    5. clip-path

    clip-path CSS 属性可以创建一个只有元素的部分区域可以显示的剪切区域。区域内的部分显示,区域外的隐藏。剪切区域是被引用内嵌的URL定义的路径或者外部svg的路径,或者作为一个形状例如circle()。clip-path属性代替了现在已经弃用的剪切 clip属性。

    此属性采用以下值之一:circle() | ellipse() | polygon() | path() | url()。

    由于这是对该属性的介绍,因此,这里不会深入研究每个值。

    我使用最多的两个值是circle和polygon。circle(radius at pair)值有两个参数,第一个参数是圆的半径,第二个参数是表示圆心的点。polygon(pair, pair, pair ...)值取3个或更多的点,表示一个三角形、一个矩形等等。

    6. shape-outside

    shape-outside的CSS 属性定义了一个可以是非矩形的形状,相邻的内联内容应围绕该形状进行包装。默认情况下,内联内容包围其边距框; shape-outside提供了一种自定义此包装的方法,可以将文本包装在复杂对象周围而不是简单的框中。它采用与clip-path相同的值。

    clip-path定义用户如何查看元素,shape-outside定义其他HTML元素如何查看元素。

    资源:MDN(https://developer.mozilla.org/en-US/docs/Web/CSS/shape-outside)。

    7. background-clip

    最后,backgroundclip CSS属性设置元素的背景是否扩展到其border、padding 或content 框之下。

    此属性采用以下值之一:border-box (default) | padding-box | content-box | text

    资源:MDN(https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip)。

    总结

    下图是结合上面 7 个属性实现的布局,让大家加深一下印象。

    如果你还知道一些新奇的属性,欢迎留言。


    作者:Mustapha Aouas 译者:前端小智 来源:dev

    原文:https://dev.to/mustapha/7-amazing-css-properties-you-may-not-know-yet-eej