企业版WPS 官方直接下载

直接官方下载,用提供的序号激活之后就是正版
https://ep.wps.cn/download

另外附上两个52POJIE论坛里大佬提供的序列号两枚:
694BF-YUDBG-EAR69-BPRGB-ATQXH(永久)
FLHAP-TEUGA-9MA3A-3TY3Q-V9EPD(821天)(@mlrx59483639 测试)

发表在 日常 | 留下评论

老毛子出现bogon

控制台输入networkmap 就行了

发表在 日常 | 留下评论

理解 Go 语言中的方法和接收者

0x01 前言

Go 语言的语法实在有些不一样,与其它面向对象语言相比,Go 的方法似乎有些晦涩。

0x02 方法的定义

在 Go 语言里,方法和函数只差了一个,那就是方法在 func 和标识符之间多了一个参数。

type user struct {
        name  string,
        email string,
}

//这是函数的定义
func notify(email string) {
        fmt.Println("Email is %s", email)
}

//这是方法的定义
func (u user) notify(email string) {
        fmt.Println("Email is %d", email)
}

我们可以看到,方法是在 func 和 notify 之间多了一个 user 类型的参数 u,这个 u 就称作接收者。

0x03 接收者

接收者有两种,一种是值接收者,一种是指针接收者。顾名思义,值接收者,是接收者的类型是一个值,是一个副本,方法内部无法对其真正的接收者做更改;指针接收者,接收者的类型是一个指针,是接收者的引用,对这个引用的修改之间影响真正的接收者。像上面一样定义方法,将 user 改成 *user 就是指针接收者。

接收者与对象

相信有很多人看到这个接收者之后都很苦恼,到底这个接收者是什么,是干什么用的。我们在学习一门新的语言的时候,都讲究触类旁通,和我们已经了解的语言作对比。那么我们就通过拿 Go 和其它带有类的面向对象的语言做对比来搞清楚接收者是什么。这里我们用 php 来举例子。

在 php 中,我们要定义一个方法,首先是要定义一个类。

class User
{
    private $email;
    private $name;

    public function __construct($email, $name)
    {
        $this->email = $email;
        $this->name = $name;
    }
    public function notify()
    {
        echo "Email is { $this->email}.\n";
    }

    public function changeEmail($email)
    {
        $this->email = $email;
    }
}

然后再实例化一个对象,进行操作,像这样。

$user = new User('daryl@example', 'dary1');
$user->changeEmail('[email protected]');
$user->notify();

接下来,我们参照着来写一下 Go 的方法定义。

首先,我们是先要定义一个类型,比如就是 user 好了,然后我们再定义方法。

type user struct {
	name string
	email string
}

func (u user) notify() {
	fmt.Printf("Email is %s", u.email)
}

func (u *user) changeEmail(email string) {
	u.email = email
}

我们定义了两个方法,一个是 notify,它是值接收者方法;还有一个是 changeEmail,它是指针接收者方法。可以看到,值接收者方法,接收者是一个副本,无法修改;指针接收者是引用,可以修改。

我们再来看一下调用。

func main()  {
	daryl := user{"daryl", "[email protected]"}
	daryl.changeEmail("[email protected]")
	daryl.notify()
}

看看,是不是很熟悉!对,就像我们刚刚写过的 php 代码一样,有没有!daryl 就是对象,name 和 email 就是属性,notify 和 changeEmail 就是它的方法。只是,不同的是,我们没有将它放到 class 中,而是用另外一种方式让它们结合了,有了关系!

关于值接收者和指针接收者,其实 Go 在编译的时候有一个隐式转换,将其转换为正确的接收者类型。就像下面这样。

//daryl.changeEmail("[email protected]")
(&daryl).changeEmail("[email protected]")

wife := &daryl
//wife.notify()
(*wife).notify()

0x04 后记

最近在学习 Go 语言,看到有很多人评价 Go 的语法很丑陋,这一点确实不可否认。但是,它的语法有很简单,对于熟悉 C 的人、熟悉含有类的面向对象的语言的人,稍加对比,就能发现其很多相似之处。

上面的都是我自己的拙见,如有错误或者不对的地方,非常欢迎指出!人生总是要不断地去学习嘛~

发表在 日常 | 留下评论

解决WINDOWS网速慢的几个参数,尤其是油管,效果明显

WIN7旗舰版,辽宁联通百兆,用了毛子的3元小机,前几日访问油管connection speed一直在2000K上下,换一台电脑马上速度飙到几万,另外也有MJJ提醒跟本地网络有关。经过1天多的各种尝试,终于找到解决方案,就是调节了TCP 全局参数 ,现在的速度已经到56000K左右。现提供方法给大家参考。

管理员运行CMD,运行netsh int tcp show global

TCP 全局参数
-------------------------------
接收方缩放状态                      : enabled
烟囱卸载状态                        : automatic
NetDMA 状态                         : enabled
直接缓存访问(DCA)                   : disabled
接收窗口自动调协级别                : disabled
附加拥塞控制提供程序                : none
ECN 能力                            : disabled
RFC 1323 时间戳                     : disabled
初始 RTO                            : 3000
非 Sack Rtt 复原                    : disabled
最大 SYN 重新传输                   : 2

以上是我原来的参数

我修改了以下几项,解决了网速慢的问题,命令都是在CMD中输入,然后重启。

直接缓存访问(DCA):netsh int tcp set global dca=enabled
接收窗口自动调谐级别:netsh int tcp set global autotuninglevel=normal
附加拥塞控制提供程序 netsh interface tcp set global congestionprovider=ctcp
RFC 1323 时间戳:netsh int tcp set global timestamps=enabled

参考以下文章:
1,https://blog.51cto.com/1873281/747362
2,https://chl.la/2016/05/27/
3,https://home.gamer.com.tw/creationDetail.php?sn=3507413

https://www.hostloc.com/thread-581548-1-1.html

发表在 日常 | 留下评论

黑苹果与Windows系统时间不同步的解决办法

通常我们会添加系统时间补丁来解决这个问题,但是我们也可以通过简单的命令修改Windows 对硬件时间的对待方式来解决这个问题, 让 Windows 把硬件时间当作 UTC时间。

window7用户开始->运行->输入CMD

window8/10用户 WIN+x 选择管理员模式进入CMD

执行以下命令:

  1. Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

这样就不用添加系统时间补丁。

发表在 日常 | 留下评论

使用docker使mysql容器映射到本地

如果你希望你的数据库在容器执行过程中保持持久性,请执行以下命令

# 创建数据存储目录 和配置文件目录

mkdir -p /home/mysql/data

# 分别赋予读写权限

chmod +766 /home/mysql/data

docker run -d -e MYSQL_ROOT_PASSWORD=root --name mysql5 -v /home/mysql/data :/var/lib/mysql -p 3302:3306 mysql:5.6

mysql -uroot -P 3302 -h 127.0.0.1 -p

发表在 日常 | 留下评论

解决wordpress首页文章内容截断处理的几种方法

add_filter('the_content','substr_content');function substr_content($content){if(!is_singular()){$content=mb_strimwidth(strip_tags($content),0,200);}return$content;}
发表在 日常 | 留下评论

Docker创建redis容器

1.拉取redis镜像:

docker pull redis

2.创建容器:

docker run -d --restart=always --name redis -p 6378:6379 redis --requirepass "123456"
  • -d           后台进行
  • --retsart=always 自动重启
  • -v /data:/data 宿主机/data目录挂载到容器/data目录
  • --name        容器名设置为myredis
  • -p          映射端口号
  • --requirepass “123456” 设置密码123456

3.下载redis桌面可视化工具连接测试:

https://github.com/qishibo/AnotherRedisDesktopManager/

发表在 日常 | 留下评论

docker ssr

拉取镜像

docker pull teddysun/shadowsocks-r


或者拉取基于 python:3.6-alpine 镜像制作的

docker pull teddysun/shadowsocks-r:alpine 

创建 config 文件

比如在目录 /etc/shadowsocks-r 下创建 config.json,完整路径也就是 /etc/shadowsocks-r/config.json
范例内容如下:

{
     "server":"0.0.0.0",
     "server_ipv6":"::",
     "server_port":9000,
     "forbidden_port": "25",
     "local_address":"127.0.0.1",
     "local_port":1080,
     "password":"123wc@",
     "timeout":120,
     "method":"rc4-md5",
     "protocol":"auth_aes128_sha1",
     "protocol_param":"",
     "obfs":"http_simple_compatible",
     "obfs_param":"",
     "redirect":"",
     "dns_ipv6":false,
     "fast_open":true,
     "workers":1
 } 


ShadowsocksR 协议插件文档的含义,可以参考这个链接

启动容器

在上面这个范例里,定义的端口是 9000,那么在启动容器时就需要将 9000 端口映射到宿主机的对外端口上。
启动命令:

docker run -d -p 15599:9000 -p 15599:9000/udp --name ssr -v /root/ssr:/etc/shadowsocks-r xctcc/ssr
{
"server":"0.0.0.0",
"server_ipv6":"::",
"server_port":9000,
"forbidden_port": "25",
"local_address":"127.0.0.1",
"local_port":1080,
"password":"123wc@",
"timeout":120,
"method":"rc4-md5",
"protocol":"auth_aes128_sha1",
"protocol_param":"",
"obfs":"http_simple_compatible",
"obfs_param":"",
"redirect":"",
"dns_ipv6":false,
"fast_open":true,
"workers":1
}
docker run -d -p 9000:9000 -p 9000:9000/udp --name ssr -v /etc/shadowsocks-r:/etc/shadowsocks-r teddysun/shadowsocks-r 


启动 Tag 为 alpine 的镜像命令:

docker run -d -p 9000:9000 -p 9000:9000/udp --name ssr -v /etc/shadowsocks-r:/etc/shadowsocks-r teddysun/shadowsocks-r:alpine 


注意:此处仅作为演示,不能同时执行上面的这两个启动命令,因为端口都是 9000,产生冲突了。一般我是推荐选 Tag 为 alpine 的镜像的,因为文件的体积会相对比较小。

发表在 日常 | 留下评论

mysql docker

 docker pull mysql:5.6
 docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql 

–name:给新创建的容器命名,此处命名为mysqlserver
-e:配置信息,此处配置mysql的root用户的登陆密码
-p:端口映射,表示在这个容器中使用3306端口(第二个)映射到本机的端口号也为3306(第一个)
-d:成功启动容器后输出容器的完整ID
最后一个mysql指的是mysql镜像名字
到这里我们查看容器运行状态:

 docker exec -it  mysql /bin/bash 

docker exec :在运行的容器中执行命令
语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
OPTIONS说明:
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端

mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password. 我用的第二种方式:
操作如下:

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则 ,'password'改成你的密码 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码 ,'password'是你的密码 
FLUSH PRIVILEGES; #刷新权限 

修改MySQL配置文件有两种方法:
一是进入容器,修改容器里的MySQL的配置文件,然后重新启动容器,例如:


docker exec -it mysqlserver /usr/bin/bash


作者:feipeng8848

出处:https://www.cnblogs.com/feipeng8848/p/10470655.html

版权:本站使用「署名 4.0 国际」创作共享协议,转载请在文章明显位置注明作者及出处。

发表在 日常 | 留下评论