转载原文链接: https://www.cnblogs.com/leeyongbard/p/9777498.html Git、GitHub、GitLab三者之间的联系以及区别 在讲区别以及联系之前先简要的介绍一下,这三者都是什么(本篇文章适合刚入门的新手,大佬请出门左转)
1.什么是 Git?
Git 是一个版本控制系统。
版本控制是一种用于记录一个或多个文件内容变化,方便我们查阅特定版本修订情况的系统。
以前在没有使用版本控制的时候,我们通常在我们的项目根目录下这样命名项目:
project_v1、project_v1.1、project_v2等等,通过这种方式记录我们项目的不同版本的修改,
有的时候我们还会在不同版本的文件中写一个说明,记录此版本项目新增、修改,删除等操作。
这样的操作是很繁杂的,有的时候还可能因为一些非人为因素导致文件丢失这样的事故。
有了版本控制系统,我们就不用再手动进行一些繁杂的操作,并且对于文件丢失这种事故我们也不
用再担心,你可以随便回到历史记录的某个时刻。
早期出现的版本控制系统有:SVN、CVS等,它们是集中式版本控制系统,都有一个单一的集中管理
的服务器,保存所有文件的修订版本,而协同合作的开发人员都通过客户端连接到这台服务器,取出
最新的文件或者提交更新。
从网上找了一张图,展示一下它们的原理:
而我们的主角 Git 是分布式版本控制系统。Git 已经成为越来越多开发者的青睐,因为分布式的优势是很显著的。
2.说一下集中式和分布式版本控制系统的区别:
集中式版本控制系统,版本库是集中存放在中央服务器的,工作的时候,用的是自己的电脑,所以,我们首先需要
从中央服务器上拉取最新的版本,然后开始工作,等工作完了,再把自己的工作提交到中央服务器。在这里借用廖
雪峰老师的一个比喻,中央服务器好比是一个图书馆,你要改其中的一本书,必须先要从图书馆里把书借出来,然
后更改,改完之后,再放回图书馆。
集中式版本控制系统的一个最大毛病就是必须联网才能工作,所以对于网络环境比较差的情况使用集中式版本控制
系统是一件比较让人头疼的事情。
分布式版本控制系统没有中央服务器的概念,我们使用相关的客户端提取的不只是最新的文件,而是把代码仓库完整
地镜像下来,相当于每个人的电脑都是一个完整的版本库,这样的话,任何一处协同工作的服务器出现故障,都可以
用任何一个镜像出来的本地仓库恢复。并且,即便在网络环境比较差的情况下也不用担心,因为版本库就在本地电脑
上。
个人总结:
(1).分布式版本控制系统下的本地仓库包含代码库还有历史库,在本地就可以查看版本历史
(2).而集中式版本控制系统下的历史仓库是存在于中央仓库,每次对比与提交代码都必须连接到中央仓库
(3).多人开发时,如果充当中央仓库的Git仓库挂掉了,任何一个开发者都可以随时创建一个新的中央仓库然后同步就可
以恢复中央仓库
从网上找了一张图,展示一下它们的原理:
3.GitHub 和 GitLab 都是基于 web 的 Git 仓库,使用起来二者差不多,它们都提供了分享开源项目的平台,
为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。
GitHub 作为开源代码库,拥有超过 900 万的开发者用户,目前仍然是最火的开源项目托管平台,GitHub 同时
提供公共仓库和私有仓库,但如果使用私有仓库,是需要付费的。
GitLab 解决了这个问题,你可以在上面创建私人的免费仓库。
GitLab 让开发团队对他们的代码仓库拥有更多的控制,相比较 GitHub , 它有不少特色:
(1) 允许免费设置仓库权限;
(2) 允许用户选择分享一个 project 的部分代码;
(3) 允许用户设置 project 的获取权限,进一步提升安全性;
例子:三个列表数字首次渲染依次为100,200,300,点击对应的后面的按钮,要实现数字乘十,此时使用 this.arr[index]=this.arr[index]*10;进行更改的方式不起作用,改变了data中的arr数组,但是未能正确渲染到页面中。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <div v-for="(item,index) in arr"> {{item}} <button @click='aaa(item,index)'>点击数字改变</button> </div> </div> </body> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var app = new Vue({ el: '#app', data: { arr:[ 100, 200, 300 ] }, methods: { aaa(item,index) { console.log('进入aaa里面了') console.log(item) console.log(index) this.arr[index]=this.arr[index]*10;//不能使用 console.log(this.arr) } } }) </script> </html> 解决方法一:
//参数一:要更改的原数组,参数二:索引,参数三:更改的值 aaa(item,index) { Vue.set(this.arr,index,item*10); } 解决方法二:app.$set 只是 Vue.set 的别名。
原标题:非常好用的源代码网站推荐,用这些开源代码就够了
作为一个开发人员写代码是工作的日常,在这个万物互联的时代,有问题马上百度、谷歌、知乎一下等等,代码也不例外,借鉴别人的代码同样可以事半功倍。下面安正软件推荐四个非常好用的源代码网站,提高码农的工作工作效率。
1.开源中国
目前中国圈内有名气的开源技术社区、程序员社区,提供技术、学习、开发,甚至是职业发展的各种互动,已收录超过两万款开源软件。
https://www.oschina.net/
2.codesoso 源码搜索
在几十万的源代码中搜索,支持中文和英文搜索,可以出现很多代码,很适合刚学习编程或者是开始学习新的编程语言的小伙伴。
search.codesoso.com
3.CodeForge
CodeForge是非常全面、好用的源代码分享、下载网站,提供各种开发代码,从java web 到 php开发,“致力于为广大IT 开发者、程序员、编程爱好者、互联网领域工作者提供海量的程序源。”
www.codeforge.cn
4.github
全球知名开发者空间,聚集了超过两千万的程序员在这里一起工作,探讨代码,管理项目。大家可以分享代码为大家所用。搜索关键词,直接就可以下载代码,有开通新浪微博。(2018年6月4日,微软宣布,通过75亿美元的股票交易收购代码托管平台GitHub。)
https://github.com
保存以上四个源代码网站,完全够用了。返回搜狐,查看更多
责任编辑:
配置文件中出现 The reference to entity “XX” must end with the ‘;’ delimiter. 错误提示
一般是因为 xml文件里面 出现 " & " 等特殊字符导致的,xml文件是无法直接正常解析&等特殊字符的,所以可用&转义表示
解决办法
在 " & " 后面加上 " amp; " (不含双引号)
BOM头是UTF-8来告诉编辑器:我是UTF8编码。它的编码是\xEF\xBB\xBF 但是PHP在设计之初并没有考虑到BOM头的问题,所以在编解码的时候很容易出现问题 比如今天遇到的问题,json_decode,当解码的string有BOM头的时候json_decode就解析失败,返回NULL。(为什么
BOM头是UTF-8来告诉编辑器:我是UTF8编码。它的编码是\xEF\xBB\xBF
但是PHP在设计之初并没有考虑到BOM头的问题,所以在编解码的时候很容易出现问题
比如今天遇到的问题,json_decode,当解码的string有BOM头的时候json_decode就解析失败,返回NULL。(为什么不自动检测并去除BOM头呢。。。小吐槽)
试了两种方式能去除掉:
$result = trim($result, "\xEF\xBB\xBF");
print_r(json_decode($result, true));
exit;
还有一种比较矬:
$result = @iconv("UTF-8", "GBK//IGNORE", $result);
$result = @iconv("GBK", "UTF-8//IGNORE", $result);
print_r(json_decode($result, true));
exit;
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
前言
本文主要介绍了关于Laravel 5.4因特殊字段太长导致migrations报错的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:
laravel 5.4 改变了默认的数据库字符集,现在utf8mb4包括存储emojis支持。MySQL 需要v5.7.7或者更高版本,当你试着在一些MariaDB或者一些老版本的的MySQL上运行 migrations 命令时,你会碰到下面这个错误:
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `use
rs_email_unique`(`email`))
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
解决方法
经过查询,我们可以在 AppServiceProvider.php 文件里的 boot 方法里设置一个默认值:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
//添加的代码
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
本文实例讲述了php使用memcoder将视频转成mp4格式的方法。分享给大家供大家参考。具体实现方法如下:
复制代码 代码如下:
convertTo( "some-input-video.avi", "output.mp4" );
function convertTo( $input, $output ) {
echo "Converting $input to $output
";
$command = "mencoder $input -o $output -af volume=10 -aspect 16:9 -of avi -noodml -ovc x264 -x264encopts bitrate=500:level_idc=41:bframes=3:frameref=2: nopsnr: nossim: pass=1: threads=auto -oac mp3lame";
echo "$command
";
shell_exec( $command );
echo "Converted
";
}
?>
希望本文所述对大家的php程序设计有所帮助。
点乘 a与b做*乘法,原则是如果a与b的size不同,则以某种方式将a或b进行复制,使得复制后的a和b的size相同,然后再将a和b做element-wise的乘法。
* 标量 Tensor与标量k做*乘法的结果是Tensor的每个元素乘以k(相当于把k复制成与lhs大小相同,元素全为k的Tensor)。
>>> a = torch.ones(3,4) >>> a tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) >>> a * 2 tensor([[2., 2., 2., 2.], [2., 2., 2., 2.], [2., 2., 2., 2.]]) * 一维向量 Tensor与行向量做*乘法的结果是每列乘以行向量对应列的值(相当于把行向量的行复制)。 注意此时要求Tensor的列数与行向量的列数相等。
>>> a = torch.ones(3,4) >>> a tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) >>> b = torch.Tensor([1,2,3,4]) >>> b tensor([1., 2., 3.
html字体颜色的设置方法:1、通过外部CSS样式设置,代码如“.blue{color:blue;}”;2、通过内部CSS样式设置,代码如“style="color:white;font-size:25px;"”;3、通过font标签设置。
本教程操作环境:windows7系统、HTML5&&CSS3版,DELL G3电脑,该方法适用于所有品牌电脑。
HTML主要是用来写页面布局的,过程中经常需要设置页面某些字体的颜色,通常有三种常见方式可以进行自定义设置:
1、通过外部CSS样式来设置。可以在head标签中增加style样式,在body中的其他标签,如h1,p,div等开始标签中,增加class="上述style中定义的名称,如blue"即可。代码实现如下:
2、通过内部CSS样式来设置。在body中的其他标签,如h1,p,div等开始标签中,增加style="color:white;font-size:25px;"即可。代码实现如下:
3、通过font标签来设置。在body中其他标签内容中,增加font标签来设置字体颜色和大小,如color="yellow" size="5"。需要注意的是,size的最大值是7,并且设置字体颜色和大小都是用等号赋值,前两种CSS样式是通过英文的冒号来赋值。代码实现如下:
扩展资料
HTML网页上定义字体大小有常见三种单位,分别是:px、em、pt。
1、px是pixel缩写,是基于像素的单位.在浏览网页过程中,屏幕上的文字、图片等会随屏幕的分辨率变化而变化,一个100px宽度大小的图片,在800×600分辨率下,要占屏幕宽度的1/8,但在1024×768下,则只占约1/10。所以如果在定义字体大小时,使用px作为单位,那一旦用户改变显示器分辨率从800到1024,用户实际看到的文字就要变“小”(自然长度单位),甚至会看不清,影响浏览。
2、em即%,是相对单位,是一个相对长度单位,最初是指字母M的宽度,故名em。现指的是字符宽度的倍数,用法类似百分比,如:0.8em, 1.2em,2em等。通常1em=16px。,一般用来测量长度的通用单位(例如元素周转的页边空白和填充),当用于指定字体大小时,em单位是指父元素的字体大小。
3、pt是point(磅)缩写,是一种固定长度的度量单位,大小为1/72英寸。如果在web上使用pt做单位的文字,字体的大小在不同屏幕(同样分辨率)下一样,这样可能会对排版有影响,但在Word中使用pt相当方便。因为使用Word主要目的都不是为了屏幕浏览,而是输出打印。当打印到实体时,pt作为一个自然长度单位就方便实用了:比如Word中普通的文档都用“宋体 9pt”,标题用“黑体 16pt”等等,无论电脑怎么设置,打印出来永远就是这么大。
互联网时代,为了适应时代的发展,各行各业的企业纷纷从线下转向线上拓展业务。如果你想让更多的人了解你的公司,有一个专门的网站是非常重要的。网站不仅可以详细介绍企业信息,还可以获得大量潜在客户,有利于品牌推广和推广。
但是很多客户不懂做网站,对网站建设也知之甚少,具体的网站制作流程还是空白。那么怎么做网站呢?以下武汉冯润科技为您介绍网站制作的基本流程。
1.策划网站
在建网站之前,首先要对网站做一个整体规划,确定一个自己了解和喜欢的主题,然后在概念上给网站定位。此外,找到一些与网站主题相关的关键词,建立关键词列表,可以给网站未来带来大量的流量,也有助于优化网站,使网站排名更高。
确定了网站的定位后,我们开始梳理网站的整体框架。合理的结构使网站制作有明确的方向,网站布局合理,访问者可以获得良好的网站体验。
2.域名选择
一个网站的域名被称为“网络商标”,选择域名是整个网站建设中最重要的一步。
域名是网络上唯一的标识符,也是访问网站的关键。拥有自己的域名可以让网站在搜索引擎和目录中获得更高的可信度、识别率和可见性。
在域名选择上,一般采用主流域名,大部分网站都会选择。Com域名。域名应该比网站的品牌名称更具企业性,不仅方便用户记忆和输入,也有利于促进网站宣传和增加网站流量。
3.网站服务器
一个网站需要有自己的空间,选择合适的网站空间服务器有利于网站的运营。服务器的大小主要根据网站的大小和内容来选择。如果是实力雄厚、资金雄厚的企业,考虑到其强大的数据库和安全性,可以选择购买自己的服务器;对于中小企业来说,选择虚拟托管服务更合适,可以节省大量的服务器管理和维护成本。
4.网页设计。
如上所述,在制作网站之前,需要对网站进行合理的规划。网页设计其实也包含在网站策划中,但却是最重要的工作。
网站图形的整洁、简洁、结构好、布局简单、导航清晰、加载速度快,是一个优秀网站的条件。
一般网页设计主要包括浏览器、网页加载时间、字体、分辨率等。网站设计讲究美观,网站中的背景、颜色、字体、导航按钮都要有统一的外观。一个一致的网站可以帮助建立一个“品牌”,使用户能够更准确地识别它。
5.网站SEO
SEO是编辑网站内容时最重要的工作。无论你的网站布局多么合理,页面多么整洁,目的都是为了呈现给用户。通过在网站建设过程中对网站进行优化,网站可以在各大搜索引擎中获得较高的排名。当访问者发现有价值的网站内容,并帮助他们解决问题时,网站的商誉就会上升,网站建设的意义就凸显出来了。
6.是自己做,还是想搭建第三方平台?
当我们了解了一系列的网站建设流程,相信很多人都渴望建立自己的网站。然而,网站建设不是一件容易的事情,需要花费大量的时间和精力。
如果你想建立自己的网站,你可以选择一个网站建设工具。现在很多网站创建免费的网站平台,提供各种网站建设模板。只要了解一些互联网知识和网站建设的概念,就可以建立自己的网站。如果你技术差,对自己没有信心,也可以找网站建设公司为你服务。
随着移动互联网的快速发展,微信小程序是以多种形态呈现出来,而且还在不断升级其能力。微信小程序逐渐渗透到商城、医疗、游戏、出行等等不同行业领域。那么企业开发微信小程序有哪些应用场景呢?
1.电商购物 电商小程序自备微信用户,具有强大的开发空间。企业依托微信生态圈和小程序的社交裂变属性,使得小程序商城成为电商变现的主要方式之一。其中主要有京东、拼多多、唯品会等。
2.内容资讯 微信订阅号可以每天发一次消息,服务号是一个月发4次消息,发消息次数限制了公众号内容发布。但是小程序就不同,可以每天多次发送模板消息,随时更新,随时发送。
3.营销互动类 营销互动的玩法比较经典,在过年时期比较火的各类红包小程序,“语音领红包”、“答题领红包”、“视频红包”等玩法。还可以在互动小程序,一键生成各种角色变脸照、聊天表情、产品营销图、装逼恶搞图等各类趣味,集互动性和社交性于一体,很容易引起大众分享传播,成为爆款。
4.知识付费类 知识是属于虚拟产品或者服务,如果微信小程序还没出现,我们购买付费知识都只是微信公众号或者云电子书方式进行,转化过程是非常曲折,而且顾客用户体验十分不佳。
5.工具类 企业为了满足部分用户需求专门开发的微信小程序,紧抓用户的某一需求,而在众多小程序中占有一席之地。
Cascading Style Sheets (CSS)层叠样式表
css主要作用就是定义控制页面的布局,如何格式化显示HTML元素
css为控制页面HTML样式节约了大量时间,因为css可以同时作用于多个HTML元素及多个HTML页面
CSS语法
CSS规则由选择器及声明块组成
如下图:
p就是选择器,意义就是只需要设置应用css样式的HTML元素
花括号就是一个声明块,每个声明块包含一条或者多条声明
声明包含属性和属性值用冒号分割,多条声明用分号分割
实际应用
还记得上一节介绍HTML的时候有一个表单,那个表单没有应用任何自定义样式,由浏览器默认的css去控制显示的,有点凌乱,下面我们就来用自定义的css来控制表单的显示,使得更为整洁美观
我们在forms.html 增加如下css
<head>
<meta charset="utf-8" />
<title>表单演示</title>
<style>
#userinfo label {
color:blue;
float:left;
width:100px;
text-align:right;
margin-right:5px;
}
#name, #nation {
width:150px;
background-color:yellow;
}
#introduce{
background-color:pink;
}
#submit {
margin-left:105px;
}
</style>
</head>
下面两张图是无自定义css和有自定义css控制的运行效果图,怎么样是不是不一样呢。至于上面的css暂时不理解没关系,后面会慢慢随着应用熟悉,也可以多查一下css手册,反正语法就那样,大家需要学习记住的就是不同属性及属性值的作用,然后根据实际情况应用到实际场景中即可。
将CSS应用于HTML元素的几种方式
外联式:
就是单独用一个css文件来定义css样式,在需要使用该css样式的页面做如下引用即可,这样的好处就是css做到了重用,无论是新增,修改样式都只需要维护这个css文件即可,不需要对所有页面做维护。
<link href="main.css" rel="stylesheet" />
内联式:
在当前页面定义如下代码的代码块,在里面定义css样式,这样定义可以对整个页面的 html元素进行样式控制,我们上面对表单的控制就是采取的这样方式
<style>
/* css样式定义 */
</style>
行内式:
就是针对某个具体的HTML元素进行css样式控制定义,只对该元素起效,应用 代 码如下:
<div style='property1:value1; property2:value2'>
关于QPSK的一些整理 基础推导ModulationDemodulation Matlab 仿真 基础 QPSK(Quadrature Phase Shift Keying)正交相移键控,是一种已相位不同来区分数据的调制方式。
其调制和解调的基本结构如下图所示。
推导 Modulation 1、A点:首先信号0和1经过电平产生,分别生成-1和+1的信号。
2、B点:±1信号和coswt或sinwt相乘会出现四种结果,如下:
code信号图像+1sin(wt)-1-sin(wt)+1cos(wt)1-cos(wt) 3、C点
重要的三角公式:cos(a±b)=cosacosb∓sinasinb
±sinwt和±coswt相加一共有四种组合,并且结果如下:
Demodulation 1、D点:在解调端收到的信号是QPSK经过AWGN(高斯白噪信道)后的信号。
2、E点:信号分别与cos和sin的本地载波相乘,会发生如下的变化:
观察上式,经过相乘一共存在3个分量:一个常量,一个高频分量,一个噪声.噪声先不予讨论,这部分一般会在信号处理前进行滤波去除,另一方面QPSK系统可以允许一定程度的噪声,不会对解调造成影响 3、F点:高频分量是不需要的成分,在之后的lowpass滤波器中进行了滤除
4、G点:常量是我们需要的分量,我们依靠常量的正负来判断接收的数据。
常量正负抽样判决结果+1/2+1-1/2-1 5、H点:两路信号进行组合,得到发射信号。
Matlab 仿真 之后补上。
说到APP开发,很多人的反应可能是“贵”或者“很贵”。为什么在APP大行其道的当下移动互联网时代,APP开发却如此昂贵?
事实上,APP开发的价格因地区而异,不同地区的经济发展水平对APP开发的价格也有一定的影响。比如在北上广这样的大城市,APP开发的价格与经济欠发达地区有很大的不同,而且更贵。
其次,APP的开发价格也与APP本身的各种生产要素有关。功能的多少,开发时间的长短,开发程度的难易程度,都是影响APP开发价格的因素。如果开发难度大,相应的开发周期会更长,人工成本也会增加,所以APP的开发价格会更贵。
但并不是所有的APP开发都是昂贵的,需要结合实际开发需求,对企业现状进行有针对性的功能开发,综合衡量各方面的投入才是真正的APP开发报价。
后台登录逻辑 1、没有登录状态,访问后台页面都应该跳转到登录页
已经登录状态:
1、访问登录页面,应该跳转到后台首页
解决方案:
后台登录拦截:
1、传统common/base.php控制器,后台控制器都去继承base父类,在base控制器中做登录拦截
2、后台应用中间件(这里多应用,不做全局中间件)的前置操作校验做登录拦截
后台登录功能实现-01 1、开启验证验证码
2、后台校验提交数据
1)是否为post提交
2)验证码是否正确(需要开启全局中间件的session)
3)验证用户名为条件查询是否存在数据库
4)验证用户状态status是否为激活状态
5)密码校验采用加密盐+md5方式加密验证是否正确
6)保存用户信息到session中实现多页面登录状态与展示用户信息
7)更新该用户的登录时间
8)验证成功跳转到后台首页
9)登录后再次访问登录页根据session值重定向到后台首页
后台管理员表结构 CREATE TABLE `qing_admin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `password` char(32) COLLATE utf8_unicode_ci NOT NULL, `last_login_time` int(11) NOT NULL, `group_id` int(2) NOT NULL, `status` int(11) NOT NULL DEFAULT '1' COMMENT '1启用0禁用', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='后台管理员'; 实现代码 public function index() { //9)登录后再次访问登录页根据session值重定向到后台首页 if(session('adminSessionData')){ return redirect('/qingadmin/index'); } if (request()->isPost()) { $data = input('post.
makefile 中c/c++混编编译遇到的问题 前提:三个文件server.c client.c wrapper.c,c风格编写的,server.c包含了c++11的内容。mac os下面编译。
其中server.c包含了c++11的内容,其他部分使用c风格的方式写的,为了以后扩展写了makefile编译,其中遇到了很多问题,花了很长时间来解决,记录如下:
编译命令是gcc/g++,有clang的warning报错
clang: warning: treating ‘c’ input as ‘c++’ when in C++ mode, this behavior is deprecated [-Wdeprecated]
一直以为gcc g++没安装等等路径等有问题,导致有问题,实际上因为现在的操作系统,gcc g++都是别名,真正连接的是clang,这个没问题
可以使用gcc -v clang -v查看下
这个warning本身是因为c++程序用c编译,把.c改为.cpp即可解决
g++的-std11的参数被忽略,导致程序编译不过
g++ wrapper.cpp server.cpp -std=c++11 -o server 执行后server可以编译成功
但如下makefile编译不过
```bash CC = g++ CFLAGS = -std=c++11 source = wrapper.cpp server.cpp sourcec = client.cpp objects = server.o wrapper.o objectc = client.o server:$(objects) $(CC) -std=c++11 $(source) -o server -Wall -g 编译的时候指令显示如下:(少了std=c++11,多了-c) c++ -c -o server.
python爬虫爬取糗事百科视频 注意: 需要提前配置好环境, 不会的话可以自行百度或者看我的另一篇博文, 链接:Windows下的Python安装教程(绝对详细)
1.安装第三方库 requests的安装 打开cmd, 执行命令 pip install requests,如图:
lxml的安装 打开cmd, 执行命令 pip install lxml,如图:
注意, 需要配置环境变量及pip镜像源为国内
2.代码 #!Python # -*- encoding: utf-8 -*- ''' 1.文件名称 : QiuShiSpider.py 2.创建时间 : 2021/03/07 16:15:08 3.作者名称 : ZAY 4.Python版本 : 3.7.0 ''' import os import requests from lxml import etree from multiprocessing import Pool class Spider(): def __init__(self): self.videos_list = [] self.geturl = "https://www.qiushibaike.com/video/page/{}/" self.headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.
站点预览 北忘山网盘
搭建网盘 搭建网盘请参照:onIndex超简单搭建oneDriver私人网盘
修改了什么? 常规美化对于flac格式音乐加入图标显示 美化网盘 需要下载美化包,下载地址在文末
由于主题包内引用了外部文件,需要根据你的实际情况修改一下,
找到 nexmoe 下 layout.php 使用打开
修改 第7行 、第9行 第18行 pan.beiwangshan.com 为自己域名(或者自己引用的目录)
修改 第15行 链接里的QQ 为自己QQ(或者自己引用的图片)
打开 theme 下 style.css 文件
修改 第97行、第103行 pan.beiwangshan.com 为自己域名(或者自己引用的目录)
请删除原有 nexmoe 主题文件夹(在youesite.com/view目录下),将压缩包内 nexmoe 复制到该位置。
将 theme 文件夹放在网站根目录.(或者别的地方,可以引用就好)
特殊文件实现功能 README.md、HEAD.md 、 .password特殊文件使用
只需要在onedriver文件夹中创建HEAD.md和README.md即可,前者代表头部内容,后者代表尾部内容,内容遵循Markdown语法。
如果你想某个文件夹需要密码访问,则可以在该文件夹下创建.password文件,然后里面输入密码即可
文件下载 gitee仓库
发行版1.0.0
本文由博客群发一文多发等运营工具平台 OpenWrite 发布
我正在尝试检索数据表单ES查询,我对如何将每次检索到的数据转换为Java对象感到困惑。 到现在为止,我可以使用Gson获取每个JSON格式的命中,但我认为从命中转换为JSON然后转换为Java对象是没有用的。在ElasticSearch中将SearchHit转换为Java对象
我当前的代码是:
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
Settings settings = Settings.builder()
.put("cluster.name", "elasticsearch")
.put("path.home", "/Users/user/Apps/elasticsearch-5.4.1")
.build();
QueryBuilder qb = termQuery("price", 12);
SearchResponse response = client.prepareSearch("kal").setTypes("products")
.setSearchType(SearchType.DEFAULT)
.setQuery(qb)
.get();
SearchHit[] results = response.getHits().getHits();
for (SearchHit hit : results) {
String sourceAsString = hit.getSourceAsString();
Map responseFields = hit.getFields();
if (sourceAsString != null) {
Gson gson = new GsonBuilder().setDateFormat(sourceAsString)
.create();
}
}
2017-06-08
pik4
+0
我不确定你在那里试图达到什么目的。你实际上已经有了java对象(SearchHit数组命名为results)。你想获得对SearchHit的子对象的引用吗? –
+0
最近因为项目需求,需要使用C++实现WebSocket与浏览器进行通讯,针对WebSocket有很多开源的框架,但是本人比较懒,所以干脆手写一个算了.
https://download.csdn.net/download/weixin_34196559/10750141开源库
废话不说,直接上代码
1. 整体代码截图 全部代码,基本400行以内可以搞定
项目结构,因为实现WebSocket需要涉及到加密解密,所以从网上某大神哪里拿来了代码
以上是整体的代码结构, 下面我简单介绍下WebSocket的流程
先贴一张图 WebSocket的基本结构 想详细了解协议内容,看这位大神的博客 https://www.cnblogs.com/songwenjie/p/8575579.html
第一步 客户端首先发送握手请求(看下图, 他长这样), 在这里面最重要的就是那个Sec-WebSocket-Key 数值, 这玩意每次来都是随机,你需要对他按照固定方式加密然后返回给客户端, 多说一句,这请求头的意思打算把协议升级成WebSocket协议, 你要是同意就按照规矩加密数据传回来.
第二步 服务端返回握手响应给客户端(看下图, 他长这样)Sec-WebSocket-Accept: 就是加密后的Sec-WebSocket-Key. 这里多费几句话 WebSocket是以"\r\n\r\n"结尾的 这里一定要多加注意, 因为之前有些兄嘚后面加了一个莫名其妙的\0 导致链接会自己断开
同时报异常: failed: A server must not mask any frames that it sends to the client.
第三步 上面一顿操作猛如虎, 握手动作就完成了, 接下来就是普通的Socket通讯了, 唯一不同的就是来的数据用掩码处理过, 去的时候不能用掩码处理 不能用掩码处理 不能用掩码处理 重要的事情说三遍(看下图), 因为只要违反规则链接就会立马断开并且报异常 failed: A server must not mask any frames that it sends to the client.