如何编写开源项目的README文档

运营一个开源项目就像在运营着一家 Startup,你期待更多人来使用你的项目,并给你的项目加 Star/提交 PR,但好的项目除了其自身真正契合了开发者的需求外,还需要一个好的 README。

有好的 README 文档的项目不一定是一个好开源项目,但一个好开源项目一定有一个好的 README。

目前 README 文档编写并没有规范,但一个友好的 README 是有其特征的,我们来看看一个好的 README 的必备要素。

国际化问题

首先要注意的是国际化问题,如果你希望自己的项目能获得更多人的使用,提供中英两种 README 文档是非常赞的。你可以在项目头部注明它。如 Coding 的 WebIDE 项目:

项目名及简介

好的项目名及简介是好项目必不可少的。开源项目名不宜过长(除非你有特别的理由这么做),如果你不知道如何给自己的项目起名,可以使用 随机项目名产生器(适用于 Javascript 项目);项目简介可以是简单的几句话,但项目简介要说明几个你的开源项目用户想迫切了解的问题,这包括:

  • 这个开源项目是做什么的?
  • 这个项目是什么语言编写的?
  • 项目维护、CI、依赖更新状态(如果有)
  • 项目可用版本及其他版本
  • Demo 或官网地址(如果有)

Read More

8大排序算法图文讲解

排序算法简介

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。

常见的内部排序算法

插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。

本文将依次介绍上述八大排序算法

  • 算法一:插入排序
  • 算法二:希尔排序
  • 算法三:选择排序
  • 算法四:冒泡排序
  • 算法五:归并排序
  • 算法六:快速排序
  • 算法七:堆排序
  • 算法八:基数排序

算法一:插入排序

插入排序示意图

插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

算法步骤

  1. 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

  2. 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

Read More

Mac的最大连接数限制和端口的相关参数的设置

最大连接数限制

最大连接数限制就是系统所能打开的最大文件数(文件描述符)的限制,分全局和进程两种,相应的命令如下:

$sysctl kern.maxfiles

输出:kern.maxfiles: 12288

说明:全局限制,也就是系统默认的最大连接数限制是12288

$sysctl kern.maxfilesperproc

输出:kern.maxfilesperproc: 10240

说明:单个进程默认最大连接数限制是10240

$sudo sysctl -w kern.maxfiles=1048600

输出:kern.maxfiles: 12288 -> 1048600

说明:设置系统最大连接数从12288到1048600

$sudo sysctl -w kern.maxfilesperproc=1048576

输出:kern.maxfilesperproc: 10240 -> 1048576

说明:设置进程连接数限制,进程的最大连接数要小于等于全局连接数

Read More

解决Mac修改DNS卡死-命令行修改Mac OS系统DNS设置

摘要

最近网络总是异常,时不时就打不开网页,开始以为是网络的问题,但是只有自己的电脑网络有问题,手机和其他人的电脑都没问题,怀疑是自己的dns有问题,于是着手修改。
可是在系统偏好设置里打开网络准备修改dns的时候却发现无论怎样修改都没办法动弹,只要一点修改就卡死不动了,试了n次也没有修改成功,最后突然想到了命令行的方式修改,成功搞定.

查看系统现有网络

networksetup -listallnetworkservices

修改DNS

修改wifi的dns为 180.76.76.76

networksetup -setdnsservers Wi-Fi 180.76.76.76

再次查看dns确认是否成功

networksetup -getdnsservers Wi-Fi

刷新dns

方案1

dscacheutil -flushcache

管理员强制刷新

sudo dscacheutil -flushcache;sudo killall -HUP mDNSResponder;say flushed

Read More

Python多线程和锁

进程和线程

进程是执行中的计算机程序。每个进程都拥有自己的地址空间、内存、数据栈及其它的辅助数据。操作系统管理着所有的进程,并为这些进程合理分配时间。进程可以通过派生新的进程来执行其它任务,不过每个进程都拥有自己的内存和数据栈等,进程之间的数据交换采用 进程间通信(IPC) 方式。

线程在进程之下执行,一个进程下可以运行多个线程,它们之间共享相同上下文。线程包括开始、执行顺序和结束三部分。它有一个指针,用于记录当前运行的上下文。当其它线程执行时,它可以被抢占(中断)和临时挂起(也称睡眠) ——这种做法叫做 让步(yielding)。

一个进程中的各个线程与主进程共享同一片数据空间,与独立进程相比,线程之间信息共享和通信更加容易。线程一般以并发执行,正是由于这种并发和数据共享机制,使多任务间的协作成为可能。当然,这种共享也并不是没有风险的,如果多个线程访问同一数据空间,由于访问顺序不同,可能导致结果不一致,这种情况通常称为竞态条件(race condition),不过大多数线程库都有同步原语,以允许线程管理器的控制执行和访问;另一个要注意的问题是,线程无法给予公平执行时间,CPU 时间分配会倾向那些阻塞更少的函数。

全局解释器锁(GIL)

Python 代码执行由 Python 虚拟机 (又名解释器主循环) 进行控制。Python 在设计时是这样考虑的,在主循环中同时只能有一个控制线程在执行。对 Python 虚拟机的访问由 全局解释器(GIL) 控制,这个锁用于,当有多个线程时保证同一时刻只能有一个线程在运行。

由于 Python 的 GIL 的限制,多线程更适合 I/O 密集型应用( I/O 释放了 GIL,可以允许更多的并发),对于计算密集型应用,为了实现更好的并行性,适合使用多进程,已便利用 CPU 的多核优势。Python 的多进程相关模块:subprocess、multiprocessing、concurrent.futures

Read More

强制退出Mac程序的六种方法

摘要

用电脑时间长了,难免会遇到程序卡住,风火轮狂转不停,没有任何相应等情况。可能是由于程序冲突、缓存不足或者一些bug等情况导致,这个时候我们就需要强制退出这个程序了,下面有六种在Mac系统中强制退出程序的方法,大家至少应该记住一两个。

使用键盘快捷键强制退出处于活跃状态的Mac程序

快捷键:Command+Option+Shift+Esc
这样按住一两秒钟,就可以强制退出当前程序了,算是最方便的一种方法。

打开强制退出程序窗口

使用快捷键:Command+Option+Esc
来打开“强制退出应用程序”的窗口,然后选中你需要退出的程序,再点右下方的“强制退出”即可。

Read More

Mac重置系统管理控制器SMC

摘要

在某些情况下,您可能需要重置电脑的系统管理控制器(SMC)。了解如何辨识这些情况并重置SMC。

SMC可能发生问题,导致出现通常与下述症状相关的异常系统行为。在某些情况下,重置SMC可能是解决问题的唯一正确方法,不过,应该在执行过所有其他标准故障诊断之后才尝试SMC重置。

重置SMC之前

重置SMC之前,请依序尝试以下各个步骤。完成每个故障诊断步骤之后请测试问题,判断问题是否仍会发生。

  1. 按Command + Option + Escape来强制结束所有无回应的应用程式。

  2. 选择左上角选单列中的Apple()选单,然后选择“睡眠”,让Mac进入睡眠状态。进入睡眠状态后唤醒电脑。

  3. 从左上角选单列选择Apple()选单,然后选择「重新启动」,借此重新启动Mac。

  4. 从左上角选单列选择Apple()选单,然后选择「关机」,借此关闭Mac。

Read More

如何重置Mac上的NVRAM

了解电脑的NVRAM以及重置的时机与方法。

什麼是 NVRAM?

电脑有一小部分的记忆体称为「非挥发性随机存取记忆体」或 NVRAM,会将特定设定储存在一个 OS X 可以快速存取的位置。储存在 NVRAM 的设定取决于您所使用的 Mac 以及连接的装置类型。

储存在 NVRAM 的资讯可能包括

  • 扬声器音量
  • 萤幕解析度
  • 选择的启动磁碟
  • 最近的核心异常资讯(如有)

如果您遇到这些功能的相关问题,可能需要重置电脑上的 NVRAM。例如,如果 Mac 启动时不是使用您在「启动磁碟」偏好设定中指定的启动磁碟,或者您的 Mac 在启动时会短暂出现问号图像。

Read More

命令行信息截图工具 - ScreenFetch

摘要

screenFetch 是一个“命令行信息截图工具”。它可以在终端上显示系统信息,并进行桌面截图。它能生成漂亮的文本的系统信息和ASCII艺术的发行版LOGO,然后显示在截屏图片中。

它会自动检测你的发行版并显示其ASCII版本的LOGO,在其右侧显示系统信息。可以通过选项来指定是否显示LOGO、指定颜色,进行截图,甚至可以自定义截图的命令。screenFectch非常容易添加和扩展。

screenFetch将显示以下系统信息

  • 当前登录用户
  • 操作系统版本
  • 内核版本
  • 总计运行时间
  • 已安装包数量
  • 当前shell详情
  • 当前屏幕分辨率
  • 当前桌面环境
  • 当前窗口管理器(文件管理器)
  • 总计及空闲磁盘使用百分比
  • CPU详情,如处理器速度、类型
  • 总计及当前内存使用量

在Linux上安装screenFectch

您可以通过直接从项目页下载源码包的方式安装,或者从screenFetch git库克隆。

Read More

Git忽略提交规则 - .gitignore配置总结

摘要

在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。简单来说一个场景:在你使用git add .的时候,遇到了把你不想提交的文件也添加到了缓存中去的情况,比如项目的本地配置信息,如果你上传到Git中去其他人pull下来的时候就会和他本地的配置有冲突,所以这样的个性化配置文件我们一般不把它推送到git服务器中,但是又为了偷懒每次添加缓存的时候都想用git add .而不是手动一个一个文件添加,该怎么办呢?很简单,git为我们提供了一个.gitignore文件只要在这个文件中申明那些文件你不希望添加到git中去,这样当你使用git add .的时候这些文件就会被自动忽略掉。

有三种方法可以实现忽略Git中不想提交的文件

在Git项目中定义.gitignore文件

对于经常使用Git的朋友来说,.gitignore配置一定不会陌生。这种方式通过在项目的某个文件夹下定义.gitignore文件,在该文件中定义相应的忽略规则,来管理当前文件夹下的文件的Git提交行为。.gitignore文件是可以提交到公有仓库中,这就为该项目下的所有开发者都共享一套定义好的忽略规则。在.gitingore 文件中,遵循相应的语法,在每一行指定一个忽略规则。如:

*.log
*.temp
/vendor

Read More