ALL4AI

AI Related Tools/Projects

BSD-2-CLAUSE License

Stars
22
Committers
3

Table of Contents generated with DocToc

个人工具箱,Python 居多。包括但不限于:系统、编程、算法等多个方面内容。

系统

更改源

更改 Linux 系统软件源:

下面例子是 Ubuntu16.04(xenial)的。不同的系统版本源不同,注意更换。

# 备份原文件
mv /etc/apt/sources.list /etc/apt/sources.list.bak

# 修改镜像源
cat > /etc/apt/sources.list << END  
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
END

# 更新源列表(Ubuntu)
sudo apt-get update

参考至:

系统配置文件

所有用户

  • /etc/profile: 此文件为系统的每个用户设置环境信息。当用户登录时,该文件被执行一次,并从 /etc/profile.d 目录的配置文件中搜集 shell 的设置。一般用于设置所有用户使用的全局变量。
  • /etc/bashrc: 当 bash shell 被打开时,该文件被读取。也就是说,每次新打开一个终端 shell,该文件就会被读取。
  • /etc/paths
  • echo 变量内容删除和替换

单个用户

  • ~/.bash_profile: 登录之后在 /etc/profile 载入之后载入, 十分重要的配置文件
  • ~/.bash_login: 登录之后如果 ~/.bash_profile 不存在的话, 载入这个文件
  • ~/.profile: 登录之后 ~/.bash_login 不存在的话, 才载入这个文件

只对单个用户生效,当用户登录时该文件仅执行一次。

  • ~/.bashrc: bash shell 只对单个用户生效,当登录以及每次打开新的 shell 时,该文件被读取。
  • ~/.bash_logout

注意:

参考至:设置 Linux 环境变量的方法和区别_Ubuntu_给力星

环境变量

  • LIBRARY_PATH
    • 环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径
    • 例如,指定 gcc 编译需要用到的动态链接库的目录。设置方法如下(其中,LIBDIR1 和 LIBDIR2 为两个库目录):export LIBRARY_PATH=LIBDIR1:LIBDIR2:$LIBRARY_PATH
  • LD_LIBRARY_PATH
    • 环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径
    • 注意,LD_LIBRARY_PATH 中指定的路径会在系统默认路径之前进行查找。
    • 设置方法如下(其中,LIBDIR1 和 LIBDIR2 为两个库目录):export LD_LIBRARY_PATH=LIBDIR1:LIBDIR2:$LD_LIBRARY_PATH
  • 概括
    • 开发时,设置 LIBRARY_PATH,以便 gcc 能够找到编译时需要的动态链接库。
    • 发布时,设置 LD_LIBRARY_PATH,以便程序加载运行时能够自动找到需要的动态链接库。
  • 不同操作系统的名称
OS Environment Variable Name
Linux LD_LIBRARY_PATH
Solaris 32-bit ruby LD_LIBRARY_PATH_32 or LD_LIBRARY_PATH
Solaris 64-bit ruby LD_LIBRARY_PATH_64 or LD_LIBRARY_PATH
HP-UX PA-RISC 32-bit ruby SHLIB_PATH
HP-UX PA-RISC 64-bit ruby LD_LIBRARY_PATH
HP-UX IA64 LD_LIBRARY_PATH
Mac OS X DYLD_LIBRARY_PATH
AIX LIBPATH

参考至:

TerminalMultiplexers

远程会话窗口管理器,就是让你的远程连接(SSH)不中断,退出后下次登录时程序依然在运行。具体可参考:

SSH

GIT

因为很多软件都需要从 GitHub 下载,所以需要优先配置一下。Git 命令不需要专门记,常用的就几个,其他的用时查一下就可以了。

Terminal

命令行工具

查找搜索

复制粘贴

版本控制及包管理

注意:安装 Conda 后,pyenv 的虚拟环境会由 Conda 接管。详见:pyenv/pyenv-virtualenv: a pyenv plugin to manage virtualenv (a.k.a. python-virtualenv)

  • Mac 上的 Python

    经过不少的实践,在 Mac 上可以使用 homebrew 来管理 python 版本,大多数时候我们只需要一个稳定的版本就够了,具体项目中可以使用 poetry。要安装不同的版本,方法如下:

    • brew unlink python 解除现有版本的绑定
    • brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/hash/Formula/python.rb,其中的 hash 可在 History for Formula/python.rb - Homebrew/homebrew-core 中找到,如果要的版本太旧,往前翻时并不会显示,但会有提醒告知如何查看。
    • 在你的 bash 或 zsh 配置文件中添加:export PATH="/usr/local/opt/python/libexec/bin:$PATH"
    • brew switch python xxx 切换各种版本,所有的东西都会自动弄好

    注意:只要这么操作就可以无痛使用(Mac),但如果你想更深入了解一下,下面的内容可以参考:

    • brew 安装的 python 在 /usr/local/Cellar/python@[version]/
    • site-packages 实际位置在 /usr/local/lib/python*
    • brew 安装好后会在两个地方创建链接:
      • /usr/local/opt/python/libexec/bin/
      • /usr/local/bin/
    • 系统自带的在 /usr/bin/python,实际位置在 /System/Library/Frameworks/Python.framework/Versions/site-packages/usr/local/lib/python2.7下,系统自带有多个版本(2.3 2.5 2.6 2.7),当前为 2.7
    • 升级 Xcode 后会安装 Python3,在 /usr/bin/python3,实际位置在 /Applications/Xcode.app/Contents/Developer/usr/bin/python3site-packages 有两个,用户的在 ~/Library/Python/3.8/lib/python/,系统的在 /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/site-packages/
    • 最终 python=python2(系统带的),python3=python3.8.9(Xcode 装的),python3.7,python3.8,python3.9 分别对应各自版本。pip3=pip3.8.9(Xcode 的,在系统的 site-packages 里),pip3.7,pip3.8,pip3.9 分别对应各自版本。整体清爽了很多,当然输入时稍微麻烦了些。

数据科学常用包

配置工具

数据存储及快速查询

  • TAR,GZIP, BZIP2, XZ 对比
    • 需要在内存很小的机器(如小于 128 MB)上解压缩时,选择 gzip 格式。
    • 需要在很简单、沒有什么工具可用的机器上解压缩时,选择 gzip 格式。
    • 需要节省带宽、缩短下载所需时间时,选择 xz 格式。
    • 推荐用 gz 压缩:
      • tar zcvf test.tar test 仅打包,不压缩
      • tar zcvf test.tar.gz test 打包后以 gzip 压缩
      • tar zxvf test.tar.gz -C /to/your/path 解压缩到某目录
      • 存储用 xz(速度慢,压缩效率高):
        • tar Jcvf file_name.tar.xz dir_name 压缩
        • tar Jxvf file_name.tar.xz 解压缩

参考至:Linux 中最佳的壓縮格式:為什麼 bzip2 會被 xz 取代?那 gzip 又如何? - G. T. Wang

CUDA

强烈建议看官方文档,不要看各类教程。

IDE

SublimeText

  • 设置 TAB 键为空格:{ "tab_size": 4, "translate_tabs_to_spaces": true, }
  • pep8 插件,使用:Ctrl + Shift + 8

Emacs

Vim

Python 技能

Resources

Basic

Trick

State

Pipe

FP

数据结构和算法

LLM

Layout

Sheet

Agent

重点关注MicroSoft。

VectorSearch

Just Skin

Inference

Prompts

AI

Format

Inference

Deploy

Demo/WebAPP

Toolkit

Dataset

DataAnnotation

DeepLearning

MachineLearning

HyperOptimization

工程

Design

Test

主要分单元测试和集成测试。

Style & Analysis

Profile

Performence

Command Line

Better Print

Debug

Safety

Distribute

FrameWork

Boilerplate

JWT

Coroutine

Concurrency

Memory

API

RPC

Deploy

Database

Project

Architecture

Network

Tool

Spider

Audio

Chat

Text

OCR

Task

Visualization

GUI

Logic

设计五原则

  • SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)
首字母 指代 概念
S 单一功能原则 对象应该仅具有一种单一功能
O 开闭原则 软件体应该是对于扩展开放的,但是对于修改封闭的
L 里氏替换原则 程序中的对象应该是可以在不改变程序正确性的前提下被它的子类对象所替换的
I 接口隔离原则 多个特定客户端接口要好于一个宽泛用途的接口
D 依赖反转原则 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口;抽象接口不应该依赖于具体实现,而具体实现则应该依赖于抽象接口。

来源:如何在 Python 里应用 SOLID 原则 | 阿驹

  • 当考虑需要什么类以及类要有什么方法时,应该尝试下面的方法。

    • (1)写下问题的描述(程序要做什么),把所有名词、动词和形容词加下划线。
    • (2)对于所有名词,用作可能的类。
    • (3)对于所有动词,用作可能的方法。
    • (4)对于所有形容词,用作可能的特性。
    • (5)把所有方法和特性分配到类。

    现在已经有了面向对象模型的草图了。还可以考虑类和对象之间的关系(比如继承或协作)以及它们的作用,可以用以下步骤精炼模型。

    • (1)写下(或者想象)一系列的使用实例,也就是程序应用时的场景,试着包括所有的功能。
    • (2)一步步考虑每个使用实例,保证模型包括所有需要的东西。如果有些遗漏的话就添加进来。如果某处不太正确则改正。继续,直到满意为止。

来源:如何设计好一个 python 的类? - 知乎

刷题

  • 在线编程练习
    • LeetCode
    • hihoCoder
    • Train with Programming Challenges/Kata | Codewars
    • LintCode:在线刷题网站,汇集了各大公司的算法面试题。有阶梯式训练题库,帮你选好应该刷的题目,特别适合小白和懒人。评测数独很快,最大的中文在线题库。
    • geeksforgeeks.org —— 据说是印度人搞的刷题网站,上面有很多公司的面试题,也有论坛。不过上面都是英文,估计很多印度人在上面放面经,科科。
    • Codecademy.com —— 包含在线编程练习和课程视频。比较适合小白入门编程语言。网页界面也比较友好。但是,没有算法方面的在线测试。
    • Codehs.com —— 包含数据结构、游戏设计、动画类编程题。
    • programmingpraxis.com —— 此网站编程练习不保存分数、不排名、不竞赛
    • projecteuler.net —— 有 590 道题,会显示难度水平和提交完成率
    • hackerearth.com —— 注册帐号后可参与编程练习(有内推到知名企业的机会)
  • 编程竞赛
    • hackerrank.com ——包含编程题和项目开发挑战
    • Codeforces.comtopcoder.com —— 包含大量题库,对解答者进行排名。
    • codechef.com —— 包含编程竞赛、在线程序设计挑战,题目难度从入门、简单、中等到挑战都有,会举办竞赛,获胜者会有奖金。
    • topcoder.com —— 经常在线举行编程竞赛,可以去练练手,找找成就感。不过,有的竞赛题目并不简单,也比较刁钻。
  • 各种语言算法实现

部分参考至:有程序员专门刷题的网站吗? - 知乎

面试

论文、会议及期刊

小工具

致谢

  • 所有作者,是你们的智慧让我们感受到了知识的力量;所有传播者,是你们的乐于分享让我们在探索路上不再孤单彷徨。

  • 童老师,资深算法工程师,牛人。其实相当大一部分内容来自童老师,从他身上学到太多东西,以至于现在还才消化了一丢丢。明生的博客 | Scott's Blog,自称木讷的程序猿,他的吐槽和对代码优雅的执着追求让我被迫改变了很多。