KJohn2q

一个热爱技术,热爱分享的程序员

0%

本文译自 40 Tips that will change your coding skills forever,仅用于学习,不作商业用途

在这篇总结里,我将会列举一些技巧。阅读起来很快,但是应用得很好可能要花费一辈子的时间。

  1. 把大块代码分解成小函数。
  2. 如果你结束一天的工作还没有解决问题。关机把它留到第二天。不要一直想着它。
  3. YANNI 原则:不要编写超出被要求的内容。不要期望未来,尽可能快的做好现在的事情。为了解决当前问题,进行必要的编码。
  4. 你不需要了解所有事情,所有存在的框架。最有效的事情是有好的基础。子开始学习一个框架和学习基础例如SOLID原则或者编写简洁代码之前深入了解编程语言。
  5. KISS:”Keep it simple, stupid” or “Keep it stupid simple”(保持愚蠢且简单) 是一种设计原则:表明大多数系统在保持简单而不是复杂的情况下工作的最好。虽然这是合乎逻辑的,但有时很难实现。
  6. 不要过分思考。
  7. 如果你在一个问题或者 bug 上纠结太长时间,走走,一会再回去。通常,从办公室到卫生间的路上会想出问题的最佳解决方案。
  8. 学习编写可用的测试和学习去做 TDDTDD 是一种软件开发流程依赖一个非常短的开发循环的重复:编写一个测试,执行所有的测试看是否有测试失败,编写代码,执行测试,重构代码,重复。
  9. 首先解决问题,然后编码。不要在还没有搞懂做什么之前,就开始编码。
  10. 不要记忆代码,而是要理解逻辑。
  11. 如果要复制粘贴 stack overflow 的解决方案,确保你已经理解了。学习更好地使用 Stack Overflow
  12. 如果你想学习,那就去练习。编写一些例子,运行起来。因为仅仅阅读是不够的。(原文:If you want to learn something, practice. Make examples and make them work because read about something is not enough.
  13. 时常学习其他人的代码,让其他人学习你的代码。结对编程和代码审查是个很好的想法。
  14. 不要重复造轮子。
  15. 你的代码是最好的文档。
  16. 了解怎样 google 东西。为此,你需要有经验和大量的阅读知道你要找的东西。
  17. 你的代码在未来需要你自己或其他人维护,所以写代码时要考虑到读者,而不是试图成为最聪明的人。使你的代码读起来就像是阅读一个故事。
  18. 使用 google 去解决你的错误最好的方式是复制粘贴。
  19. 永不放弃,最后,总会以这样或那样的方式去解决。总有一些难过的日子,但终会过去。
  20. 休息,休息还是休息。解决问题最好的方式是有一个放松的大脑。
  21. 学习使用 软件设计模式。软件设计中的设计模式是通用问题的解决方案。每个模式就像是一幅蓝图,你可以自定义该蓝图已解决代码中常见的设计问题(不要重复造轮子)。
  22. 使用集成工具,尽可能多的自动化。
  23. 练习code kata(代码招式)。一个code kata是一个编程训练,通过练习和重复帮助程序开发者提升他们的技能。
  24. 面向接口编程,而不是实现。依赖注入是必需的。可以查看 SOLID 原则。
  25. 重构-测试-重构。Refactoring是一种技术,用来重组现有代码,操作,优化内部结构而不改变外部行为。
  26. 当你需要的时候,寻求帮助。不要浪费时间。
  27. 熟能生巧。
  28. 尽管有时评论能帮助你,不要过多关注。他们很可能是过时的。
  29. 了解你的开发环境,在一个强力的足够的环境上投资,比如 IntelliJ
  30. 重用组件。
  31. 开发一个 web 应用是,考虑移动优先和相关的因素(原文:associated power),以及带宽限制。
  32. 不要过早优化或者重构。尽可能快地开发出一个小型的,可用的产品是更重要的。
  33. 不要选择效率低下的,捷径去节省几分钟时间。每次你编码的时候,尽你最大努力。
  34. 遵循文档标准。
  35. 用户不是懂技术的人。当你开发你的 UI 时,要把这点考虑进去。
  36. 在使用源代码控制系统:像 Github 或者 bitbucket时,做小且频繁的 git 提交。
  37. 使用日志比调试代码更好。在所有的关键部分使用日志。
  38. 编码时要始终如一。如果你使用一种编码风格,总是使用相同的。如果你与其他人在一起工作,与团队中的所有人使用相同的风格。
  39. 不要停止学习,但不是学习更多的新的编程语言或者框架,把注意力集中在软件开发基础上。
  40. 最后,保持耐心和热情去做事。
阅读全文 »

本文部分译自 Gitolite README,仅作学习使用,不用于商业用途

Gitolite

git 仓库托管 – Gitolite 允许你在一台中心服务器上安装 git 托管,具有很多细粒度的访问控制和更强有力的特性。

安装

首先,准备 ssh key

  • 使用 git 用户登录服务器
  • 确保 ~/.ssh/authorized_keys 为空或不存在
  • 确保你工作区的 ssh 公钥复制到了 $HOME/YourName.pub

下一步,通过执行下面的命令来安装 gitolite

1
2
3
git clone https://github.com/sitaramc/gitolite
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin

最后,作为管理员安装 gitolite

1
gitolite setup -pk YourName.pub
阅读全文 »

本文译自Git on the Server - Generating Your SSH Public Key,仅作学习使用,不用于商业用途

很多 git 服务器使用 SSH 公钥进行验证。为了提供一个公钥,如果你系统的用户还没有的话,他们必须生成一个。这个过程是跨所有的操作系统的。首先,你应该检查,确保你还没有公钥。默认,用户的 SSH keys存储在用户的 ~/.ssh 目录。如果你已经有一个 SSH key,切换到那个目录,列出所有的内容,你可以轻松地看见。

1
2
3
4
5
$ cd ~/.ssh
$ ls

id_rsa id_rsa.pub known_hosts

你将会看到一系列名称为 id_dsa 或者 id_rsa,且有一个后缀名为 .pub 的文件。该 .pub 文件是你的公钥,其它文件是对应的私钥。如果没有看到这些文件(或者你甚至没有 .ssh 目录),你可以通过执行 由 Linux/macOS 操作系统和 windows 上的 git 提供的 ssh-keygen 程序来创建它们:

1
2
$ ssh-keygen -o

Generating public/private rsa key pair.
Enter file in which to save the key (/home/schacon/.ssh/id_rsa):
Created directory '/home/schacon/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/schacon/.ssh/id_rsa.
Your public key has been saved in /home/schacon/.ssh/id_rsa.pub.
The key fingerprint is:
d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local

首先,你要确认保存密钥的位置(.ssh/id_rsa),然后向你询问一个密码短语两次,如果你在使用密钥的时候不想输入密码,你可以留空。然而,如果你使用了密码,确保你使用了 -o 选项;它会以比默认格式更能抵御密码强力破解攻击的格式进行存储私钥。你也可以使用 ssh-agent 工具,避免每次都需要输入密码。

现在,每个用户都做了以上操作,给你或者任何管理 Git 服务器的人发送了公钥。(假定你使用的是需要公钥的 SSH 服务器设置)。他们需要做的就是复制 .pub 文件的内容并通过邮件发送。公钥文件像这样:

1
2
3
4
5
6
7
8
9
$ cat ~/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== schacon@mylaptop.local

获取更多在多操作系统创建 SSH key 的深入教程,可以查看 GitHub guide on SSH keys.

阅读全文 »

本文译自 Active and Passive modes in FTP ,仅用于学习,不作商业用途

FTP 的主动和被动模式是 客户端和服务器端独立使用各自通道的 FTP 的两种连接模式,命令通道和数据通道,通常分离为两个TCP连接。命令通道通常基于 21 端口,数据通道基于 20 端口。命令通道通常处理命令和响应的传输,数据通道处理实际的文件传输。

FTP 主动模式和被动模式连接的不同在于服务器端或者客户端发起数据连接。对于主动模式,服务器端在命令通道客户端建立连接之后发起到客户端的数据连接。被动模式则相反,客户端发起到服务器端的数据连接。

主动模式的事件序列:

  1. 你的客户端(例如 filezilla )通过建立到服务端 21 端口的 FTP 控制连接 来连接 FTP 服务器端。
  2. 当客户端通过控制连接请求数据时,服务端向客户端发起数据传输连接。数据传输连接的源端口始终是服务端的 20 端口 ,而目标端口是客户端上的一个高端口(大于1024)。

FTP 主动模式当客户端设置了防火墙并受到多对一的 NAT (伪装)防护。这是因为防火墙不能是别再后面的众多服务端,哪个应该接收返回的连接。

对于服务端,主动模式更安全, 它不要求服务端打开不安全的端口。 因为服务端发起到客户端的数据连接。

注意: AUSWEB Windows Hosting Solutions 默认就是 FTP 主动模式,你需要在你的 FTP 客户端开启。

被动模式有这不同的事件序列:

  1. 你的客户端通过建立到服务端 21 端口的 FTP 控制连接来连接 FTP 服务端。
  2. 当客户端通过连接请求数据时,客户端向服务端发起数据传输连接。数据传输连接的源端口始终是客户端上的一个高端口,而目标端口是服务器上的一个高端口。
阅读全文 »

概述

伸展树是一种能够自我平衡的二叉查找树,它能在均摊O(log n)的时间内完成基于伸展操作的插入、查找、修改和删除操作。它是由丹尼尔·斯立特(Daniel Sleator)和罗伯特·塔扬在1985年发明的。 ——— 维基百科

伸展树是基于这样的事实,当一个节点被访问时,它就很可能不久再被访问到。

伸展树的基本想法是,当一个节点被访问后,它就要经过一系列AVL树的旋转被放到根上。注意,如果一个节点很深,那么在其路径上就存在许多的节点也相对较深,通过重新构造可以使对所有这些节点的进一步访问所花费的时间变少。因此,如果节点过深,那么我们还要求重新构造应具有平衡这棵树(到某种程度)的作用。 ———— 《数据结构与算法分析 ——c语言描述》

缺点

伸展树在经过一系列伸展操作后,有可能会变成一条链。

操作

伸展

当一个节点x被访问后,伸展操作会将x移动到根节点。为了进行伸展操作,我们会进行一系列的旋转,每次旋转,会使x离根更近。

每次旋转由三个因素决定:

阅读全文 »

该文选译自 jetbrains 官网 Quick Tutorial: Configure CLion on Windows 不用于商业用途

windows 系统,配置 CLion 需要安装环境: CygwinMinGWWSLMSVC等。你需要在你的系统上安装环境,分别为每个环境创建 CLion 工具链。作为工具链重要的一环,编译环境提供了 CC++ 编译器, make 工具, 还有调试器(使用默认工具的情况下)

想查看远程主机工具链的细节,可以访问 Full Remote Mode 进行查看。

Cygwin

  1. 下载 Cygwin 安装包,2.8 或者更新的版本。
  2. 执行安装文件,选择以下的包:
    • gcc-g++
    • make
    • gdb
      你可以在搜索框中键入包的名字,点击列表中该包,直到在该包上有对勾出现。
      image
  3. 安装完成后,启动 CLion,依次打开 File|Settings|Build,Exceution,Deployment|Toolchains选择你想要配置的工具链。
  4. 在环境列表中选择 Cygwin. Clion会自动地检测 Cygwin的安装情况。检查检测结果,手动指定需要的路径。
  5. 等待工具检测完成,点击应用。

MinGW

  1. 下载 MinGW 或者 MinGW-W64安装包。
  2. 运行安装包,在基础安装列表中选择一下的包: mingw-developer-tool, mingw32-base, mingw32-gcc-g++, mingw32-msys-base.
  3. 安装成功后,启动 CLionFile|Settings|Build,Exceution,Deployment|Toolchains选择你想要配置的工具链。
  4. 在环境列表中选择 MinGWClion会自动地检测 Cygwin的安装情况。检查检测结果,手动指定需要的路径。
  5. 等待工具检测完成。如果 CLion 不能检测到编译器或者 make ,在 MinGW 安装管理器中再次检查需要的包是否已安装。工具设置正确后,点击应用。

GDB on Windows

如果使用了 MinGW , CLion 包含了内置的 GDB (8.3版本)。 如果是 Cygwin, 你需要在 Cygwin 包管理器中安装包 GDB,上面已经描述过。

你也可以切换到自己的 GDB 二进制包,支持的 GDB 版本为 7.8.X - 8.3.X

阅读全文 »

概述

github是全球最大的开源项目网站,集聚了非常多优质的开源项目,我们可以利用它,学习优秀代码,行业前沿知识,动手实践。

上图为vue项目的主页,其中name为项目名称,description为项目的简要描述,star为项目的受关注程度,fork反映多少人克隆到了自己的仓库。除了这几个要素,还有项目的最后更新日期(pushed),项目的编程语言(language),项目的创建日期(create)都可以作为我们搜索我们想要的项目时的依据。

高效搜索

以swoole举例

in:name swoole

搜索仓库的名称,搜索仓库名称包含swoole关键字的所有项目

in:description swoole

搜索描述中包含swoole关键字的项目

阅读全文 »