Search For You自己制作的 一个浏览器导航页

说明

最近实在是用腻了国内的一些导航页,edge和chrome的新页标签在我看来不怎么美观,所以就自己动手写了一个。

  • PC和手机端都做了适配(头一次搞,手机端有些不完美)
  • 使用了二次元随即壁纸API
  • 部分内容在B站上学的

内容

如图所示:

Search For You

地址:https://search.cairbin.top

Ubuntu18.04安装运行.Net Core

安装

添加源

1
2
3
4
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget -q https://packages.microsoft.com/config/ubuntu/18.04/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list

安装

1
2
3
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-3.1

运行

  • 在Win下编译好.Net Core相关文件并上传到Ubuntu
  • 输入以下命令运行
    1
    2
    3
    4
    5
    //运行程序但关闭命令行会停止
    dotnet **.dll

    //关闭命令行不会停止
    nohup dotnet **.dll

C++实现服务器与客户端网络通讯

说明

  • 本程序并没有区分服务端与客户端,只是调用函数不同
  • 基于socket网络编程
  • 第一次写,代码格式不怎么规范,请谅解
  • 基于Linux,Win版本目前没写
  • 接下来准备基于本程序搞一个更大的项目

说明:
ClientInfor(); 为客户端使用
ServerInfor(); 为服务端使用
二者不能同时用,因为用了相同的buf变量
通过adjust变量作为函数参数来切换收发消息

原理

此处暂时省略,过段时间会补上

代码

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>
#include<arpa/inet.h>
#include <iostream>


const int MAXLINE = 4096;
const int PORT = 2726;


int sockfd, connfd; //sock句柄和连接句柄
struct sockaddr_in SerAddr;
char buf[MAXLINE];
int size;




using namespace std;

int ServerSockConn()
{
//检查连接并报错
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1)
{
cout << " Socket connect failed:" << errno << endl;
return 0;
}

//储存相关信息,如IP等
memset(&SerAddr, 0, sizeof(SerAddr));
SerAddr.sin_family = AF_INET;
SerAddr.sin_port = htons(PORT);
SerAddr.sin_addr.s_addr = htonl(INADDR_ANY);

//检测绑定并报错
if (bind(sockfd, (struct sockaddr*)&SerAddr, sizeof(SerAddr)) == -1)
{
cout << "Bind socket failed: " << errno << endl;
return 0;
}

//检测监听并报错
if( listen(sockfd, 10) == -1)
{
cout << "Listen socket failed: " << errno << endl;
return 0;
}
}

void GetInfor()
{
recv(connfd, buf, MAXLINE, 0);
cout << buf << endl;
close(connfd);
}

void SendInfor()
{
send(connfd, "Send", 15, 0);
}

//若为真则接收消息,若为假则发送消息
void ServerInfor(bool adj)
{
ServerSockConn();
while(1)
{
if ( (connfd = accept(sockfd, (struct sockaddr*)NULL,NULL)) == -1) //同意请求
{
cout << "Accept socket failed: " << errno << endl;
continue;
}

if (adj == true)
{
GetInfor();
}

else
{
SendInfor();
}
}
close(sockfd);
}



//客户端

int socketfd,n;
char recvline[MAXLINE], sendline[MAXLINE];
struct sockaddr_in CliAddr;


//真收,假发

int ClientInfor(bool adj)
{
socketfd = socket(AF_INET,SOCK_STREAM,0); //建立连接
if (socketfd == -1)
{
cout << "Socket failed:" << errno << endl;
}


CliAddr.sin_family=AF_INET;
CliAddr.sin_port=htons(PORT);
CliAddr.sin_addr.s_addr=inet_addr(""); //引号内为服务器公网IP
bzero(&(CliAddr.sin_zero),8);
if ( connect(socketfd,(struct sockaddr*)&CliAddr,sizeof(struct sockaddr)) == -1 ){
cout << "Connect failed:" << errno << endl;
}
else
{
if (adj == true)
{
recv(socketfd,buf,MAXLINE,0);
cout << buf << endl;
}
else
{
cout << "Please input" << endl;
send(socketfd,"conn",15,0);
close(socketfd);
}
}

}



int main()
{

//修改adjust变量来控制消息收发,为真则默认收,为假则发送
bool adjust = false;
/*
说明:
ClientInfor(); 为客户端使用
ServerInfor(); 为服务端使用
二者不能同时用,因为用了相同的buf变量
通过adjust变量作为函数参数来切换收发
*/


return 0;

}


C++最小二乘计算回归方程

介绍

用来理解一下数学思路和练习一下代码。即兴而写的,所以没写注释。
最小二乘法

代码

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
// #include "Windows.h"

double sum_square_x = 0;
double sum_x = 0;
double sum_y = 0;
double sum_xy = 0;
int n = 0;
double ave_x = 0;
double ave_y = 0;
double b_ba = 0;
double a_ba = 0;

using namespace std;

void InputAndSum()
{
cout << "请输入n的值" << endl;
cin >> n;
cout << " " << endl;
double data_x = 0;
double data_y = 0;
int i = 1;
while (i <= n)
{
cout << "请输入第" << i << "个数据的x值" << endl;
cin >> data_x;
cout << " " << endl;
cout << "请输入第" << i << "个数据的y值" << endl;
cin >> data_y;
cout << " " << endl;

sum_x += data_x;
sum_y += data_y;
sum_xy += (data_x * data_y);
sum_square_x += (data_x * data_x);

i++;
}

}

double Average(double a)
{
double ave = a / n;
return ave;
}

double B_ba(double calc1,double calc2)
{
double square_ave_x = calc1 * calc1;
double calc3;
calc3 = (sum_xy - n * calc1 * calc2) / (sum_square_x - n * square_ave_x);
return calc3;
}

void A_ba()
{
a_ba = ave_y - b_ba * ave_x;
}

int main()
{
InputAndSum();
ave_x = Average(sum_x);
ave_y = Average(sum_y);
b_ba = B_ba(ave_x,ave_y);
A_ba();
cout << "---------------------------------" << endl;
cout << "---------------------------------" << endl;
cout << "n的值为: " << n << endl;
cout << "各x的和为: " << sum_x << endl;
cout << "各y的和为: " << sum_y << endl;
cout << "各个xy乘积的求和为: " << sum_xy << endl;
cout << "各个x平方的求和为: " << sum_xy << endl;
cout << "x的均值为: " << ave_x << endl;
cout << "y的均值为: " << ave_y << endl;
cout << "a(ba)为: " << a_ba << endl;
cout << "b(ba)为: " << b_ba << endl;
cout << "样本点中心为:(" << ave_x << "," << ave_y << ")" << endl;
cout << "回归直线方程为 y = " << b_ba << "x + " << "(" << a_ba << ")" << endl;
cout << "---------------------------------" << endl;
cout << "---------------------------------" << endl;
//system("pause");

}

C Sharp 模拟高尔顿钉板正态分布

起因

数学学习了正态分布和高尔顿钉板模型,打算用C#模拟一下

展示

高尔顿钉板模拟

代码

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System;

namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
gal oa = new gal();
oa.infor();
Console.WriteLine("请输入格子数(正整数):");
string brid_input = Console.ReadLine();
Console.WriteLine("请输入小球数(正整数):");
string ball_input = Console.ReadLine();
uint brid_input2 = Convert.ToUInt32(brid_input);
uint ball_input2 = Convert.ToUInt32(ball_input);
oa.galton(brid_input2,ball_input2);
Console.ReadLine();
}
}

class gal
{
public void infor()
{
Console.WriteLine("***********");
Console.WriteLine(" ");
Console.WriteLine(" ");
Console.WriteLine(" ");
Console.WriteLine("高尔顿钉板模型");
Console.WriteLine(" ");
Console.WriteLine(" ");
Console.WriteLine(" ");
Console.WriteLine("***********");
Console.WriteLine(" ");
}
public void galton(uint Grid, uint Ball)
{
int[] grid = new int[Grid];
int number = 0;

for (int counter_ball = 1; counter_ball <= Ball; counter_ball++)
{
for(int times = 1; times <= (Grid - 1); times++)
{

Random rd = new Random();
double l = rd.NextDouble()*2;
int rand = (int)l;
number += rand;
}
grid[number]++;
number = 0;
}

Console.WriteLine("小球总数为{0},格数为{1}", Ball, Grid);

for (int index = 0;index < grid.Length; index++)
{
int k = index + 1;
Console.WriteLine("{0}号格子小球数为{1}", k, grid[index]);
}
}
}
}

Git

GitHub:
https://github.com/CairBin/GaltonKnockedBoards

安装一台黑苹果

准备

配置

  • 主板:磐正ib85my-q7
  • CPU:Inter i3-4170 3.7GHZ
  • 显卡:RX580(千万别用2048sp的,否则不识别还要刷Bios)
  • 内存:至少4G
  • 硬盘:KingDian 120G固态

工具

系统

镜像:黑果小兵Catalina10.15.4

安装

制作U盘

  • 使用Etcher镜像制作启动盘,不会自行百度
  • 用Diskgenius在其esp分区EFI/CLOVER/drivers/UEFI/目录下AptioMmoryFix.efi文件删除
  • 将esp分区EFI/CLOVER/drivers/off的OsxAptionFix3Drv.efi复制到EFI/CLOVER/drivers/UEFI/目录中
    (不替换文件的话,在安装系统过程中会剩余两分钟时卡死并重启)

硬盘设置

使用Diskgenius将固态硬盘格式设置为FAT32

Bios设置

  • 重启进入bios
  • 在 Advanced->SATA Configuration找到安装盘并将Hot Plug属性设置为 Disabled
  • 保存并退出

U盘启动

  • 找到U盘进入,并选择安装mac(默认config文件即可)
  • 等待跑完代码(报错自行百度)
  • 磁盘工具抹掉安装盘并设为Mac日志式(HFS+)格式
  • 退出磁盘工具,进入“安装MacOS”
  • 选择安装盘,然后同意一些协议并安装
  • 安装快完成时会重启,然后同样进入引导,默认Install MacOS from MAC(不用管它就行,会自动)

进入系统

  • 最后会再自动重启然后进入系统
  • 进行系统设置
  • 进入系统
  • 在设置中禁止睡眠
  • 然后配置驱动(这里最麻烦,最好根据自己情况自行搜索)

C Sharp 数据类型

值类型

整数类型

用途:整数类型用来存储整数值。

表示形式:

  • 十进制(不能以0开头,0除外)
  • 八进制(必须以0开头)
  • 十六进制(必须以0X或0x开头)

类型 说明 范围
sbyte 8位有符号整数 -128127
short 16位有符号整数 -32768
32767
int 32位有符号整数 -21474836482147483647
long 64位有符号整数 -9223372036854775808
9223372036854775807
byte 8位无符号整数 0255
ushort 16位无符号整数 0
65535
uint 32位无符号整数 04294967295
ulong 64位无符号整数 0
18446744073709551615


浮点类型

用途:主要用于处理含有小数数值的数据。


类型 说明 范围
float 精确到7位数 +-1.510^(-45) ~ +-3.4×10^38
double 精确到15~16位数 +-5.0
10^(-324) ~ +-1.7×10^308


布尔类型

用途:主要用来表示true/false值


类型 说明
bool true/false


引用类型

堆的概念:堆是一中由系统弹性配置的内存空间,没有特定大小及存活时间,因此可以被弹性地运用于对象访问。

特征:

  • 必须在托管堆中为引用类型变量分配内存
  • 使用new关键字来创建引用类型变量
  • 在托管堆中分配的每个对象都有与之相关联的附加成员,这些成员必须被初始化
  • 引用类型变量是由垃圾回收机制来管理的
  • 多个引用类型变量可以引用同一对象,在这种情形下,对一个变量的操作会影响另外一个变量所引用的同一对象
  • 引用类型被赋值前的值都是null

实例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;

class Program
{
class C //创建一个类C
{
public int Value = 0; //声明一个公共int类型的变量Value
}
static void Main(string[] args)
{
int v1 = 0;
int v2 =v1;
v2 = 927;
C r1 = new C(); //使用new关键字创建引用对象
C r2 = r1;
r2.Value = 112;
Console.WriteLine("Values:{0},{1}",v1,v2); //输出 v1 v2 变量
Console.WriteLine("Refs:{0},{1}",r1.Value,r2.Value); //输出引用类型对象的Value
Console.ReadLine();
}
}

** 输出结果 **

1
2
Values:0,927
Refs:112,112

Windows提交文件至GitHub(Gitee)仓库

介绍&准备

介绍

本文章只是介绍最基本的用法
图片来自网络

准备

  • 一台装有Windows的计算机(系统Win7以上,最好是Win10)
  • Git
  • TortoiseGit(绰号“小乌龟”)

安装软件

安装Git

  • 去官网下载Git,根据你的系统选择32位还是64位

官网:https://git-scm.com/
下载:https://git-scm.com/download/win

  • 进行安装,不懂的话,一切按默认进行即可
    InstallGit

安装TortoiseGit(小乌龟)

  • 下载TortoiseGit,还是根据系统选择32位还是64位

官网:https://download.tortoisegit.org/
下载:https://download.tortoisegit.org/tgit/

  • 安装Tortoise,不懂的话默认即可,但其中有两步需要注意
    InstallTor
  • 这一步可以选择语言,但我推荐使用英文,因为很多项目开发都是英文环境,要学会适应。(中文需额外下载)
    InstallTor
  • 这里输入你的邮箱和用户名,尽量和GitHub(Gitee)一致(注:该配置可在 C盘->用户->”你的用户名”->.gitconfig文件修改,该文件可能被隐藏)
    InstallTor
  • 然后继续下去直至安装完毕即可

创建仓库

  • 在你的GitHub或Gitee创建仓库,并设置为Public(公开)
  • 来到仓库界面->Clone(克隆)->复制HTTPS地址

使用

  • 在本地创建一个文件夹,来存放仓库
  • 在该目录下,右键->Git Clone->复制链接到URL框内(该操作可能自动完成)->点击OK
  • 然后会生成一个文件夹,进入,将你想要上传的文件非空目录放进去。(该文件夹内的.git目录是自动生成,请勿删除)
  • 右键->Git Commit
  • 在Message填写信息(必须填写,否则无法提交),在Check框选择要提交的文件,最后点击Commit
    Commit
  • 读取进度条完成后,会有蓝色Success字样,这说明提交到本地缓冲,但没提交到GitHub(Gitee)
  • 此时你必须点击Push(可能会让你输入账号密码)才能上传成功,若选择了Close则可以 右键->TortoiseGit->Push 完成推送上传

报错

如果报错或提交其他仓库没有要求输入账号密码,则可能是缓存问题
在CMD中输入以下命令,然后重新提交就可以了

1
git credential-manager uninstall

Ubuntu安装Skype

说明

Skype官网为skype.com但在中国大陆会自动跳转到skype.gmw.cn
skype.gmw.cn是没有Linux版的安装包的,所以只能去访问其它地区官网来获取下载地址
DownloadSkype

我现在已经找到了下载地址,所以你可以直接点击下方链接即可获取deb格式的安装包

下载

下载链接:https://repo.skype.com/latest/skypeforlinux-64.deb

Debian系(Ubuntu)安装deepin-wine来使用常用软件

介绍

deepin-wine一开始是专门针对deepin系统用的,这里还多亏了deepin开发团队,使之能够适配其他Debian系列的Linux系统
利用deepin-wine可以安装QQ,迅雷,微信,百度网盘等常用软件
这里以Ubuntu为例

步骤

安装环境

  • 执行克隆
    1
    git clone https://github.com/wszqkzqk/deepin-wine-ubuntu.git
    访问速度慢可以用gitee
    1
    git clone https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu.git
  • 进入目录,然后执行sudo ./install.sh

安装软件

使用deepin发布的容器安装包(不一定不是最新版,但稳定性好)

托盘

安装TopIcons Plus

其他

更多请参考:

https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu

https://github.com/wszqkzqk/deepin-wine-ubuntu