BNU-FZH

fengzhenhua@outlook.com

在大学校园里一般都会为学生提供免费的校园网,但是由于学生众多,一般当电脑关机时它会自动断开以释放ip给下一个学生使用。然而,对于办公室的台式机,每次开机都要打开校园网登录页面,输入一遍学号和密码,显然这不友好。即使是让游览器记住登录密码,每天重复这一动作也让人心情不好。

网络上有一个开放的脚本,可以实现免登录操作,但是操作起来有点麻烦,同时安全性和合法性有待商榷。相关参考:

为了实现合法稳定的使用校园网,我们可以借助于路由器。本文推荐一款好用的路由器:TP-Link 5660易展版, 如下图所示

TP-Link 5660 易展版

将校园网的网线连接路由器的LAN口(易展版无需区分WANLAN口), 然后使用另一网线连接电脑的网口,使用电脑浏览器打开校园网登录界面,输入学号和密码。然后在浏览器输入192.168.1.1按回车,进入到路由器设置界面,选择DHCP服务器 ,将地址租期设置为最大的2880分钟,这样连网后在2880分钟内就不会断开了。同时,路由器所附加的无线网络功能也可以实现手机和笔记本的连网。

设置DHCP服务器

无线键盘和鼠标 2.4G 和蓝牙到底哪个好?

有人说,无线肯定蓝牙好,功耗低够省电;有人说肯定是 2.4G 好,延迟比蓝牙要低多了;也有人说两个都不好,抗干扰能力都很弱......看似常用的东西,一说到谁更好用,大家都说不上来个但是所以然。

所以今天 der 就和大家聊聊,都是无线,2.4G 和蓝牙到底哪个好?

首先我们要知道,大家常说的蓝牙是“标准版”的蓝牙技术,即 Bluetooth

由于手机厂商觉得标准版的蓝牙技术功耗还是很高,于是就整了个低功耗蓝牙技术,也就是 BLE。在蓝牙 4.0 发布后,标准版蓝牙技术和低功耗蓝牙技术都统称蓝牙 4.0,以至于很多人一时半会分不清。

好在这两种蓝牙技术的应用场景不同,像标准版蓝牙技术主要应用在蓝牙电话接听,蓝牙耳机、蓝牙音箱等;而低功耗蓝牙技术则应用在可穿戴设备,IoT 智能设备、鼠标键盘等电池供应的场合。虽说标准版蓝牙技术也支持用电池供电,但低功耗版蓝牙技术对电池的要求更低,续航也更长,有的几年也不在话下。

而我们常说的 2.4G 无线连接技术,也就是 2.4GHz 频段,它的发射频率一般低于 1W,以免对其他频段造成干扰。

由于 2.4GHz 这个频段是美国 FCC 设立的,还是一个专门为工业、科学、医用开放的免许可频段,简单来说就是可以免费使用。反正不收钱,各国自然也共用这个频段,渐渐的就形成了个庞大的市场,像我们日常用的蓝牙、无线键鼠、无线网络也都支持这个频段。

于是在功耗方面,自从蓝牙协议 4.0 发布后,低功耗蓝牙技术的加入使其支持了省电,不再像以前需要占用太多带宽的设备进行连接。

像现在比较好的智能家居,我们只需开启蓝牙就能连接多个设备,像温度传感器之类的还能进行数据传输,查看温度与记录......只需低功耗蓝牙技术即可实现。还有我们常用的无线蓝牙键盘、鼠标,由于低功耗蓝牙技术的限制,鼠标的回报率、带宽等会限制的很低,这样较低性能的模式去运行,自然会比较省电。

2.4G 无线连接技术占用的频宽大,像鼠标的回报率要求高,响应速度快,相较于低功耗蓝牙技术会更耗电一点。所以低功耗蓝牙技术相比 2.4G 无线连接技术更省电,像很多外设的相关描述中说的都是蓝牙更持久。

而很多小伙伴关注的稳定性与传输距离的问题,2.4G 无线连接技术也依旧比不过蓝牙。

由于 2.4GHz 是“公共频段”,当附近有较多该频段的无线产品时,也容易受到干扰,甚至有时候中间放个手机也会造成 2.4GHz 设备卡顿。再说了,很多支持 2.4GHz 的设备不过 10 米左右,距离相对受限。

虽说低功耗蓝牙技术也同属 2.4GHz 频段,但它支持的频段会更多一些,而且还支持跳频技术错开干扰,稳定性方面会更为稳定。传输距离方面,蓝牙 4.0 协议理论上最高支持 50 米的传输距离,但实际民用基本为 8~30 米,也足以比 2.4G 无线连接技术要强得多,同时这也是为什么有个段子说手机被偷了那么久,蓝牙耳机依旧在播放。

这时候就有大聪明发话了:既然蓝牙比 2.4G 更省电,稳定性和传输距离又更好,那 2.4G 到底有什么用呢?

der 觉得,2.4G 无线连接技术最大的优点莫过于它传输速度快很多,而且延迟更低,像一些喜欢玩游戏的小伙伴,对设备有着较高的响应速度,例如鼠标、键盘等,2.4G 无线连接技术则能提供更好的体验,仅此而已。

不过有的厂商见蓝牙与 2.4G 这堆兄弟的优缺点可以互补,推出所谓的蓝牙 + 2.4G 双模无线设备,如果你想玩游戏就用 2.4G 无线连接;如果只是日常使用省点电,则可以用蓝牙;这样办公娱乐都能用。

最后总结一下,无论是功耗、稳定性、传输距离等方面,蓝牙确实比 2.4G 要实用的多,用于办公再适合不过了。

但如果你喜欢玩游戏,那 2.4G 速度快且延迟低的特性更适合你。

再说了,很多主机电脑、其它设备并没自带蓝牙功能,所以很多游戏玩家看不起也用不上蓝牙,只能配备 USB 解码器对码使用 2.4G 无线连接技术,祈祷着解码器千万别丢哪不见了。

通过 Wi-Fi 与其他设备共享 Internet 连接,将 Windows 电脑变成移动热点。 你可以共享 WLAN以太网手机网络数据连接。 如果你的电脑具有手机网络数据连接并且共享该连接,它将使用流量套餐数据。

设置移动热点

  1. 选择开始,然后选择设置网络& Internet移动热点

  2. 对于从中共享我的 Internet 连接,选择要共享的 Internet 连接。

  3. 对于 共享方式,请选择希望如何通过 Wi-Fi蓝牙共享连接。 Wi-Fi通常更快,默认选择。

  4. (可选) 展开 属性 部分,然后选择编辑 并输入新的网络名称、密码和网络带。 选择保存

  5. 打开移动热点 设置页顶部的移动热点切换。

    注意: 如果你的电脑具有手机网络,则可以远程打开移动热点。 若要允许 Windows 电脑打开移动热点,这两个设备都必须具有蓝牙并已配对。

  6. 若要在其他设备上进行连接,请转到该设备的 WLAN 设置、查找并选择网络名称、输入密码,然后进行连接。

快速启动移动热点

如果每次启动电脑都进行一遍上述设置,实在太过麻烦。对于Win11, 在右下角可以找到移动热点按钮,启动电脑,连接校园网然后点击右下角网络图标,再点击移动热点就可以快速启动无线wifi快速上网了。

win10在通知面板预设了移动热点按钮,但win11的快速启用面板默认没有。在快速启用面板点击右下角铅笔按钮(如图),添加移动热点即可。

添加移动热点

阻止无设备连接热点时自动关闭

设置移动热点小节,移动热点选项卡,会看到一个节能选项,默认是开启的,点击右侧按钮关闭它即可。

MacOS与Linux

MacOS与Linux简史

macOS 和 Linux 的主要部分是内核、核心实用程序、GUI 或桌面环境以及应用程序。

macOS 基于名为 Darwin 的开源 BSD Unix 内核。 macOS 的其他部分(例如 GUI 和核心应用程序)是闭源且专有的。 Apple 构建并维护这些软件系统,它们作为 Mac 设备的一部分提供。

Apple 在 2000 年代初将 Unix 引入了 macOS。在此之前,macOS 基于非 Unix 操作系统。

另一方面,Linux 最初是 Linus Torvalds 于 90 年代初作为个人项目和 Unix 操作系统的克隆版本。严格来说,Linux只是内核。操作系统本身由 GNU 实用程序等核心部分和 GNOME、KDE 等桌面环境组成。

开源软件与专有软件

Linux 和 macOS 都大量使用开源软件,但虽然 Linux 发行版完全开源,但 macOS 的部分内容是闭源且专有的。

从开源内核到核心 GNU 实用程序和 GUI 环境,Linux 是自由和开源软件的缩影。您可以根据自己的喜好自由修改和重新打包整个操作系统。您甚至可以将其商业化并从中赚钱,就像红帽企业 Linux 的情况一样。

在大多数情况下,Linux 的许可条款要求您所做的修改也向社区公开。

对于 macOS,主要是内核是开源的。桌面和应用程序等其他部分不是开源的。当然,Apple 的其他组件(例如 Swift 编程语言)也是开源的。

与可以在您选择的任何硬件上使用的 Linux 不同,macOS 旨在在 Mac 设备上使用。当您从 Apple 购买 PC 时,您需要为软件和硬件付费。

软件管理

Linux 长期以来一直采用中央软件存储库的概念,用户可以使用命令行或图形工具轻松下载和安装应用程序。

大多数 Linux 发行版都附带软件包管理器,例如基于 Debian 的发行版上的 APT、Fedora 和 Red Hat Enterprise Linux 上的 DNF 或 Yum,以及基于 Arch 的发行版上的 Pacman。使用包管理器,您可以在 PC 上轻松安装、删除、更新和管理软件应用程序。

在 macOS 上安装应用程序的传统方法是通过应用程序文件夹。您从互联网下载要安装的应用程序,然后将其拖到应用程序文件夹中,macOS 将处理剩下的事情。

另一个更新的选项是使用 Mac App Store 安装软件应用程序。

您还可以使用 Homebrew,这是一个包管理器,它在 macOS 上的工作方式与 APT 等 Linux 包管理器非常相似。 Homebrew 也可以在 Linux 上运行。

终端

Linux 的真正威力在于终端或命令行。 macOS 有一个类似的终端模拟器,但大部分注意力都集中在精美的 Mac 桌面上。

该终端允许您以高效、轻松的方式与您的 PC 和软件资源进行交互。此外,它还可以让您轻松自动化和安排任务。运行 Linux 的软件工程师、高级用户和系统管理员在他们的工作流程中大量使用终端。

大多数 Linux 发行版使用 Bash (GNU Bourne Again Shell) 作为终端的默认 shell。 2019 年,Apple 将 Bash shell 替换为 Zsh(Z shell)。 Z shell 是高度可定制的,并且与 Bash、ksh 和 tcsh 有许多相似之处。

由于 Linux 和 macOS 主要使用类似的 shell,因此您在 Linux PC 上运行的核心命令也可以在 Mac 上运行,反之亦然。

终端命令大部分相似

macOS 终端命令和 Linux 的命令有很多是相似的,因为 macOS 是基于 UNIX 的操作系统。这意味着大部分的常用终端命令在 macOS 和 Linux 上可以通用。

  • ls:查看文件和目录的列表
  • cd:改变当前工作目录
  • mkdir:创建新目录
  • rm:删除文件和目录
  • cp:复制文件和目录
  • mv:移动文件和目录
  • cat:查看文件内容
  • grep:在文件中搜索匹配的文本
  • chmod:修改文件权限
  • chown:修改文件所有者
  • cat: 查看文件内容
  • vi/vim/neovim: 编辑文件
  • netstat: 查看网络连接状态
  • ifconfig: 查看网络配置
  • ps: 查看正在运行的程序
  • kill: 杀死进程

终端命令的不同之处

  • 安装软件包管理器:在 Linux 上,常用的软件包管理器是 apt、yum 和 dnf,而 macOS 使用的是 Homebrew 或 MacPorts
  • 文件树结构:macOS 使用的文件树结构与 Linux 不完全相同,导致一些目录的路径和名称略有不同
  • 网络工具:一些网络工具命令在两个系统上有所不同,例如,macOS 使用 ifconfig 命令而 Linux 使用 ip 命令来配置网络接口
  • 系统服务管理:在 Linux 上,使用 systemctl 命令来管理系统服务,而在 macOS 上使用 launchctl 命令
  • 打包和解压缩文件:在 Linux 上,常用的打包和解压缩命令是 tar 和 gzip,而在 macOS 上常用的是 tar 和 unzip
  • 查看系统信息:macOS 使用 system_profiler 命令,Linux 使用 uname 命令
  • 查看网络配置:macOS 使用 ifconfig 命令,Linux 使用 ifconfigip 命令

桌面环境

在 Linux 的早期,基于内核的操作系统没有附带 GUI,大多数 Linux 服务器仍然没有。您必须通过终端与操作系统交互。随着时间的推移,桌面环境的发展是为了帮助用户以更直观和友好的方式与操作系统交互,以便操作系统能够满足高级和非技术用户的需求。

与 Linux 的所有事物一样,您可以选择多种桌面环境,所有这些环境都为您提供了与系统交互的独特方式。一些著名的桌面环境包括 GNOME、XFCE、KDE、Deepin 等。您可以在 Linux 上自由安装多个桌面环境,但是一次只能使用一个。

macOS 上的 GUI 是标准的,对于所有用户来说都是相同的。除了更改壁纸、主题和类似的调整之外,您无法选择安装另一个桌面管理器来改变 macOS 的外观和感觉。

多重分布

在 Linux 上,发行版或发行版是一种特定类型的 Linux,附带一组特定的应用程序、桌面环境和系统实用程序。不同的发行版通常针对一组特定的用户,例如道德黑客、艺术家、程序员、软件开发人员等。

实际上有数千种 Linux 发行版可供您根据您的工作流程进行选择。例如,基于 Debian 的 Kali Linux 发行版主要用于道德黑客攻击和渗透测试。它配备了大量适合道德黑客的工具和实用程序。

Arch Linux 是轻量级 Linux 发行版的另一个例子,它配备了最少的工具。它被喜欢从头开始定制操作系统的 Linux 爱好者和极客广泛使用。

另一方面,有了 macOS,每个人都可以获得相同类型的操作系统,无论他们的热情或工作是什么。这是因为苹果是唯一开发和控制操作系统的公司。对于苹果来说,维持单一操作系统的多个变体将会适得其反。

Linux 发行版之所以如此之多,归根结底是因为 Linux 内核及其核心组件都是开源的。这使得用户可以轻松创建针对特定受众的新 Linux 风格。

参考文章

问题描述

ubuntu是大多数人步入Linux世界的入门级系统,其易用性使得多数对系统配置不高的人容易接受这一系统。在我使用Linux的早期,也是使用了一段时间的ubuntu, 但是直到有一天,它经常出现,不得不让早期的我认为它不友好,于是转入Debian.它的错误对话框如下:

Ubuntu提示出现了内部错误

原因分析

Ubuntu桌面版预装了Apport,它是一个错误收集系统,会收集软件崩溃、未处理异常和其他,包括程序bug,并为调试目的生成崩溃报告。当一个应用程序崩溃或者出现Bug时候,Apport就会通过弹窗警告用户并且询问用户是否提交崩溃报告:

1
2
3
4
5
6
“Sorry, the application XXXX has closed unexpectedly.”   
“对不起,应用程序XXXX意外关闭了。” 
“Sorry, Ubuntu XX.XX has experienced an internal error.” 
“对不起,Ubuntu XX.XX 发生了一个内部错误。” 
“System program problem detected.” 
“检测到系统程序问题。”

实际情况并不是Ubuntu容易出现内部错误,而是一旦程序崩溃过一次,就会生成一个.crash文件,记录着崩溃信息,这些崩溃信息保存在目录: /var/crash/

只要你不去处理,每次开机都会提示你有错误。也就是说:报错并不一定是出现了什么错误,而是曾经出现过错误,而你没有处理。通常情况下,到/var/crash/目录查看崩溃文件,如果不是什么大问题(通常都没什么大问题),删除该目录下的崩溃文件,之后就不会再报错误了.。

解决方案

永久关闭Apport错误报告

修改Apport配置文件/etc/default/apport

/etc/default/apport
1
enabled=0

重启你的Ubuntu系统,Apport将会自动关闭 

完全移除Apport

1
sudo apt-get purge apport

编写Shell脚本的过程中,使用常用的图标符号增加美观的同时也增强了易用性, 比如使用软盘符💾、个人电脑符💻 等。 本文总结在Shell脚本中显示Unicode符号的方法:

查询 Unicode 编码

使用 echo 命令

例如查询到💾的Unicode编码为U+1F4BE, 则使用echo应当开启-e选项,即:

1
echo -e "\u0001F4BE"

使用 printf 命令

同样输出💾,使用printf命令为:

1
printf "\u0001F4BE"

使用 Python 脚本

1
print(u"\U0001F4BE")

使用 Perl 脚本

1
print "\x{1F4BE}\n" ;

在 Html 中使用 Unicode

Html中使用Unicode应当使用其专用的格式,例如https://www.unicodery.com/会直接给出。输出💾的源码为💾.

AttributeError: partially initialized module 'pandas' has no attribute 'DataFrame' (most likely due to a circular import)

PandasPython 语言的一个扩展程序库,用于数据分析。但是今天在使用pandas导出数据时,发现它报错了:

1
AttributeError: partially initialized module 'pandas' has no attribute 'DataFrame' (most likely due to a circular import)

经过研究发现它是由于我把同目录下的另一个测试程序改名为pandas.py导致的,然后修改了那个程序后,问题解决。

参考文章

控件简介

Veusz绘图,其将图像的各个部分称为widget(控件),对于每一个控件又分为Properties(属性)和Formatting(格式)在左侧边栏显示。如下图所示:

Widget、Properties and Formatting

在上图中,可以看到有pagegraph1axis(x 和 y 轴各一个)、colorbarimage一共六个组件. 它就像PhotoShop一样,将不同的组件放置于不同的, 当它们之前相互无遮挡时就可以从图上同时看到了。如果某一控件被遮蔽,则按住左边对应的控件,上下移动可以调整其层次,也可以通过右键来设置。

Colorbar 控件设置

  • 点击工具栏中的Colorbar按扭添加Colorbar控件:
添加Colorbar控件
  • 点击左侧Colorbar控件→Properties对话框,在Widget右侧的小箭头选择image1, 如果有多个图片则可以选择某一个image然后此Colorbar就对应显示该图片的Colorbar.
  • Properties中选择Direction可以设置Colorbar方向为水平horizontal还是垂直vertical方向,其中Axis设置数值标尺相对于Colorbar的位置。其中0对应于Colorbar的左侧,1对应于Colorbar的右侧,0.5就位于中央。
  • Formatting对话框中,选中Reflect则数值标尺变成在坚线的左侧,不选中默认在坚线的右侧。
  • Formatting对话框中,可以设置Horz posn (水平位置)和 Vert posn(垂直位置), 由于一般默认情况leftcenter,right会覆盖于图片上,所以选择manual手工设置,然后在对话框最下面找到Horz manual设置为1.05就会在图片的右侧呈现Colorbar.
  • 按上述设置,配置好Colorbar后,最终得到下图
Mandelbrot集

今天实现了使用Python绘图并保存为csv数据格式,然后将csv导入到veusz绘图。导出数据并单独绘图的意义在于,比如说使用蒙特卡洛方法处理数据然后得到一些二维图形,由于它包括了随机数据,同时还需要保证所得图像可以再编辑。这遇到了两个问题,如果每次都使用程序重新生成图像,由于随机数据所以不能保证每次数据都严格一致。同时,不同的期刊对图片格式有不同的要求,所以就需要图片可以再编辑,这种编辑不是Photo式的编辑,它需要确保清晰度,根据要求生成完全相同的图片,所以必须有数据保存下来,每次都使用绘图软件来处理数据才能得到一致的结果。

Python 生成Mandelbrot 集并保存为 csv文件

mandelbrot to csv
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
34
#! /usr/bin/env python3
# vim:fenc=utf-8
#
import numpy as np
import matplotlib.pyplot as plot
from pylab import *
import pandas as pd

x0=0 #初始值z0的x0
y0=0 #初始值z0的y0
zoom=1.0 #放大倍率
N=100 #最大迭代次数
R=2 #迭代半径
a=4.0 #绘制图的横轴大小
b=3.0 #绘制图的纵轴大小
step=0.005 #绘制点的步长

def iterate(c,N,R):
z=c
for i in range(N):
if abs(z)>R:
return i
z = z*z+c
return N

x=np.arange(-a/(2.0*zoom)+x0,a/(2.0*zoom)+x0,step)
y=np.arange(b/(2.0*zoom)+y0,-b/(2.0*zoom)+y0,-step)
cx,cy=np.meshgrid(x, y)
c = cx + cy*1j
ufunc=np.frompyfunc(iterate,3,1)
z=ufunc(c,N,R).astype(np.float64)

z = pd.DataFrame(z)
z.to_csv('test.csv')

Veusz 导入 csv 数据并绘图

  • 启动veuszDataImport...Browse...找到刚刚生成的test.csv,→2D 来到对话框:
2D数据导入对话框
  • 点击右下角import,成功导入数据。在软件右侧可以看到
2D数据成功导入
  • 软件左侧,点击graph1,在工具栏中点击image图标,如图
点击image图标
  • FileExport...,弹出导出对话框,保存为png图像:
Mandelbrot集

参考资料

近期在研究使用Python绘图,但是veusz官方网站上给出的例子好多都是Python2格式. 如果代码量比较少,则按照Python2.x与Python3.x版本区别一点一点的修改即可, 但是如果代码量比较大,那这一点一点的修改显然效率太低了。好在,Python3内置了一个转换工具2to3, 可以方便的完成从Python2.xPython3.x的转换工作。

2to3 简介

2to3 是一个 Python 程序,它可以用来读取 Python 2.x 版本的代码,并使用一系列的 修复器 来将其转换为合法的 Python 3.x 代码。标准库中已经包含了丰富的修复器,这足以处理绝大多数代码。不过 2to3 的支持库 lib2to3 是一个很灵活通用的库,所以你也可以为 2to3 编写你自己的修复器。lib2to3 也可以用在那些需要自动处理 Python 代码的应用中。

使用方法

2to3 的基本调用参数是一个需要转换的文件或目录列表。对于目录,会递归地寻找其中的 Python 源码。例如,一个Python2.x的源文件为:

python2.x:example.py
1
2
3
4
5
def greet(name):
print "Hello, {0}!".format(name)
print "What's your name?"
name = raw_input()
greet(name)

它可以在命令行中使用 2to3 转换成 Python 3.x 版本的代码:

1
2to3 example.py

这个命令会打印出和源文件的区别。通过传入 -w 参数,2to3 也可以把需要的修改写回到原文件中(除非传入了 -n 参数,否则会为原始文件创建一个副本):

1
2to3 -w example.py

转换完成后,example.py 看起来像是这样:

python3.x:example.py
1
2
3
4
5
def greet(name):
print("Hello, {0}!".format(name))
print("What's your name?")
name = input()
greet(name)

注释和缩进都会在转换过程中保持不变。默认情况下,2to3 会执行 预定义修复器 的集合。使用 -l 参数可以列出所有可用的修复器。使用 -f 参数可以明确指定需要使用的修复器集合。而使用 -x 参数则可以明确指定不使用的修复器。下面的例子会只使用 imports 和 has_key 修复器运行:

1
2to3 -f imports -f has_key example.py

这个命令会执行除了 apply 之外的所有修复器:

1
2to3 -x apply example.py

有一些修复器是需要 显式指定 的,它们默认不会执行,必须在命令行中列出才会执行。比如下面的例子,除了默认的修复器以外,还会执行 idioms 修复器:

1
2to3 -f all -f idioms example.py

注意这里使用 all 来启用所有默认的修复器。

--add-suffix 选项接受一个字符串,用来作为后缀附加在输出文件名后面的后面。由于写入的文件名与原始文件不同,所以没有必要创建副本,因此 -n 选项也是必要的。举个例子:

1
2to3 -n -W --add-suffix=3 example.py

这样会把转换后的文件写入 example.py3 文件。将整个项目从一个目录转换到另一个目录可以用这样的命令:

1
2to3 --output-dir=python3-version/mycode -W -n python2-version/mycode

参考文章