Aqara P3 切换连接米家或 Aqara App

现状

早些时候(不太记得了,可能 1 年前左右)购买的 Aqara P3 空调伴侣默认连接的是 Aqara App,新买的却是默认连接米家 App。如果启动的时候,没有注意听语音,在错误的 App 上连接了之后会有各种奇怪的问题。Aqara App 上可能会提示错误代码 1。

解决方案

回去翻说明书(其实我是先在 M1S 的商品详情页看到的),上有写到:

所以应该先连续短按 10 次按钮,然后听到语音后的 10 秒内,再连续短按 2 次按钮,即可完成切换。

已在 Aqara P3,固件版本 3.4.0_0004.0616 上验证通过。

Aqara M1S 商品详情页 FAQ 关于切换 App 的描述:

Aqara P3 商品详情页 FAQ 关于短按 10 次和长按 10 秒的区别的描述:

Lens 安装 kube-state-metrics 超时

使用 Lens 安装 kube-state-metrics 时发现,镜像是从 k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.0.0 拉取的,国内的 TKE 集群拉取会超时。可以直接修改 Deployment 的镜像为:ccr.ccs.tencentyun.com/tkeimages/kube-state-metrics:v2.0.0。

也可以从 k8s-gcrio.azureedge.net/kube-state-metrics/kube-state-metrics:v2.0.0 拉取。

如果只有单节点而且不想修改 Deployment 的话,可以在对应机器上拉取国内镜像,然后使用对应运行时的镜像工具修改镜像 Tag。以 containerd 为例:

crictl pull ccr.ccs.tencentyun.com/tkeimages/kube-state-metrics:v2.0.0
ctr -n k8s.io image tag ccr.ccs.tencentyun.com/tkeimages/kube-state-metrics:v2.0.0 k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.0.0

修改 Kubernetes 默认 StorageClass

今天部署一个应用的时候卡在新建 PVC,看到报错:

Internal error occurred: 2 default StorageClasses were found

编辑那个现在是默认,但是实际上不需要是默认的 sc,把:

storageclass.kubernetes.io/is-default-class

注解改为 false,或直接删除。

引用

https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class/

增加 Kubernetes CoreDNS Hosts 以自定义解析结果

编辑 kube-system 中的 coredns 这个 ConfigMap,可以:

kubectl edit configmap coredns -n kube-system

在 Corefile 的:

.:53 {
  ... ...
}

添加:

hosts {
  127.0.0.1 localhost
  fallthrough
}

如果需要对单个 Pod 级别生效,可以设置 hostAliases。见:

https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/#adding-additional-entries-with-hostaliases

引用

https://stackoverflow.com/a/65283959

https://coredns.io/plugins/hosts/

我还发现了什么好玩的

由于不知道 Corefile 语法高亮应该用啥,于是看到了:

https://coredns.io/2017/07/23/corefile-explained/

修改 WordPress Twenty Fifteen 主题页脚以增加备案号

感觉 Twenty Fifteen(2015)这个主题挺简洁,甚合我意。不过发现这个主题页脚没有提供可视化的设置,于是乎只能在主题编辑器上面看看页脚的源码(footer.php)怎么写的:

<?php
/**
 * The template for displaying the footer
 *
 * Contains the closing of the "site-content" div and all content after.
 *
 * @package WordPress
 * @subpackage Twenty_Fifteen
 * @since Twenty Fifteen 1.0
 */
?>

	</div><!-- .site-content -->

	<footer id="colophon" class="site-footer">
		<div class="site-info">
			<?php
				/**
				 * Fires before the Twenty Fifteen footer text for footer customization.
				 *
				 * @since Twenty Fifteen 1.0
				 */
				do_action( 'twentyfifteen_credits' );
			?>
			<?php
			if ( function_exists( 'the_privacy_policy_link' ) ) {
				the_privacy_policy_link( '', '<span role="separator" aria-hidden="true"></span>' );
			}
			?>
			<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyfifteen' ) ); ?>" class="imprint">
				<?php
				/* translators: %s: WordPress */
				printf( __( 'Proudly powered by %s', 'twentyfifteen' ), 'WordPress' );
				?>
			</a>
		</div><!-- .site-info -->
	</footer><!-- .site-footer -->

</div><!-- .site -->

<?php wp_footer(); ?>

</body>
</html>

注意到第 23 行这里提供了一个钩子可以注入代码,如果在子主题里使用这个方法注入的话,就不需要修改原主题页脚的代码,这样的话代码量小,后期升级兼容性也更好。

那么就新建一个子主题,在 functions.php 这里加载:

add_action( 'twentyfifteen_credits', 'custom_footer_provider' );
function custom_footer_provider() {
	printf( '<a class="imprint" href="%s" target="_blank">%s</a>', 'https://beian.miit.gov.cn/', '粤ICP备XXX号-X' );
}

此时页脚已经可以显示备案号了,不过和原有的“自豪地采用WordPress”文字挤在一起,不太好看。注意到这两个元素其实是在一个 <div class="site-info"></div> 里的,那么只需要在 style.css 里面设置一下 flex 布局:

.site-info {
	display: flex;
	justify-content: space-between;
}

此时两个文字已经贴靠两边显示了。

计算字符串的长度

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

题目描述

计算字符串S的长度,功能与strlen函数相同,但不能调用库函数strlen,否则不给分。输入的字符串不包含空格。

输入

输入测试组数t
对于每组测试,输入字符串S(长度<=30)

输出

对于每组测试,输出S的长度

样例输入

1
hehe

样例输出

4

提示

解决方案

#include <iostream>

int main() {
    int ctrl;
    std::cin >> ctrl;
    while (ctrl--) {
        char str[64] = {};
        std::cin >> str;
        int length = 0;
        while (str[++length] != '\0');
        std::cout << length << std::endl;
    }

    return 0;
}

单词统计

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

题目描述

编写一个程序,根据单词的出现频率降序打印出所输入的的各个单词。每个单词前标有它的计数值。

输入

各个单词,输入0则表示单词结束

输出

降序打印单词出现的频率和单词。单词频度相同,按出现顺序输出。

样例输入

bad
good
bad
cute
how
good
good
0

样例输出

3 good
2 bad
1 cute
1 how

提示

解决方案

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

struct Pair {
    std::string string;
    int count;
    Pair(std::string &string, int count) : string(string), count(count) {}
};
bool operator==(Pair &pair, const std::string &string) {
    return pair.string == string;
}
bool operator<(const Pair &lhs, const Pair &rhs) {
    return lhs.count > rhs.count; // NG
}

int main() {
    std::vector<Pair> vector;
    std::string string;
    std::cin >> string;
    while (string != "0") {
        std::vector<Pair>::iterator it = std::find(vector.begin(), vector.end(), string);
        if (it != vector.end()) {
            it->count += 1;
        } else {
            vector.push_back(Pair(string, 1));
        }
        std::cin >> string;
    }
    std::sort(vector.begin(), vector.end());
    for (int i = 0; i < vector.size(); ++i) {
        std::cout << vector[i].count << ' ' << vector[i].string << std::endl;
    }

    return 0;
}

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