Howie's Notes

Machine Learning and Cyber Security

iCalendar 是通用的日历数据交换标准,常用于在多个不同日历系统之间分享日程,其后缀名常为 .ics。

一个典型的 iCalendar 文件内容如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//howiezhao//ical-demo//CN
NAME:iCal Demo
BEGIN:VEVENT
UID:uid1@howiezhao.com
DTSTAMP:20261003T110000Z
DTSTART:20261010T170000Z
DTEND:20261011T035959Z
SUMMARY:Coding Party
END:VEVENT
END:VCALENDAR

iCalendar 文件的第一行必须是 BEGIN:VCALENDER,最后一行必须是 END:VCALENDER;两行之间数据称之为“icalbody”。icalbody 由一系列日历属性和一个以上的日历组件组成。

Read more »

1991 年 Phil Zimmermann 开发了商业加密软件 PGP(Pretty Good Privacy),随着 PGP 的流行,OpenPGP 标准被制定,后来,GNU 开发了遵循 OpenPGP 标准的开源版本的 PGP,即 GPG(GNU Privacy Guard)。现在 GPG 被人们所广泛使用。

GPG 本质上是一个命令行工具,为了和别的操作系统更深入的融合,衍生出了不同的基于 GPG 开发的软件。Windows 下推荐使用 Gpg4win,macOS 下推荐使用 GPGTools。

Read more »

大约是自 Windows 10 1709 更新之后(或许是 1809?2004?),莫名其妙的存在类似“端口被占用”这样的问题,比如像下面这样的报错信息:

1
2
Error: listen EACCES: permission denied 0.0.0.0:3000
...

或者启动 SS 时提示:

1
2
Shadowsocks Error: Port already in use
...

又或者启动 Docker 时提示:

1
Error starting userland proxy: Bind for 0.0.0.0:50051: unexpected error Permission denied.

电脑重启几次之后,以上报错可能会消失,一切又恢复正常。

Read more »

在 IntelliJ 平台 IDE 中(如 PyCharm、IntelliJ IDEA 等),Ctrl+Shift+F 快捷键通常指在项目所有文件中搜索对应的关键词,这是一个常用的功能,然而近期笔者发现此快捷键莫名其妙的失效了(其他快捷键都工作良好),这很可能是与别的程序的快捷键相冲突导致的,经排查,是与 Windows 10 中微软拼音的简繁转换快捷键冲突。

解决步骤依次为:设置 ——> 时间和语言 ——> 语言 ——> 中文(简体,中国)——> 选项 ——> 微软拼音 ——> 选项 ——> 按键 ——> 简体/繁体中文输入切换,可以将其改为另一个键或者直接将其关闭。

此解决方案可能并不适应于每个人,具体还是要找到那个冲突的快捷键。

从 2020 年末开始,微软逐步向 Windows 10 用户推送了 WSL 2 更新,WSL 2 相比 WSL 1 是一个巨大的变化,最显著的改变在于 WSL 2 开始采用 Hyper-V 虚拟机来运行 Linux,这会解决之前 WSL 的很多问题,但也可以看作是 WSL 项目的失败,本文所描述的主体为 WSL 2,有关 WSL 1 的相关内容请参考 WSL 相关问题解决。

Read more »

并发与并行

并发与并行,这是一个老生常谈的问题,简单来说,并发(concurrent)指的是在某个时间段内有多个程序在执行,而并行(parallel)指的是在某个时间点有多个程序在执行。

这也就是说,在某种程度上而言,并发是伪并行,真正的并行需要多个核心。由于现代计算机的核心往往是有限的,但通常运行的程序远大于核心数,所以在计算机科学中,并发往往是我们探讨的重点。

Go 语言的创造者之一 Rob Pike 就曾经指出:

并发用于制定方案,用来解决可能(但未必)并行的问题。

本文翻译自 https://uberpython.wordpress.com/2012/09/23/why-im-not-leaving-python-for-go/ ,原文标题为 Why I’m not leaving Python for Go,译文如下:


首先,Go 似乎是一门很棒的语言。它有一个很棒的教程,我乐此不疲地去看,发现:

  • Go 很快。
  • 在设计上支持并发。
  • 类型化(对 JIT 和 IDE 来说很重要),但不像 C 或 C++ 的螺旋形那样繁琐和丑陋。
  • 鸭子类型的接口。
  • 延迟(defer)机制真的很精巧。

但是有一个问题我不能接受。这是个遗憾,因为我很想以并发的名义进行信仰的飞跃。这个问题就是用返回值来进行错误处理。这简直像 70 年代的风格。

Read more »

本文讨论现代密码学中的对称加密。

对称加密技术有两种宽泛的类型:块密码(block cipher)和流密码(stream cipher)。块密码用在多种因特网协议的加密中,包括 PGP、SSL 和 IPsec 等;流密码用在无线 LAN 的安全性中。

Read more »

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)允许主机自动获取(被分配)一个 IP 地址。网络管理员能够配置 DHCP,以使某给定主机每次与网络连接时能得到一个相同的 IP 地址,或者某主机将被分配一个临时的 IP 地址(temporary IP address),每次与网络连接时该地址也许是不同的。除了主机 IP 地址分配外,DHCP 还允许一台主机得知其他信息,例如它的子网掩码、它的第一跳路由器地址(常称为默认网关)与它的本地 DNS 服务器的地址。

由于 DHCP 具有将主机连接进一个网络的网络相关方面的自动能力,故它又常被称为即插即用协议(plug-and-play protocol)或零配置(zeroconf)协议。

Read more »

ICMP(Internet Control Message Protocol,因特网控制报文协议)被主机和路由器用来彼此沟通网络层的信息。ICMP 最典型的用途是差错报告。

ICMP 报文有一个类型字段和一个编码字段,并且包含引起该 ICMP 首次生成的 IP 数据报的首部和前 8 个字节(以便发送方能确定引发该差错的数据报)。下表是相关的 ICMP 报文类型:

Read more »
0%