Howie's Notes

Machine Learning and Cyber Security

JetBrains

JetBrains是捷克的一家软件公司,该公司专业生产各种编程语言的IDE,其中包括Java的IDE —— Intellij IDEA,Python的IDE —— PyCharm,JavaScript的IDE —— WebStorm,C/C++的IDE —— CLion等等。JetBrains系列的IDE一直以强大易用著称,甚至有人说,一个优秀的程序员应该使用JetBrains全家桶。
JetBrains的大多数IDE都是收费的,有的分为社区版(Community Edition)和专业版(Professional Edition)两种,专业版相比社区版有更多的功能,但也会收取相应的费用,然而,JetBrains对学生提供免费授权计划,学生只要验证学生身份即可免费使用JetBrains的所有IDE。

Read more »

扩展机制

在介绍常用扩展之前,有必要先来介绍一下 Jupyter Notebook 的扩展机制:本质上来说,所有的 Jupyter Notebook 扩展都是一个个的 Python 包,所以大部分可以通过 pip 快速安装,另外,Jupyter Notebook 是一个典型的 B/S 架构的应用,用户通过访问浏览器来使用 Jupyter Notebook,因此,Jupyter Notebook 的扩展可以只针对服务器端,也可以针对前端资源页面,而如果一个扩展增强了 Jupyter Notebook 的前端资源页面,则它还必须使用如下命令安装资源:

1
jupyter nbextension install helpful_package --py # or --sys-prefix if using virtualenv or conda

安装完资源后,如果这个资源需要在每次 Jupyter Notebook 启动后被加载,则还应使用如下命令启用资源:

1
jupyter nbextension enable helpful_package --py # or --sys-prefix if using virtualenv or conda

jupyter_contrib_nbextensions

与其说这是一个扩展,倒不如说这是一群扩展,该扩展集合了大多数的 Jupyter Notebook 常用扩展。

使用 pip install jupyter_contrib_nbextensions 命令即可安装,安装完成后使用 jupyter contrib nbextension install --user 命令进行些许配置,参数 --user 指定安装到当前用户家目录下的 .jupyter 文件夹下。

等到安装并配置完成后,打开 Jupyter Notebook 网页,会出现 Nbextensions 选项卡,点击进入此选项卡中,可以启用或禁用相应的扩展。

RISE

该扩展可以将 Jupyter Notebook 中的一个个单元格转换为一张张的幻灯片。

使用 pip install RISE 命令即可安装,安装完成后使用 jupyter-nbextension install rise --py --sys-prefix 命令安装前端资源,接着使用 jupyter-nbextension enable rise --py --sys-prefix 命令启用前端资源。

开发同一项目的不同的人,可能会使用不同的编辑器,又会有不同的设置,这就会造成不同的代码格式,为了统一同一项目的代码格式,由此诞生了 EditorConfig ,它包含了一个用于定义代码格式的文件和一批编辑器插件,这些插件可以让编辑器读取配置文件并依此格式化代码。

一个典型的 EditorConfig 配置文件如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 这是一行注释,以#开头

# 表示此文件为最顶级
root = true

# 设定每个文件每行以换行(LF)结束,文件末尾添加一个新行
[*]
end_of_line = lf
insert_final_newline = true

# 匹配所有以 js 和 py 为后缀名的文件
# 设定其编码为 UTF-8
[*.{js,py}]
charset = utf-8

# 匹配所有以 py 为后缀名的文件,设定其缩进为 4 个空格
[*.py]
indent_style = space
indent_size = 4

# 设定 Makefile 文件的缩进为 Tab
[Makefile]
indent_style = tab

# 匹配lib目录下所有以 js 为后缀名的文件,设定其缩进为 2 个空格
[lib/**.js]
indent_style = space
indent_size = 2

# 设定 package.json 和 .travis.yml 的缩进为 2 个空格
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2

此配置文件应该保存为 .editorconfig 并放置在项目目录中,编辑器的 EditorConfig 插件会从文件打开目录开始依次向其父级目录查找并读取配置文件,直到遇见 root = true 为止。

有很多项目在初始化时都会生成相应的 .editorconfig 文件,比如 Angular。

另外,Visual Studio 和 JetBrains 家的大部分 IDE 都已经原生支持了 EditorConfig,因此不用再安装插件;对于 Sublime Text 和 Vim 等未原生支持的编辑器,EditorConfig 官网提供了相应的插件下载地址。要了解详细的支持列表,请访问 EditorConfig 官网。

等宽字体与比例字体

等宽字体(Monospaced)是指字符宽度相同的电脑字体,与此相对,字符宽度不尽相同的电脑字体称为比例字体(Proportional)。一图胜千言,如下:

等宽字体与比例字体

在早期的电脑中,由于技术的局限,无法进行字母宽度的比例调整,因此只能将每个字符都制作成一样的宽度,从而形成了等宽字体。在等宽字体中,字母 i,j 显得两侧余白较多,而字母 w,m 等的笔画显得相当拥挤。但是随着图形用户界面主流的更新和计算机技术的提高,处理比例字体的局限性得到了突破,因此现在排版上显得比较自然的比例字体的使用已经相当普及。这里所讨论的都是英文字体,对于中文字体而言,一般认为它们都是等宽的。
Windows 中常用的等宽字体为 Consolas;macOS 中常用的等宽字体为 Menlo;Linux 中常用的等宽字体为 Mono。

Read more »

按照编程语言的执行原理,一般将其分为编译型语言(如 C)和解释型语言(如 Python),对于编译型语言来说,它的开发环境就代表该语言的编译器和其基本类库,对于解释型语言来说,它的开发环境就代表该语言的解释器和其基本类库。请注意,这里我并没有提到编辑器,因为编辑器并不属于每种语言所特有的范畴。

对于解释型语言来说,它的开发环境就等于运行环境,而对于编译型语言,可以说它不需要运行环境。请注意,Java 可以理解为是一种先编译后解释的语言,所以运行 Java 程序之前需要安装 JRE(Java 运行环境)。

如今许多语言的 IDE(集成开发环境),已经集编辑器、该语言的编译器/解释器、基本类库等于一体。

SEO,即搜索引擎优化(Search Engine Optimization),下面列出几点 SEO 方面的建议:

  • 页面的URL应该足够反映页面的内容

第一步

拿到一个被隐写的文件,第一步当然是判断该文件是哪种类型的文件,一般可以通过文件后缀名判断之,若不能通过文件后缀名判断,则可以使用 Linux 中的 file 命令,直接输入 file a 即可检查 a 文件的类型。

知道文件类型后,就可以对症下药,依据相应的类型使用相应的办法,此时,不妨再查看一下文件对应的二进制数据,所有电子信息的本质无非是二进制,可以在二进制数据中搜索 CTF 或 FLAG 等关键字,发现是否存在隐藏信息。Windows 下可以使用 Sublime Text 3 的插件 HexViewer 查看二进制信息。Linux 下可以使用 xxd 命令查看文件二进制数据。

图片隐写

图片内容

首先应该检查图片内容本身是否存在某些隐藏信息,遇到不熟悉的图片可以尝试谷歌搜图,或许可以发现更多信息。

Exif

Exif,即可交换图像文件格式(Exchangeable image file format),可以记录 JPEG 格式图片的属性信息和拍摄数据。有的 JPEG 格式图片会具有 Exif 信息,在 Windows 中查看属性选项卡中的详细信息项即可查看。别的格式的图片不具备 Exif 信息。如下图片:

exif

Read more »

Windows

微软最初的操作系统的DOS,DOS只是一个命令行形式,后来

.NET

Windows Phone

几个术语

  • PV:Page View,即页面浏览量或点击量,用户每次刷新即被计算一次。
  • UV:Unique Visitor,指独立访客数,以cookie为依据,访问网站的一台电脑客户端为一个访客。一天内相同的客户端只会被计算一次。
  • IP:指独立IP数。一天内相同IP地址只被计算一次。

相关工具

有许多第三方的工具可以帮助站长统计和分析网站流量,比如百度统计、腾讯分析、Google Analytics(GA)等。个人经常使用Google Analytics。
这类工具的原理大致为:它们会生成一段特定的JS代码,站长需要将这段代码插入到自己网站的页面中,当访客访问网站时,这段代码会收集访客的行为信息,并上传到它们的服务器上。

软件版本号的确定没有一个统一的规范,但大都遵循一个固定的格式,即X.Y.Z格式,其中:

  • X代表主版本号,一般当软件整体重写,或出现不向后兼容的改变等重大更新时,增加X,同时重置Y、Z为0,X为0时表示软件还在开发阶段;
  • Y代表次版本号,增删功能时增加Y,同时重置Z为0;
  • Z代表修订号,修复Bug时增加Z。

除此之外,还会有一些修饰词,比如:

  • alpha表示内部测试版;
  • beta表示公开测试版;
  • rc即Release Candidate,表示候选版本,即将作为正式版发布;
  • release表示正式发行版;
  • lts即Long Term Support,表示长期支持版。

有的项目有自己的一套规则,比如Ubuntu、Visual Studio等,它们采用发布年份作为版本号;Node.js规定X为偶数的是稳定版,X为奇数的是开发版;TeX的版本号不断趋近于π。
随着版本号定义的越来越混乱,GitHub起草了一个语义化版本(Semantic Versioning)规范,为开源项目做出了一定指导意义。

0%