SQL中MAX函数与Group By获取同一字段重复的数据最大的一条

SQLMAX函数与Group By一起使用,获取同一字段重复的数据只取记录最大的一条,如下:

如果想找到每个clz里面的最大的age,则需要使用Group By和Max

如下的SQL语句,则输出结果有错误:

虽然找到的age是最大的age,但是与之匹配的用户信息却不是真实的信息,而是Group By分组后的第一条记录的基本信息。

如果我使用以下的语句进行查找,则可以返回真实的结果。

参考链接


resize2fs:Memory alloction failed while trying to resize

最近入手一块 12T 的西数红盘,打算安装到 WD MyCloud Gen1 上,从 4TB 版本升级到 12TB 版本,作为 TimeMachine 来用。

使用 拯救死翘翘了的WD MyCloud 方式恢复镜像之后,最后一步执行

结果报告如下错误:

这个原因网上查询了很久,基本上断定是 e2fsprogs 1.42.5 的 BUG,这个问题在  e2fsprogs 1.42.9 版本修复。修复内容参考代码下的 debian/changelog

关键日志如下:

编译过程参考 How to successfully build packages for WD My Cloud from source 中对于 e2fsprogs 1.42.13 的编译。

参考链接


error: cannot find symbol import android.support.v7.widget.ListViewCompat;

项目中,当com.android.support:appcompat-v7升级到28之后,出现如下错误

这个原因是由于com.android.support:appcompat-v7升级到28之后

已经不包含 android.support.v7.widget.ListViewCompat;这个类了。

我们要么使用android.support.v4.widget.ListViewCompat;替代,要么直接使用android.widget.ListView

目前的解决方法是直接使用android.widget.ListView

参考链接


向量与矩阵相乘

最近在看"程序员的数学"系列的"线性代数"部分,当阅读向量矩阵乘法的时候,感觉各种别扭。以前学习的时候,简单的把向量乘以矩阵简化理解成矩阵乘以一维矩阵,然后交换位置进行矩阵乘法。也就是 n 维向量乘以 m*n 矩阵,变成m*n 矩阵乘以 n*1 维矩阵。以后一直是这么计算的。

这么理解计算结果是正确的,但是却不利于理解矩阵的映射特性,矩阵就是映射 这句话怎么都理解不对了!!

书本中一直说向量是竖排的,类似这样 $\begin{bmatrix} v1\\\ v2\\\ v3\\\ v4 \end{bmatrix}$。

并且说 n 维向量乘以 m*n 矩阵,得到 m 维向量。这个各种不理解,把列向量理解成了列矩阵,因此这个乘法各种不理解,不符合矩阵的运算规则。这么多年过去了,基础知识都理解的不正确,呵呵!! 

其实,书上 1.16部分已经解释过,列向量计算的时候,要放倒,变成 $\begin{bmatrix} v1& v2& v3& v4 \end{bmatrix}$ 的样子,再参与计算。计算结果再切换成$\begin{bmatrix} v1\\\ v2\\\ v3\\\ v4 \end{bmatrix}$的列向量的样子,这样就可以完整的理解整个映射过程了。

继续阅读向量与矩阵相乘

加快Android Studio 3.6.3的编译速度

1. 加大给Android Studio 3.6.3分配的内存

打开Android Studio的安装目录,找到虚拟机的配置文件,进行修改,如下:

Windows
编辑安装目录下的bin\studio64.exe.vmoptions

macOS Catalina(10.15.4)

继续阅读加快Android Studio 3.6.3的编译速度

macOS Catalina(10.15.4)安装应用提示 '无法打开"XXXX",因为无法验证开发者' 的解决方法

macOS Catalina(10.15.4) 使用HomeBrew安装SageMath

启动的时候提示如下:

继续阅读macOS Catalina(10.15.4)安装应用提示 '无法打开"XXXX",因为无法验证开发者' 的解决方法

macOS Catalina(10.15.4)下RsaCtfTool的安装及使用

在CTF比赛中,往往会涉及到RSA解密类的题目,有了这个工具(基于python3.x)做起来就得心应手了。

这个也可以作为安全工具来使用,检查密钥的安全性。

RSA简介

为了方便理解,先对RSA密钥体制做个简略的介绍。

  1. 选择两个大的参数,计算出模数 N = p * q
  2. 计算欧拉函数 φ = (p-1) * (q-1),然后选择一个e(1<e<φ),并且e和φ互质(互质:公约数只有1的两个整数)
  3. 取e的模反数d,计算方法为:e * d ≡ 1 (mod φ) (模反元素:如果两个正整数e和n互质,那么一定可以找到整数d,使得 e * d - 1 被n整除,或者说e * d被n除的余数是1。这时,d就叫做e的“模反元素”。欧拉定理可以用来证明模反元素必然存在。两个整数a,b,它们除以整数M所得的余数相等:a ≡ b(mod m),比如说5除3余数为2,11除3余数也为2,于是可写成11 ≡ 5(mod 3)。)
  4. 对明文m进行加密:c = pow(m, e, N),可以得到密文c。
  5. 对密文c进行解密:m = pow(c, d, N),可以得到明文m。
整理:

pq:两个大的质数,是另一个参数N的的两个因子。
N:大整数,可以称之为模数
ed:互为无反数的两个指数
cm:密文和明文
(N, e):公钥
(N, d):私钥
pow(x, y, z):效果等效pow(x, y)% z, 先计算xy次方,如果存在另一个参数z,需要再对结果进行取模。
密钥长度:n以二进制表示的的位数,例如密钥长度为512代表n用二进制表示的长度为512bit

RSA安全性分析

对于RSA加密算法,公钥(N, e)为公钥,可以任意公开,破解RSA最直接(亦或是暴力)的方法就是分解整数N,然后计算欧拉函数φ(n)=(p-1) * (q-1),再通过d * e ≡ 1 mod φ(N),即可计算出 d,然后就可以使用私钥(N, d)通过m = pow(c,d,N)解密明文。

保障RSA的安全性

1. 定期更换密钥
2. 不同的用户不可以使用相同的模数N
3. p与q的差值要大,最好是差几个比特
4. p-1与q-1都应该有大的素因子,一般建议选择的两个大素数p、q使得p=2p+1和q=2q+1也是素数
5. e的选择不要太小
6. d的选择也是不可以太小,最好满足d>=n的4分之1

参考链接


Android Studio 3.6.3/4.0/4.1/4.2配置Robolectric-3.8/4.3.1/4.5.1/4.6.1 Powermock-1.6.6单元测试环境

基础配置以及常见错误


目前版本的Android Studio 3.6.3/4.0/4.1/4.2使用Robolectric-3.8/4.3.1/4.5.1/4.6.1,只能配合Powermock-1.6.6,不能高于这个版本PowerMock ,尽管软件源中的版本已经更新升级到2.0.7版本了,但是Robolectric并没有及时更新依赖。尝试过使用最新版本的PowerMock,结果很多莫名的报错。

如果 Windows 系统下出现如下提示,受限于Windows系统路径不能超过260个字符的限制

貌似Windows 10 Build 14352版中已经可以通过修改注册表去除260字符的路径长度限制了。

在项目/.idea/workspace.xml文件中添加一行代码如下

对于使用MultiDex的应用,如果报告如下错误:

需要在build.gradle中引入

例子测试代码:

注意,需要

才能使得配置生效。

如果发生如下错误:

继续阅读Android Studio 3.6.3/4.0/4.1/4.2配置Robolectric-3.8/4.3.1/4.5.1/4.6.1 Powermock-1.6.6单元测试环境

Synology(群晖)常见的配置项以及命令项

Apache2.2 相关配置与常见命令

Apache2.4 相关配置与常见命令

Nginx 相关配置与常见命令

Web Station 相关配置与常见命令

继续阅读Synology(群晖)常见的配置项以及命令项

在macOS Catalina(10.15.4)安装ADB(Android调试桥)

什么是 ADB?

Android调试桥( adb )是一个开发工具,帮助安卓设备和个人计算机之间的通信。 这种通信大多是在USB电缆下进行,但是也支持Wi-Fi连接。 adb 还可被用来与电脑上运行的安卓模拟器交流通信。 adb 对于安卓开发来说就像一把“瑞士军刀”。

通过 Homebrew 安装

测试是否正常安装

手动安装

1、如果你以前安装过,请先删除老的文件

2、下载 android-sdk-macosx

下载地址:developer.android.com

3、将下载的文件解压并移动到 ~/.android-sdk-macosx

4、运行 SDK Manager

5、根据你的需要选择,(我只需要Android SDK Platform-tools)[可选步骤]
6、选好后 Install
7、环境变量设置

8、更新配置文件

9、测试是否正常安装

参考链接


在 MAC OS X 安装 ADB (Android调试桥)