What one fool could understand, another can.
- —R. P. Feynman
What one fool could understand, another can.
这篇教程面向的是从未接触过终端(命令行)的同学(通常是Windows用户),所以我会以Windows平台介绍如何安装Jupyter Notebook(但macOS与Linux也绝对通用啦),并简单介绍它的理念和基础使用。 题外话:为什么要使用Jupyter? 其实这个答案有很多,我认为则是它提供了交互式的(所见即所得)的编程方式,就像曾经的 Microsoft Word 一样(LateX的学习成本就高得多)。对的,它极大地降低了编程的难度,让更多的人能够学习并享受程序的乐趣。(同时它也真的超级适合科研领域) 题外话的题外话:对于大型项目使用Jupyter是一场灾难。 使用Windows系统 前往Python.org选择 Latest Python 3 Release 拉到最底下选择 Windows Installer 下载并安装,这里建议安装到默认的路径即可。 注意!一定要勾选Add Python to PATH选项!!!它会把python和pip添加到PATH中,供你在CMD/PowerShell中使用命令行。 安装完成以后,你可以按下 WIN+R 键,输入 powershell 打开终端,检查python与pip是否正确安装。 如果是macOS或者Linux 安装几乎一样,区别在于终端不再是powershell,而是使用Terminal(相信你们能打得开它)来检查安装是否成功喔! 使用pip来安装Jupyter以及依赖库 检验完成后(现在你已经会使用powershell了),我们再次打开powershell,复制以下命令开始安装Jupyter以及常用的数据分析依赖库,过程会比较慢(取决于网络和你的电脑运行速度)通常会花费2-10分钟不等。 注意!最后要耐心等待安装完成,直到能继续输入命令为止。 pip install jupyter numpy pandas scipy matplotlib seaborn Jupyter Notebook 安装完所有依赖以后,在powershell里输入 jupyter notebook 会自动跳转到浏览器。你可以尝试新建一个 ipynb 文件,并写一些简单的python代码(shift+enter运行单元格)。当你想要关闭的时候,只需要关掉浏览器,同时关闭powershell即可。 注意!观察你在powershell输入 jupyter notebook 这行最前面的路径(比如我这是 C:\Users\qwezarty),这个路径是你之后新建的 ipynb 文件的物理文件夹所在位置,你可以使用Windows的文件管理器打开找到它(可以分享你写的notebook并且发送给别人喔!) 在Jupyter中最重要的概念就是单元格(Cell),它可以是 python code 也可以是 markdown (什么是markdown?看这里:Markdown 是什么?),单元格被编辑后需要使用shift+enter运行以后才会真正执行这个片段,所以单元格不再是像以前的传统程序一样按顺序执行了,而是按照你手动shift+enter的顺序来执行。(每次修改代码都别忘记运行这个单元格后面所有的单元格们哦!)。 我们可以选中一个单元格,按m键来让它转变成一个markdown单元,按y键来让它变回一个code单元。在markdown单元下,我们甚至可以输入Latex的数学公式。 Markdown 语法・简明版 有你需要的所有基础语法和演示。Short Math Guide for LATEX 则是一份很好的快速入门Latex的资料,由美国数学协会编写免费开放给公众(我也收集到了它的中译本,一份简短的LATEX数学指南 翻译如有侵权请告知我会删去)。...
这是在写blog诞生的副产物:如何录制感兴趣的部分屏幕,再便捷地把它转换成GIF? 注意!最好是短小的小于30秒录制,不然制作出来的GIF体积太大,不适合网页阅读或者分享到社交网络(一般都有文件最大尺寸要求) 依赖库 使用Homebrew(没有用过的话请先安装,点开网页有复制一行命令黏贴到终端运行)来安装两个依赖库:ffmpeg, imagemagick brew install ffmpeg brew install gifsicle 在终端中逐行执行以上命令安装,这可能会花费一些时间。 录制屏幕 macOS中拥有一个自带的截图/录制工具,你可以在这里(在 Mac 上截屏或录制屏幕)找到官方的使用说明。 试着玩一下这个内置的工具吧:截图并找到储存的路径、录制屏幕并停止、使用Preview/QuickTime打开录制的视频并裁剪保存。 转换成GIF 你可以在桌面上找到刚才录制的视频,它默认的名字会是类似于这样:Screen Recording 2022-10-01 at 10.12.12 AM.mov。在终端中操作我们不喜欢带空格的文件名(并且它很长),所以我们将它重命名来方便后面的操作(当然你熟练了可以跳过这一步)。这里我把它重命名成了:input.mov 首先我们需要把经过裁剪的录制转换成GIF(但可能文件尺寸较大) ffmpeg -i $HOME/Desktop/input.mov -r 10 -vf "scale=800:-1, setpts=0.25*PTS" output.gif -r 代表帧率,对于GIF来说10是一个比较合理的取值,当然具体取多少要看你的录制是比较静态的还是包含大量的运动镜头。 -vf 是 video filter 这里限制了它横向的尺寸为800个像素,竖向自动计算保持横纵比,同时设置setpts加速到原来的4倍(不要的话可以删去,或者设置为1)以减小生成的GIF尺寸,这两个数值选取看使用场景合理选择即可。 -pix_fmt rgb24 这是一个可选参数(但它在我的mac上不生效,不知道其他系统会不会是好的),代表色深,默认是rgb8 尺寸优化 gifsicle -i output.gif -O3 -o optimized.gif -03 代表调用文件尺寸最优化算法 –colors 256 这是一个可选参数,也是用来限制色深的,这里我没有加这个参数(因为之前ffmpeg用的是默认的rgb8,colors只有70) 经过我测试最后生成的GIF图是388K,而原本录制的MOV格式则高达11M,体积缩小到了原本的1/25。 参考资料 OS X Screencast to animated GIF How can I get ffmpeg to convert a ....
随着深入使用ROOT Data Analysis Framework,也逐渐发现了它的劣势:基于C++写的分析和绘图程序在代码行数增长以后维护成本不断提高、多人协作的成本偏高(尤其是课题组的新成员想融入进来需要花很多的时间)。幸运的是,ROOT项目组还为Python提供了调用接口(PyROOT),配合使用Cppyy来最小程度上嵌入一些C++的代码,以达到易于上手、维护的目的。 Note:也不得不说下Python的劣势,慢!很慢!非常慢!我更推荐那些性能开销型的程序使用C++来编写,或者在Python中使用Cppyy来编写C++并执行。在我的使用场景中,一般是绘图采用Python来做。一个好的判断标准是:当你在Python中编写了某个函数,这个函数的运行时间能否在你盯着它运行结束并且耐心消失殆尽之前就执行完毕(如果不行,请把这个功能使用C++来执行,或者换一种构架思路)。 使用Pyenv来管理Python的版本(and Jupyter) Python最让人诟病的就是版本(还有它的PIP软件包管理),Pyenv允许我们在本机上安装多个不同的Python版本并随时切换,这样能够让我们绕开macOS本机的上古Python2.X(系统部分软件对它有依赖),并且绕开Homebrew安装并不断升级的Python3.X(每次Homebrew自动升级了Python都会导致透过PIP安装的软件包失效,需要重新安装很麻烦)。 以下是macOS的安装方法,注意我使用的终端是zsh,若是bash请参考pyenv github的readme,你可以通过 echo $SHELL 来查看自己用的是什么终端。 brew update brew install pyenv echo 'eval "$(pyenv init --path)"' >> ~/.zprofile 接着需要完全退出终端并重新打开它,测试一下Pyenv是否成功安装,以下是Pyenv的一些简单使用方法: # show help page pyenv -h # show availible python versions pyenv install --list # install specific python version pyenv install 3.9-dev # show installed versions pyenv versions # using specific python version pyenv global 3.9-dev # show which python located pyenv which python 注意!不同的系统和ROOT版本,它预编译好的包使用的Python版本是固定的,你需要使用 root-config –python3-version 来查看并安装相应的dev版本。例如:3....
简介 最近C++代码越写越多,也有不少同学问我这种炫酷的C++代码提示是怎么在Mac上实现的。2022年了现在我日常会使用VSCode来作为主力编辑器(包括断点调试和提交Git Commits),NVim则用于终端编辑代码(例如远程连接到CERN的服务器)。我会以MacOS系统为例配置这两种方案,大家根据自己需求,选择其中一种即可,个人推荐VSCode. Sec. 1 VSCode 首先是要安装 C/C++ 拓展,启动VSCode以后在拓展里搜索安装即可。然后让我们找个(或者新建)一个空的文件夹,例如我选择了 ~/Code/clang/playground,使用VSCode打开它。接着新建 .vscode 文件夹,在该文件夹下新建文件 c_cpp_properties.json 文件: { "configurations": [ { "name": "Mac", "includePath": [ "${default}", "${workspaceFolder}" "/usr/local/opt/root/include/root", // change path to your root include path ], "compilerPath": "/usr/bin/g++", "cppStandard": "gnu++17", "intelliSenseMode": "gcc-x64" } ], "version": 4 } 其中 includePath 和 compilerPath 是值得注意的。 当你引用了一些第三方库或者头文件,你都要写到 “includePath” 中,例如在上面的例子我添加了root库的inlude路径(如果你不知道它的路径,可以使用 root-config –incdir 找到)。 你可能需要更改 “compilerPath” ,你可以在终端里输入 which g++ 来看到g++的路径。 现在让我们来测试一下它是否能正常工作,在 playground 文件夹下新建一个 main.cc 文件,你应该能正常使用代码补全与智能提示了(如果不行请返回到上一步,也欢迎通过邮箱联系我!),内容如下: #include <TFile.h> #include <TCanvas....
Sec.0 引言 如果你刚接触GNU/Linux,那么在连接远端主机的时候一定被这些问题困扰着: 远端主机的IP地址记不住,每次都要掏出小本子看一下,还要多看几眼看看输地对不对 密码过长难以输对,或者密码太过简单容易被碰撞攻击 连接的网络环境复杂,每次要跳转多个堡垒机到达目标 不过幸好,前辈们在设计SSH的时候,就已经帮我们考虑到了这个问题。 Sec.1 通过密钥来避免每次输入密码 什么是非对称加密算法 你生成了两把钥匙:“公共钥匙”和“私人钥匙”。公钥会被广泛地分发给其他任何想要和你通信的人;而私钥则由你自己保管。 “钥匙对”使得通信过程中,不需要传递加密解密“规则” 你把公钥给了信任的人,他们将要发送的数据通过公钥加密 你拿到了这段数据,利用只储存在自己这里的私钥解密 中间数据即使被拦截,在没有唯一私钥的情况下,也没法解开数据包。 那么只要私钥不泄漏,通信就是安全的。 在数学原理上,阮一峰的博文RSA算法原理(一)做了很好的阐述,这里不再展开,有兴趣的同学可以了解一下。 生成钥匙对 # 生成key,但首先你得安装ssh ssh-keygen -t rsa -b 2048 # 一路按回车换行,终端输出大概是这样 # Generating public/private rsa key pair. # Enter file in which to save the key (/home/username/.ssh/id_rsa): # Enter passphrase (empty for no passphrase): # Enter same passphrase again: # Your identification has been saved in /home/username/.ssh/id_rsa. # Your public key has been saved in /home/username/....