PowerShell Get-FileHash

Get-FileHash
   [-Path] <String[]>
   [[-Algorithm] <String>]
   [<CommonParameters>]
PS D:\Downloads> Get-FileHash .\cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso -Algorithm SHA1 | Format-List   

Algorithm : SHA1
Hash      : 24B59706D5EDED392423936C82BA5A83596B50CC
Path      : D:\Downloads\cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso

支持的算法:
SHA1, SHA256, SHA384, SHA512, MD5。

引用:
Get-FileHash

K2P 路由器刷固件

现在应该已经没有什么货了,还在卖的不是旧就是价格已经不值得买了。写这篇…就当纪念一下吧。

相关链接可以参考一下:

不漏油的路由器不是好矿机——矿渣路由器盘点_值客原创_什么值得买
一个垃圾佬的2019年终总结——盘点这一年好玩的矿渣_值客原创_什么值得买
捡矿渣一时爽,一直捡一直爽——年度矿渣盘点_值客原创_什么值得买

配置应该是 MT7621A,RAM 128M,Flash 16M,全千兆网口,没有 USB 接口。

按照惯例,先刷入 Breed。先到 Boot and Recovery Environment for Embedded Devices (BREED) 准备好 breed-mt7621-phicomm-k2p.bin

由于没有后门开 SSH,对于部分版本的固件,恩山上有个比较简单的方法就是用 phitools 的激活 Telnet 工具(有空再研究下原理好了),也可以用其它方法开启。例如,K2/K2P/K3/K3C 新版固件 Telnet 激活工具 – 斐讯无线路由器以及其它斐迅网络设备 – 恩山无线论坛

开启Telnet之后,将事先准备好的Breed传入。先md5sum验证bin文件是否损坏。然后刷入。

root@K2P:/tmp# md5sum breed-mt7621-phicomm-k2p.bin
root@K2P:/tmp# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 01000000 00010000 "ALL"
mtd1: 00030000 00010000 "Bootloader"
mtd2: 00010000 00010000 "Config"
mtd3: 00010000 00010000 "Factory"
mtd4: 00050000 00010000 "permanent_config"
mtd5: 00f60000 00010000 "firmware"
mtd6: 00c48b96 00010000 "rootfs"
mtd7: 00200000 00010000 "rootfs_data"
root@K2P:/tmp# mtd -r write /tmp/breed-mt7621-phicomm-k2p.bin Bootloader

静待重启。重启后应该能正常进系统。直插 LAN1 接口,按住 RESET(别急着放开,建议拿个东西垫着不然可能有点痛),插上电源线。此时访问 192.168.1.1 应该能进入 Breed Web 控制台。

同样,备份->恢复出厂设置->更新固件即可。

Newifi3 路由器刷固件

通常称为新路由3,CPU 是 MT7621A,内存 512MB,32MB Flash,1 个 USB3.0 口,全千兆网口。经常被拿来和 K2P 比较,新3的无线算是一个比较大的槽点吧,其它应该还好(除了漏油)。

整了一台来学习 OpenWRT。现在好像存货量还很大,价格还不错。

到手先刷入 Breed。这是一个 BootLoader,刷入后,你就能在 Breed 中刷入固件了。这样通常能保证路由器不会变砖,即使刷了错的固件。有关 Breed 的更多信息,可以跳转恩山上 hackpascal 的帖子AR/QCA/MTK Breed,功能强大的多线程 Bootloader – OPENWRT专版 – 恩山无线论坛了解。

备份一个方便自己下载。来源:新路由3 (Newifi D2) 免拆机免解锁刷 Breed 教程 – newifi无线路由器及网络设备 – 恩山无线论坛

为了刷入这个解锁文件,按照上面帖子教程操作即可。主要步骤就是:

  • 开启 SSH,这样就可以在命令行中任意控制路由器了。解锁管理界面后访问http://192.168.99.1/newifi/ifiwen_hss.html(后门?),显示 success 就 OK。
  • 把解压得到的 newifi-d2-jail-break.ko 传到路由器中。你可以有无数种方法来做到这一点,包括但不限于直接 SFTP,启动一个文件服务器(比如 HTTP Server)给路由器下载之类的方法。
  • SSH 中,切换至你刚传入文件的所在文件夹,执行 insmod newifi-d2-jail-break.ko 即可。静待路由器重启。

此时应该准备一份你想要刷入的固件。网线只插入 LAN1,连接电脑,按住 reset(新三建议用取卡针,别急着放开)然后连接电源线。闪灯后不久应该就能在电脑上通过 192.168.1.1 来访问 Breed 的 Web 控制台了。

这个时候可以随意烧写你想要的固件了。备份->恢复出厂设置->更新固件,选择你想要的固件即可。

求矩阵的最大和最小值

时间限制: 1 Sec 内存限制: 128 MB

题目描述

定义一个函数用一级指针接收一个任意行任意列的矩阵并返回该矩阵元素的最大和最小值.

输入

矩阵的行数 矩阵的列数
矩阵各元素的值

输出

最大值
最小值

样例输入

3 3
1 2 3
4 5 6
7 8 9

样例输出

9
1

提示

解决方案

#include <iostream>

void findMinAndMaxValues(int *ptr, int row, int col);

int main() {
    int row, col;
    std::cin >> row >> col;
    int mat[row][col];
    for (int ir = 0; ir < row; ++ir) {
        for (int ic = 0; ic < col; ++ic) {
            std::cin >> mat[ir][ic];
        }
    }
    findMinAndMaxValues(&mat[0][0], row, col);

    return 0;
}

void findMinAndMaxValues(int *ptr, int row, int col) {
    int min = *ptr, max = *ptr;
    for (int ir = 0; ir < row; ++ir) {
        for (int ic = 0; ic < col; ++ic) {
            if (ptr[ir * col + ic] < min) {
                min = ptr[ir * col + ic];
            }
            if (ptr[ir * col + ic] > max) {
                max = ptr[ir * col + ic];
            }
        }
    }
    std::cout << max << std::endl << min << std::endl;
}

Node.js http-server

体验应该要好得多。如果你想把它当作一个简单的控制台上的 HTTP Server,可以先使用 npm 安装:

npm install --global http-server

然后就可以使用了:

http-server [path] [options]

使用 -p--port 来指定端口;使用 -a 来绑定地址;使用 -d 来指定目录。更多选项可以看文档。

你也可以直接:

npx http-server [path] [options]

引用:
http-server – npm
http-party/http-server: a simple zero-configuration command-line http server
The npm Blog — Introducing npx: an npm package runner

Python SimpleHTTPServer

这篇并不是在讨论 Python HTTP servers 的各种用法,而是记录给某些懒人们用的如何启动 SimpleHTTPServer。

正如其名,它只是个简单实现,因为安全等因素,你不应该把它用于生产环境。

如果你正在使用 Python2,那么你应该:

python -m SimpleHTTPServer 8000

如果你正在使用 Python3,那么:

python -m http.server 8000 --bind 127.0.0.1

从 3.4 开始,引入了参数 --bind;从 3.6 开始,参数 --bind 支持 IPv6。

从 3.7 开始,可以使用 --directory 来指定目录。

引用:
SimpleHTTPServer — Simple HTTP request handler
http.server — HTTP servers

CMake 指定源码目录和构建目录

在 CMake 3.13 或更新的版本中,可以使用:

cmake -S . -B build -G "Unix Makefiles"

来指定当前目录为源码目录,构建二进制文件到 build 文件夹中。

对于 CMake 3.13 之前的版本,需要给定没有写在文档中的参数:

cmake -H. -Bbuild -G "Unix Makefiles"

(参数和目录之间没有空格)

引用:
configuration – Getting CMake to build out of source without wrapping scripts – Stack Overflow