月度归档 十月 2019

通过seo圣人

sqlserver如何查看近期执行过的语句?

无论是手工执行数据库语句,还是客户端执行了数据库语句,这在sqlserver里面其实都是有记录的,我们可以查询最新的1000条sql语句,同时可以限制时间范围,sqlserver如何查看近期执行过的语句如下:

SELECT TOP 1000 
       ST.text AS '执行的SQL语句',
       QS.execution_count AS '执行次数',
       QS.total_elapsed_time AS '耗时',
       QS.total_logical_reads AS '逻辑读取次数',
       QS.total_logical_writes AS '逻辑写入次数',
       QS.total_physical_reads AS '物理读取次数',       
       QS.creation_time AS '执行时间' ,  
       QS.*
FROM   sys.dm_exec_query_stats QS
       CROSS APPLY 
sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE  QS.creation_time BETWEEN '2019-10-25 16:57:00' AND '2019-10-25 16:58:00' 
ORDER BY
     QS.total_elapsed_time DESC 
     
     

注意,时间和条数请按照自己的需求去修改。

通过seo圣人

nginx伪静态规则将80端口不带www的域名全部跳转到带https的www域名

遇到一个很久都无法解决的问题,就是我的网站在开启证书后,想把80端口的域名、不带www的域名全部301跳转到带ssl证书的www域名,看我下面的例子:

http://dobunkan.com    301  到   https://www.dobunkan.com

http://www.dobunkan.com    301  到   https://www.dobunkan.com

https://dobunkan.com    301  到   https://www.dobunkan.com

看起来很简单的问题,但是解决起来非常麻烦,因为nginx重写规则不支持 if(条件1 || 条件2),今天想到了一个很笨的解决办法,思路是这样的,把80端口、443端口的顶级域名、443端口的长域名分开写,这样就达到目的了,请看我的例子:

server {
    listen 80;
    server_name www.dobunkan.com dobunkan.com;
    rewrite ^(.*)$ https://www.dobunkan.com$1 permanent;
}
server {
    listen 443 ssl;
    ssl_certificate    /www/host/domain/vhost/cert/domain.dobunkan.com/fullchain.pem;
    ssl_certificate_key    /www/host/domain/vhost/cert/domain.dobunkan.com/privkey.pem;
    server_name dobunkan.com;
    return 301 https://www.dobunkan.com$request_uri;
}
server {
    listen 443 ssl;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/domain.dobunkan.com/public_html;
    ssl_certificate    /www/host/domain/vhost/cert/domain.dobunkan.com/fullchain.pem;
    ssl_certificate_key    /www/host/domain/vhost/cert/domain.dobunkan.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497  https://$host$request_uri;
    server_name  www.dobunkan.com;
	
	
    #SSL-END
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-73.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/host/domain/vhost/rewrite/domain.dobunkan.com.conf;
    #REWRITE-END
    
    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log off;
        access_log off;
    }
    
    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log off;
        access_log off; 
    }
    access_log  /www/wwwlogs/domain.dobunkan.com.log;
    error_log  /www/wwwlogs/domain.dobunkan.com.error.log;

}

非常笨的方法顺利的解决了nginx301跳转的问题,如果你有更好的方法,请在下方留言!!!

通过seo圣人

所谓的人工智能是这样的

大家都知道,最近两年,有AI与人类的围棋对决引发了人工智能的高潮!人工智能领域开始渗透到各个领域,这里面有医疗、教育、制造、机械等领域,也有很多公司用“人工智能”这个噱头来宣传自己的产品,那么“人工智能”应该是怎样的呢?现在市面上的人工智能又是怎样的呢?

其实小编这些年也没少对“人工智能”下功夫,通过对各个领域的人工智能的了解,发现所谓的人工智能基本都是忽悠,下面我来说说现有的所谓的人工智能的基本情况:

1、机器学习

我不知道大家有没有注意到,大部分人工智能公司都说自己的产品具备自动学习的功能,那么这些人工智能是怎样学习的呢?

答:所谓的机器自动学习是在认为制定的规则下不断的收集素材,按照既定的规则对这些素材进行分类,这就是所谓的机器学习。

2、自动化执行

自动化执行又是什么呢?

答:所谓的人工智能自动化执行是按照预先设定的规则,让机器自动按条件执行,返回结果,其实这里面涉及到了搜索、查询、优选,最终返回一个规则认为最好的答案。

记得某智能客服,在发展初期回答客人的问题的时候经常出现牛头不对马嘴的情况,遇到没出现过的问题,这智能客服就答不上来了,从这里,你就可以看的出来,当前的人工智能原形毕露。

3、效率高

这个就不用说了,机器收集、机器查询、机器返回结果,这些肯定比人的效率高出无数倍。

那么真正的人工智能应该是怎样的呢?

我认为真正的人工智能是不需要人工干预的,会自己思考,会准确的返回数据,有他自己的形态意识,这才是真正的人工智能。目前的人工智能充其量智能叫做残缺版的自动化。

为什么今日头条、抖音他们推荐的总是我喜欢的内容呢?答案很简单,因为你在搜索的过程中,他已经记录了你每次的搜索情况,后面你一打开程序,他自然就会给你推荐这些你喜欢的东西了,这只不过是把主动搜索变为自动搜索而已!

当前的人工智能应用到了哪些技术呢?

其实,当前的人工智能无非就是搜索技术、大数据分析技术、所谓的学习就是收集筛选、分类存储,然后形成大数据,其实这个大数据技术也很简单,因为存储数据的过程中已经从多个维度为每一条数据定义了标签。就像AI围棋冠军,没有哪些规则、没有哪些大数据的支持,你以为他真的会下围棋吗?他执行的依然是人的思想!

总结:当前的人工智能就是搜索采集(数据)+收集整理分类(形成大数据)+规则制定(制定搜索规则)。

最后我想对哪些做人工智能领域开发的公司说一句,别出来丢人现眼,你们的包装是在考验大家伙的智商呢?

通过seo圣人

wordpress博客启用SSL证书后标志带感叹号怎么办?

今天把网站域名申请了SSL证书,在后台也设置好了域名,结果发现网站全站的SSL证书标致都带感叹号,wordpress博客启用SSL证书后标志带感叹号怎么办?

出现这样的情况,一般是站内引用的资源依然使用的是HTTP协议,知道问题之后我们开始去排查,果然,在一个地方发现了问题,看下面的代码:

<link rel="shortcut icon" href="https://www.dobunkan.com/wp-content/uploads/2019/09/111111.png" /> 

看吧,问题就出在这里了,下面我们开始解决问题,通过对模板header.php的跟踪,发现这一段路径是以数组的形式存储在数据库里面:

数据表名为:wp_options

字段为:appointment_options

里面的内容是这样的:

s:61:"http://www.dobunkan.com/wp-content/uploads/2019/09/111111.png";}

好了,我们把里面的http替换为https就可以解决了:

s:61:"https://www.dobunkan.com/wp-content/uploads/2019/09/111111.png";}

保存数据库,然后清理缓存,在刷新,然后,网站正常了:

通过seo圣人

windows下搭建NTP时间服务器

最近因为监控服务器时间莫名其妙的回到了几个月前,几十台监控服务器如果挨个去接显示器设置时间,实在是太麻烦,经过一番胡乱的点击发现海康威视里面有一个NTP服务器设置。

到这里,思路来了,如果我们在内网搭建一个NTP时间服务器,问题是不是就解决了?说干就干,实践出真知嘛:

修改注册表项。在搜索框中打开注册表,使用命令: regedit,结果如下图所示:

进入注册表项HKEY_LOCAL_MACHINE—>SYSTEM—>CurrentControlSet—>Services—>W32Time—>TimeProviders—>NtpServer
Enabled 设置为 1打开NTP,(系统默认0) ,结果如下图所示:

进入注册表项HKEY_LOCAL_MACHINE—>SYSTEM—>CurrentControlSet—>Services—>W32Time—>Config
AnnounceFlags 设置为 5 (系统默认 10),结果如下图所示:

进入系统服务,找到Windows time服务,使用命令:services.msc,结果如下图所示:

将Windows time服务设置为自动启动,点击应用和确定,结果如下图所示:

鼠标右键重新启动windows time服务,结果如下图所示:

重新启动电脑或者主机,所有配置生效,NTP时钟搭建完毕,此时去海康威视的面板设置下时间服务器,重启海康威视,时间恢复正常:

通过seo圣人

华为路由屏蔽TeamViewer5938端口

大家都知道,最近Teamviewer出了非常严重的漏洞,这给TeamViewer用户造成了巨大的安全隐患,官方给出的解决方案是暂时封杀5938端口和禁止访问teamviewer.com这个域名。

很多用华为路由的用户就懵逼了,不知道在哪关闭5938端口,下面我来将下这个命令:

acl number 3003
 rule 0 deny tcp source-port eq 5938
 rule 1 deny udp source-port eq 5938

执行上述命令即可封杀5938端口。

通过seo圣人

C#去掉button按钮的边框线

在用C#编写的软件里面,按钮用的是背景图,有一个问题就是图片按钮带了C#的背景和边框,这样看起来感觉很不爽,那么,怎么去button自带的边框和背景色呢?

第一种方法:Winform的话,设置FlatStyle为Flat,并且设置FlatAppearance下的BorderSize为0.

第二种方法:系统自带的按钮无法去除边框。重写按钮的OnPaint事件

class newbtn : System.Windows.Forms.Button //继承之系统按钮控件


{
 

protected override void OnPaint(PaintEventArgs e)
{//重写



 

base.OnPaint(e);
System.Drawing.Pen pen = new Pen(this.BackColor, 3);
e.Graphics.DrawRectangle(pen, 0, 0, this.Width, this.Height);//填充


pen.Dispose();
 
}
}

然后将designer。cs文件中你要修改的按钮重新继承至newbtn就可。

去除按钮的背景色其实很简单,只需要按下图的设置即可,找到Flatstyle,把属性设置为flat即可,如下图所示:

下面是按上述设置之后的样子,边框和背景都没了,按钮使用的是透明色:

通过seo圣人

C#编写软件怎样删除dataGridView的第一列?

在用C#编写软件的过程中因为需要用到dataGridView这个控件,默认情况是这样显示的:

第一列等于是什么都没有,但是他默认就是存在,我们怎样才能删除或者隐藏dataGridView的第一列呢?查阅了下手册,发现解决方法还是挺简单的,我们只需要将RowHeadersVisible设置为false即可,代码如下:

dataGridView1.RowHeadersVisible = false;//隐藏第一列

还有一个问题,如果dataGridView控件直接显示从数据库的查询结果,里面有的字段数据比较长,有的比较短,我们怎样把表格的列宽设置成自适应列宽呢?请看下面的代码:

dataGridView1.AutoResizeColumns();//自适应列宽

从数据库读出来的数据,每个字段都是英文的,这也导致了dataGridView控件表格的表头也是英文,怎样把他改成显示中文的呢?代码如下:

            dataGridView1.Columns[0].HeaderCell.Value = "编号";
            dataGridView1.Columns[1].HeaderCell.Value = "姓名";
            dataGridView1.Columns[2].HeaderCell.Value = "部门";
            dataGridView1.Columns[3].HeaderCell.Value = "显示器";
            dataGridView1.Columns[4].HeaderCell.Value = "CPU";
            dataGridView1.Columns[5].HeaderCell.Value = "内存条";
            dataGridView1.Columns[6].HeaderCell.Value = "硬盘";
            dataGridView1.Columns[7].HeaderCell.Value = "IP";
            dataGridView1.Columns[8].HeaderCell.Value = "显卡";
            dataGridView1.Columns[9].HeaderCell.Value = "主板";

下面,来段完整的例子,从数据库读取数据,然后在dataGridView控件中显示出来,并自动列宽,删除第一列的空白,代码如下:

//连接并写入数据库
            String connsql = "server=127.0.0.1;database=computer;uid=sa;pwd=1234567890"; //数据库配置

            SqlConnection sqlCont = new SqlConnection(connsql); //创建数据库连接

            if (sqlCont.State == ConnectionState.Open)         //检查连接状态
            {

                sqlCont.Close();

            }

            sqlCont.Open();   //打开数据库连接
            string strselect = "select id,name,dept,showq,cpu,memory,disk3,ip,video,BoardInfo from peizhi";
            //返回查询结果

            DataSet ds = new DataSet();

            //SqlDataAdapter dataAdpt = new SqlDataAdapter(strselect, sqlCont);  //执行查询
            SqlCommand dataAdpt = new SqlCommand(strselect, sqlCont);
            SqlDataAdapter sda = new SqlDataAdapter(dataAdpt);
            DataSet dss = new DataSet();
            sda.Fill(dss, "peizhi");

            dataGridView1.DataSource = dss;
            dataGridView1.DataMember = "peizhi";
            dataGridView1.RowHeadersVisible = false;//隐藏第一列
            dataGridView1.Columns[0].HeaderCell.Value = "编号";
            dataGridView1.Columns[1].HeaderCell.Value = "姓名";
            dataGridView1.Columns[2].HeaderCell.Value = "部门";
            dataGridView1.Columns[3].HeaderCell.Value = "显示器";
            dataGridView1.Columns[4].HeaderCell.Value = "CPU";
            dataGridView1.Columns[5].HeaderCell.Value = "内存条";
            dataGridView1.Columns[6].HeaderCell.Value = "硬盘";
            dataGridView1.Columns[7].HeaderCell.Value = "IP";
            dataGridView1.Columns[8].HeaderCell.Value = "显卡";
            dataGridView1.Columns[9].HeaderCell.Value = "主板";
            dataGridView1.AutoResizeColumns();
            sqlCont.Close();

下面展示下成功的截图: