Anaconda/Miniconda 学习笔记
Anaconda 是一个用于科学计算的开源 Python
发行版,集成了包和虚拟环境管理器,包括了很多数据科学中常用的包,特别适合数据科学和机器学习。
与之类似的还有 Miniconda,它和 Anaconda
的主要区别就是:Miniconda在安装时并没有附带很多科学计算常用的包,在使用时需要手动下载。除了安装包的大小不同,在实际使用中其实没什么区别。
安装
Anaconda的下载和安装都非常简单,只需要按照官网上的步骤进行即可。
实践中可以选择安装Miniconda而非Anaconda,安装包的体积会小很多。
Miniconda 安装(Windows)
直接下载安装程序,确定安装即可,注意修改一下安装位置。
安装程序可能会提示是否修改环境变量,可以确定,也可以稍后手动进行,我们需要将一些路径到PATH中,例如
123D:/miniconda3D:/miniconda3/ScriptsD:/miniconda3/Library/bin
因为Miniconda里面可能有各种乱七八糟的包和软件,为了避免潜在的版本冲突(比如覆盖了其它在外部单独安装的软件),建议将这几个路径添加在靠后的位 ...
Linux 后台任务笔记
学习整理一下关于后台任务相关的内容,进一步的分析必须从Linux中的进程,信号等机制出发,但是我对此没啥兴趣,这里只是从实用的角度进行学习,浅尝辄止。
通常在shell中执行的任务都是前台任务,即任务会占用前台,在任务结束之前无法进行下一个任务。在命令结尾使用&可以将命令使用后台进程执行,例如
1./test.sh &
其中的测试脚本在不断写入日志,每隔4秒写入一次 12345678#!/bin/bashlogfile="time_log.txt"while true; do echo "$(date)" >> "$logfile" sleep 4done
使用jobs命令可以查看当前的后台任务,每一个后台任务都有独立的序号(注意不是pid),例如
1[1]+ Running ./test.sh &
如果返回值为空,代表没有后台任务。后台任务的状态可能是Running(正在运行),也可能是Stopped(挂起,暂停),Terminated(终止) ...
Docsify 搭建记录
需要一个小型的在线文档系统,Docsify可以满足需求,记录一下搭建记录,主要参考Docsify官方的中文文档。
本地搭建
前提:本地需要安装 nodejs 并完成相应配置。
新建DocBase/文件夹,在其中本地安装 docsify-cli
1npm i docsify-cli -g
由于 docsify-cli 不是全局安装的,存在找不到 hexo 命令的问题,对于
Windows 可以通过临时添加路径到 PATH 解决,在 DocBase 目录下执行
1$env:Path += ";$((Get-Item -Path .\node_modules\.bin -Force).FullName)"
初始化项目 1docsify init ./docs
初始化过程会自动新建./docs子文件夹,并生成如下文件:
index.html:项目入口
README.md:内容会被渲染成项目主页
.nojekyll:防止Github忽视下划线开头文件
使用下面的命令可以在本地预览 123cd ./docsdocsify serve# or docsify s
这会 ...
Linux 学习笔记:控制台,终端,tty
整理一下关于下面这些概念的学习:
终端(terminal)
控制台(console)
电传打字机 tty(teletype)
这些概念在早期是有明确的定义的,但是随着计算机的发展,它们的物理实体逐渐消失,各种概念主要靠计算机软件模拟,它们之间的区别变得模糊难以理解,因此学习整理一下,以Linux系统为主。
TODO
shell
控制台与终端
早期的计算机是一套巨大的机器,就像工厂的大型机器一样,如此的庞然大物必然需要一个专门的操作台,
用于陈列各种仪表盘、指示灯、按钮、电线,专业操作人员通过这个操作台控制计算机的启动、运行、停止,结果也会实时反馈到操作台,这个操作台就叫“控制台”(console)。
控制台是附着在机器上的设备,可以实现对计算机的完全操控,但是主要是用来管理计算机的。
对于多用户操作系统(特别是UNIX),控制台并不方便给用户提供计算服务。
因此自然产生了终端(terminal)的硬件概念:每个用户通过终端设备与主机远程连接(还不是现代意义上的基于互联网的远程连接),管理员给每个用户分配一个账户,用户“登录”到系统获得计算机使用权。在这个阶段,计算机通常只有一个 ...
Linux 服务器配置笔记
记录一下我在服务器上鼓捣了什么,系统版本是CentOS7.9,由于普通用户没有
root
用户权限,服务器还不联网,不能使用傻瓜式的安装,只能在用户家目录下使用源码编译的方式安装软件。
虽然我可以登root账户,但是root操作有风险,可能把公共服务器搞坏了,还是选择用普通账户操作。
tmux
安装过程主要参考官方wiki和非root用户安装tmux -
三三仨仨的文章 - 知乎。
下载 tmux-3.2a.tar.gz,还需要两个依赖:
libevent-2.1.12-stable.tar.gz
ncurses.tar.gz (ncurses-6.3)
如果可以通过包管理器下载依赖,当然更好。
完整安装过程如下 1234567891011121314151617181920cd ~/tmptar -zxvf libevent-2.1.12-stable.tar.gzcd libevent-2.1.12-stable/./configure --prefix=$HOME/.local --enable-sharedmake && make installcd ...
Cpp 并行计算学习笔记
基本概念
首先学习几组基本概念:
并发(Concurrency)/并行(Parallelism)
同步(Synchronous)/异步(Asynchronous)
进程(Process)/线程(Thread)
并发 / 并行
并发指的是多个任务在同一时间段内被同时推进,可能是同时执行不同的任务,也可能是频繁交替执行每一个任务的一小部分
并行指的是多个任务在同一时间段内真正同时执行
举个例子:
学生在课后可以并发地完成每一个科目的作业:一会写语文作业,一会又切换回写数学作业,切换可以非常频繁,但是不可能同时写两科作业,也就是不能并行
人体的消化系统的任务和循环系统的任务在并行地执行:在同一时间内,肠道蠕动和血液循环在同时进行,不可能说心脏跳动时就让肠道蠕动暂停
同步 / 异步
同步是指任务按照顺序依次执行,每个任务在前一个任务完成后开始执行。在同步模式中,任务之间需要等待其他任务完成才能继续执行。
异步是指任务可以独立于其他任务进行执行,它们的执行过程不会产生堵塞。在异步模式中,任务可以在后台执行,执行结果可能需要等待一段时间才能获得,但这不会影响其他任务的执行。
举个例 ...
GCC 源码编译安装(离线,普通用户)
gcc 的非 root
用户离线编译安装比其他的软件的源码安装都要复杂:因为它有依赖,在服务器上无法通过联网下载,要提前下载依赖的压缩包,而且gcc的编译时间很长。
安装过程主要参考CentOS7
离线升级安装gcc到6.3.0 和Linux
非root安装GCC9.1.0
下载依赖
在官网或者镜像网站下载
gcc-11.4.0.tar.gz,传到服务器上解压为~/tmp/gcc-11.4.0
进入~/tmp/gcc-11.4.0子目录,需要解决下载依赖的问题。在可以联网的情况下,直接执行自带的下载依赖的脚本
./contrib/download_prerequisites。如果服务器无法联网,则需要手动下载处理
查看上述脚本,找到四个必要的依赖 gmp,mpfr,mpc,isl
以及对应的具体版本,例如 gcc-11.4.0
需要的四个依赖版本及其下载地址如下(不同版本的gcc对应的依赖版本也不一样)
123456gmp='gmp-6.1.0.tar.bz2'mpfr='mpfr-3.1.6.tar.bz2'mpc='mpc-1.0 ...
FastFetch 小工具
介绍
FastFetch
是一款类似于 neofetch
的轻量级、快速的信息获取工具,可以在命令行中快速查看系统信息,
包括显示系统的硬件、软件和操作系统等关键信息,同时支持自定义输出格式。
安装
Windows上直接通过winget安装 1winget install fastfetch
Ubuntu上可以通过包管理器安装 12sudo add-apt-repository ppa:zhangsongcui3371/fastfetchsudo apt install fastfetch
使用
直接通过 fastfetch 命令执行即可,效果例如
Cpp 小技巧/冷知识记录
记录一下C++的小坑/冷知识。
int8_t 输入
虽然C++提供了很多数据类型,但是最基础的其实还是有无符号的字符和整数浮点数等,其他的数据类型是对它们的简单包装,因此还是表现原本的行为,例如下面两种类型在msvc可能的定义为
12typedef signed char int8_ttypedef unsigned char uint8_t
这表明int8_t和uint8_t实际上还是char类型的重命名,这会影响很多地方的处理,例如cin在接收字符流输入时,会根据接收变量的数据类型进行转换:如果输入1,可能会被解释为ASCII字符1(值为49),也可能会被解释为整数1,这完全取决于接收变量的类型
1234567char a; cin >> a; // '1' = 49int b; cin >> b; // 1int8_t c; cin >> c; // '1' = 49uint8_t d; cin >> d; // '1' = 49
这种情况下,由于int8_t和uint8_ ...
Cpp 成员函数中的 this
整理一下关于C++中特殊的this指针的知识,并且学习C++23中的新内容:显式推导this。
隐式this
基础
this指针是C++面向对象编程中的重要机制,在自定义类型的非静态成员函数中,都存在这一个自动传递的this指针指向当前对象自身,例如
12345678910111213#include <iostream>struct Test { int data = 0; void call() { std::cout << "call: " << data << "\n"; }};int main() { Test test{1}; test.call(); return 0;}
对于编译器来说,这里的定义和调用过程等效于下面的形式(因为this是关键词,在代码中使用this_来代表)
1234567891011121314#include <iostream>struct ...