虚拟币论坛
论坛
Discuz!全称:Crossday Discuz! Board,是一套免费使用的社区论坛软件系统,由北京康盛新创科技有限责任公司推出,目前最新版本是Discuz! X3.4。自面世以来,Discuz!已拥有18年以上的应用历史和数百万网站用户案例,是全球成熟度最高、覆盖率最大的论坛软件系统之一。用户可以在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能、很强负载能力和可高度定制的论坛服务。Discuz!的基础架构采用世界上最流行的web编程组合PHP+MySQL实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案,无论在稳定性、负载能力、安全保障等方面都居于国内外同类产品领先地位。在本教程中,我们将以Centos 6.5系统的64位服务器为例,教你如何安装设置Discuz!,构建属于你的论坛。本文以LIKE.TG服务器举例子说明。一、购买LIKE.TG之前根据需要选购 适合需要的腾讯云服务器,1、如果想省钱的话点我领取LIKE.TG千元代金券,节约上云成本。点我参加LIKE.TG秒杀活动,性价比也很高。2、LIKE.TG账号实名认证,买域名,域名实名认证。3、点我打开LIKE.TG产品页面,对于windows系统来说,2G内存是起步要求,1g内存会导致系统运行缓慢。安装LAMP集成环境LAMP是Linux+Apache+MySql+PHP的简称,安装LAMP的步骤比较冗长,有兴趣的同学可以参考LIKE.TG提供的实验手册自己动手搭建,本文不再向描述。这里,我们提供一种更为快速便捷的安装方案,通过LIKE.TG云市场中的PHP全能运行环境镜像来进行搭建。首先,我们进入LIKE.TG官网的服务器控制台,选择需要安装LAMP集成环境的云服务器进行重装。然后,在重装的界面选择“服务市场->全能环境->PHP全能运行环境”镜像,输入自定义的服务器密码,点击“开始”进行系统重装。等待系统重装成功,我们即完成了LAMP集成环境的安装。连接服务器首先检查你的服务器安全组设置,确保其开放SSH使用的22和HTTP访问使用80端口以及我们上传文件的21端口。然后我们通过SSH软件登录服务器,如果你本地电脑是Windows情况下可以使用putty等软件,Linux及MacOS请使用终端进行连接。我这里以MobaXterm的终端软件为例,点击左上角的Session按钮,选择以SSH方式连接,在Remote host输入你的服务器的公网IP地址,Specify username输入你的用户名,如果你的服务器是Ubuntu系统,请输入ubuntu如果是CentOS系统则输入root。这里我们是CentOS系统,所以我们输入root。点击OK后,输入你设置的密码(默认不显示),即可连接到你的服务器,你会看到类似下面的页面。这样,你就进到你的服务器的页面了。查看数据库及FTP服务器的账户密码进入服务器后,镜像已经帮你搭建好了 Discuz!所需的环境,你只需要查看密码即可使用这个服务器。首先我们输入ls命令查看当前目录文件,然就我们会发现一个名为default.pass的文件,使用cat default.pass命令展示当前生成的密码。代码语言:javascript复制ls
cat default.pass你会看到类似下面的输出代码语言:javascript复制[root@VM_0_7_centos ~]# ls
README.txt anaconda-ks.cfg default.pass install.log install.log.syslog
[root@VM_0_7_centos ~]# cat default.pass
+----------------------------------------------------------------------
| YJCOM [ EASY CLOUD EASY WEBSITE]
+----------------------------------------------------------------------
| Copyright (c) 2015 http://yjcom.com All rights reserved.
+----------------------------------------------------------------------
MySQL root password: gOeuPMkjSbVn
MySQL database name: ZjI4meIu
MySQL user: ZjI4meIu
MySQL password: dk0KknIIXfn8
FTP account: www
FTP password: SvlLQX5nYEq5
[root@VM_0_7_centos ~]#部署Discuz!获取到FTP及数据库密码后,我们就可以部署Discuz!论坛了,首先,我们需要下载Discuz!的安装包。下载Discuz!从 2018 年 1 月 1 日起Discuz!只在官方 Git 发布,所以我们打开Discuz!的官方git,然后点击右边的克隆下载。下载完成后,我们就需要上传啦!上传Discuz!上传前我们需要用软件链接到FTP服务器才行,通过我们上一步获取的FTP账户www及密码SvlLQX5nYEq5使用ftp软件登录FTP服务器,这里我们依然以MobaXterm为例,点击左上角的Session按钮,选择以FTP方式连接,在Remote host输入你的服务器的公网IP地址,Username输入你的用户名,这里我们获取到的是www,输入www,点击OK后,输入你设置的密码,即可连接到你的服务器,你会看到类似下面的页面。接下来我们将下载的Discuz!文件解压出来,然后双击解压出来的upload文件夹,将所有文件全部上传到FTP服务器。上传完成后你就可以打开http://你的IP/install/访问安装页面啦!安装Discuz!访问http://你的IP/install/页面,会看到系统提示你可以进一步安装你的博客了。点击我同意后,系统可能会提示你不稳文件权限不对,那么我们要赋予这些目录写入权限才行。我们需要在你的www目录下执行chmod命令赋予这几个文件可写入的权限,使用下面的命令。代码语言:javascript复制cd /yjdata/www/www
chmod -R 777 uc_client/
chmod -R 777 uc_server/
chmod -R 777 data/
chmod -R 777 config/执行完后,刷新页面,这下你的Discuz!就可以继续安装了,我们点击下一步。接下来,需要选择安装类型,我们并非升级,所以选择全新安装 Discuz! X (含 UCenter Server)。然后继续点击下一步,这里需要我们输入数据库的信息,由于我们使用的本地自建的数据库,所以我们使用上面得到的数据库账户及密码。代码语言:javascript复制MySQL root password: gOeuPMkjSbVn
MySQL database name: ZjI4meIu
MySQL user: ZjI4meIu
MySQL password: dk0KknIIXfn8请按照图中填写,数据库服务器、数据库名、数据库用户名、数据表前缀保持默认,我们只需要修改数据库密码,系统信箱Email即可。数据库密码为上面的gOeuPMkjSbVn,系统信箱为你的邮箱服务器的信箱(可保持默认),管理员账户请自行填写(可保持默认),管理员密码填你记的住的密码。管理员Email为你自己的邮箱。填写完成后我们点击下一步。接下来系统会提示正在安装。等待十几秒,会提示安装成功,这样,你的Discuz!就部署完成了,赶快登陆到后台去进行相关设置吧!然后,我们登陆论坛后台http://你的IP地址/admin.php就可以对站点进行设置了。总结现在,你已经成功将Discuz! X3.4部署在你的LIKE.TG服务器上,怎么样,学会了吗?如果你是在生产环境使用本Discuz! X3.4,那么非常不推荐使用本地MySQL数据库,你可以尝试购买LIKE.TG云关系型数据库,云关系型数据库是一种高度可用的托管服务,提供容灾、备份、恢复、监控、迁移等数据库运维全套解决方案,可将您从耗时的Discuz!数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。
如何查询对方的IP地址?
IP地址作为一种定位方式,不仅仅代表位置,也会透漏出很多不同的信息。首先就是地理位置:来自哪个大洲-国家-省-市-街道,同时还包含经纬度、邮编等等。当我们想知道这个IP地址是否有害或者是否属于黑灰产业、机房流量时,我们可以通过在某个IP地址查询网站上输入IP地址,查询定位,查询到的不仅是对方的地理位置,还有网络属性、应用场景、风险属性、漏洞属性、AS拓扑关系等都可以看到。但是这一切的前提是,我们要先知道对方的IP地址。以下是一些可用于查找IP地址的技术方式。借用某人的计算机:这查询某人IP地址的最简单技术之一。可以借用计算机并通过使用ipconfig /all 命令或使用iplocation等在线服务查找 IP 地址详细信息来查找 IP 地址。无线网络:如果你的无线网络不够安全或者你与访客共享了无线网络,就会发生:有权访问你的无线网络的人也将共享你的公共IP地址。所以捕获公共和私有IP地址会变得很简单。在大多数路由器中,你可以选择查看谁连接到无线网络。如果你没有从路由器中找到IP信息,你也可以使用在线IP扫描仪。它会提供一个共享IP地址列表,方便找到你想要查找的IP。电子邮件:当今大多数电子邮件提供商都不会在标题中显示IP 地址。但是,某些不太受欢迎的电子邮件服务提供商或自托管邮件服务器可能会泄露你的公共IP地址。还有跟踪电子邮件工具,可让你从邮件标头跟踪发件人的IP地址。博客评论:这是一种监视某人IP地址的有趣方式。如果你是博客管理员,并且有人在你的博客上发表评论,那么你还可以在发表评论的同时获得作者的 IP 地址。日志记录:如果你有一个网站并试图捕获访问你网站的用户的IP地址,那么这非常简单。大多数 Web 开发语言都支持跟踪远程 IP 地址,这很容易从请求标头中检测到。例如,客户端 HTTP 标头 X-FORWARDED-FOR 可以提供远程 IP 详细信息。或者,在服务器端,编程语言提供实用程序来获取请求页面的计算机的IP 地址,例如 getRemoteAddr()。这些基于底层技术的信息可以在 Web 服务器日志中捕获或在数据库等系统中进行跟踪。互联网论坛:作为在线用户,我们大多数人往往是论坛的一部分在这里主要是讨论和分享话题。但是,除了论坛帖子之外,还有一些其他信息可供管理员获取,其中获取的信息之一就是IP地址。因此,如果你拥有一个论坛,那么获取用户的IP地址是很容易。社交媒体渠道:虽然我们都喜欢使用 Facebook、Twitter 等社交网站,但一个鲜为人知的事实是你的信息会被共享。站点管理员或站点用户可以轻松追踪 IP 地址。如果你没有社交媒体网络,那么你知道他人的IP地址?通过添加一个可点击的链接,将用户带到你的网站。通过这种方式,捕获用户的IP地址。大多数电子商务平台都使用类似的技术,其中链接或图像用于跟踪 IP 地址,通常称为网络信标。电子商务和消息传递应用程序:我们的IP Tracker工具允许你创建可跟踪的链接,将这些链接提供给你希望跟踪其 IP 的用户可以帮助你在访问此链接时跟踪IP地址。主机名:如果你知道机器的主机名,并且可以访问或在同一局域网内,那么你就可以查询到IP 地址。这可以通过在 Linux 机器上发出主机主机名命令来完成。作为此命令的输出者,可以查看IP地址。同样,可以使用 ping 或 nslookup 命令来获取 IP 地址。如果你不知道主机名并想获取 LAN 上的 IP 地址,则可以使用命令arp -a。这将提供网络上所有可用计算机的IP和Mac详细信息。Netstat 命令:Netstat 基本上是网络管理员最常用的命令之一。但是,Netstat可用于跟踪IP地址。要跟踪某人的IP地址,首先你可以使用Facebook 等社交媒体网络,同时确保关闭计算机上的所有其他窗口,并与需要跟踪IP地址的人开始聊天。开始聊天后,使用netstat命令作为 netstat -an。这将提供所有已建立连接的所有详细信息,包IP地址。从这里你可以跟踪每个IP地址的位置,从而推断出目标的IP地址。虽然这不会直接给出用户的IP地址,但是仍然可以获得信使的 IP 地址。结论其实查询IP地址的方法多样且简单,有的甚至不需要任何复杂的工具。所以大家在线时需要保持谨慎,防止他人获取你的IP地址,保护好自己的信息安全。
Discourse 论坛激活邮件问题
根据 Discourse 的官方推荐,我们使用的是 MailGun 的服务。在大部分情况下都没有问题,但是在一些特定的邮件地址,例如 iCloud,我们在发送激活邮件的时候有提示为:代码语言:javascript复制"message": "5.5.1 Error: need MAIL command - MAIL FROM error: 450 4.1.8 <[email protected]>: Sender address rejected: Domain not found",下面的图片显示了邮件服务提供商提供的错误日志信息:问题和解决上面问题的主要原因是一些特定的邮件服务商有垃圾邮件校验策略。尤其是 iCloud,在 iCloud 中对发送电子邮件的域名地址会进行校验。因为我们的服务使用了子域名的发送,我们发送的域名地址实际为:mail.visafn.com而不是传统的visafn.com因此,iCloud 没有办法校验上面的地址,而认为系统发送的邮件为垃圾邮件而拒收了。解决办法解决的办法也非常简单,需要确定mail.visafn.com我们发送邮件使用的这个二级域名的 MX 记录在 DNS 上要存在。如上图标记的内容。二级域名的 MX 记录需要添加到你的 DNS 上,并且上面的记录要显示为被校验。当然更新 DNS 不会马上生效,你如果继续往 iCloud 中发送的话,可能还是会出现间歇性错误。等待几个小时后再进行测试,通常能够解决发送邮件被标记为垃圾邮件的问题。https://www.ossez.com/t/discourse/14216
BBS论坛(二十四)
24.1.编辑板块cms/js/banners.js代码语言:javascript复制$(function () {
$('.edit-board-btn').click(function () {
var self = $(this);
var tr = self.parent().parent();
var name = tr.attr('data-name');
var board_id = tr.attr('data-id');
zlalert.alertOneInput({
'title': '编辑板块',
'text': '请输入版块名称',
'placeholder': name,
'confirmCallback': function (inputValue) {
zlajax.post({
'url': '/cms/uboards/',
'data': {
'board_id': board_id,
'name': inputValue
},
'success': function (data) {
if (data['code'] == 200) {
window.location.reload();
} else {
zlalert.alertInfo(data['message'])
}
}
});
}
});
});
});24.2.删除板块cms/js/banners.js代码语言:javascript复制$(function () {
$('.delete-board-btn').click(function (event) {
event.preventDefault();
var self = $(this);
var board_id = self.parent().parent().attr('data-id');
zlalert.alertConfirm({
'title': '删除版块',
'msg': '确认删除该版块吗?',
'confirmCallback': function () {
zlajax.post({
'url': '/cms/dboards/',
'data': {
'board_id': board_id
},
'success': function (data) {
if (data['code'] == 200) {
window.location.reload();
} else {
zlalert.alertInfo(data['message']);
}
}
});
}
})
})
});24.3.首页动态显示板块(1)front/views.py代码语言:javascript复制@bp.route('/')
def index():
banners = BannerModel.query.order_by(BannerModel.priority.desc()).limit(4)
boards = BoardModel.query.all()
context = {
'banners':banners,
'boards':boards
}
return render_template('front/front_index.html',**context)(2)front/index.py代码语言:javascript复制 <div class="sm-container">
<div style="margin-bottom: 10px;">
<button class="btn btn-warning btn-block">发布帖子</button>
</div>
<div class="list-group">
<a href="#" class="list-group-item active">所有板块</a>
{% for board in boards %}
<a href="#" class="list-group-item">{{ board.name }}</a>
{% endfor %}
</div>
</div>
BBS论坛(二十八)
28.1.帖子分页功能完成(1)manage.py通过命令生成100个帖子,用于测试代码语言:javascript复制@manager.command
def create_test_post():
for x in range(1,100):
title='我是标题%s'%x
content='我是内容,我的编号是%s'%x
board=BoardModel.query.first()
author=FrontUser.query.first()
post=PostModel(title=title,content=content)
post.board=board
post.author=author
db.session.add(post)
db.session.commit()
print('测试帖添加成功')(2)front/views.py代码语言:javascript复制@bp.route('/')
def index():
banners = BannerModel.query.order_by(BannerModel.priority.desc()).limit(4)
boards = BoardModel.query.all()
#获取当前页码数
page = request.args.get(get_page_parameter(), type=int, default=1)
# 显示10条帖子
start = (page - 1) * config.PER_PAGE
end = start + config.PER_PAGE
posts = PostModel.query.slice(start, end)
# bs_version=3:表示用Bootstrap v3版本
pagination = Pagination(bs_version=3,page=page,total=PostModel.query.count(),
outer_window = 0, inner_window = 2)
context = {
'banners':banners,
'boards':boards,
'posts':posts,
'pagination':pagination,
}
return render_template('front/front_index.html',**context)(3)front_index/html代码语言:javascript复制 <div style="text-align: center">
{{ pagination.links }}
</div>28.2.板块过滤功能完成(1)front_index.html代码语言:javascript复制 <div class="sm-container">
<div style="margin-bottom: 10px;">
<a class="btn btn-warning btn-block" href="{{ url_for('front.apost') }}" id="add-post-btn">发布帖子</a>
</div>
<div class="list-group">
{% if current_board %}
<a href="/" class="list-group-item">所有版块</a>
{% else %}
<a href="/" class="list-group-item active">所有版块</a>
{% endif %}
{% for board in boards %}
{% if board.id==current_board %}
<a href="{{ url_for('front.index',bd=board.id) }}"
class="list-group-item active">{{ board.name }}</a>
{% else %}
<a href="{{ url_for('front.index',bd=board.id) }}" class="list-group-item">{{ board.name }}</a>
{% endif %}
{% endfor %}
</div>
</div>(2)front/views.py代码语言:javascript复制@bp.route('/')
def index():
board_id = request.args.get('bd', type=int, default=None)
# 获取当前页码数
page = request.args.get(get_page_parameter(), type=int, default=1)
banners = BannerModel.query.order_by(BannerModel.priority.desc()).limit(4)
boards = BoardModel.query.all()
# 显示10条帖子
start = (page - 1) * config.PER_PAGE
end = start + config.PER_PAGE
posts = None
total = 0
if board_id:
query_obj = PostModel.query.filter_by(board_id=board_id)
posts = query_obj.slice(start,end)
total = query_obj.count()
else:
posts = PostModel.query.slice(start, end)
total = PostModel.query.count()
# bs_version=3:表示用Bootstrap v3版本
pagination = Pagination(bs_version=3,page=page,total=total,outer_window = 0, inner_window = 2)
context = {
'banners':banners,
'boards':boards,
'posts':posts,
'pagination':pagination,
'current_board':board_id #把当前板块id传到前端,前端添加“active”样式
}
return render_template('front/front_index.html',**context)
匿名IP在网络爬虫中的应用探索
网络爬虫成为获取和分析数据的重要工具,因为这是顺应数据分析重要性连年提高的。然而,在进行大规模数据采集时,面临着诸多挑战,如反爬虫策略、IP封禁等。为了应对这些问题,匿名IP技术应运而生,并在网络爬虫中发挥了重要的作用。本文将探索匿名IP在网络爬虫中的应用,分析其优势和使用注意事项。什么是匿名IP?匿名IP是指通过代理服务器获取,可以模拟不同地理位置的IP,使爬虫在访问目标网站时具有更高的隐私和匿名性。匿名IP可以通过公开的代理服务器、付费的代理服务或自建代理池来获取。匿名IP的优势使用匿名IP可以带来以下几个优势:1.隐私保护:匿名IP避免暴露真实网络身份。这对于需要保密数据采集活动的组织或个人来说尤为重要。2.反反爬虫策略:许多网站采取了反爬虫策略来限制或阻止爬虫的访问。使用匿名IP可以规避这些反爬虫策略,让爬虫能够正常访问目标网站。3.地理定位:匿名IP可以模拟不同地理位置的IP,使爬虫可以在全球范围内访问和采集数据,突破地域限制。4.并发访问:通过使用多个匿名IP,爬虫可以实现并发访问目标网站,提高数据采集的效率。匿名IP的应用场景匿名IP在网络爬虫中具有广泛的应用场景,包括但不限于以下几个方面:1.数据采集和分析:匿名IP可以帮助爬虫访问各种网站并采集所需的数据,如商品信息、社交媒体数据、新闻文章等。这些数据可以用于市场研究、竞争情报分析、舆情监测等领域。2.SEO优化:匿名IP可以用于进行竞争网站的排名监测和关键词分析,帮助优化网站的SEO策略。3.价格比较与市场分析:通过使用匿名IP,可以访问不同地区的电子商务网站,收集商品价格、评论和销售数据。这样可以进行价格比较和市场分析,为企业和消费者提供更准确的产品信息。4.社交媒体数据采集:匿名IP可以用于采集社交媒体平台上的公开数据,如用户信息、帖子内容、评论等。这对于社交媒体分析、舆情监测和市场洞察非常有用。5.内容聚合与信息监测:匿名IP可以用于构建内容聚合平台或新闻资讯网站,收集和聚合不同来源的内容。同时,也可以使用匿名IP监测特定网站或论坛上的信息更新,及时获取感兴趣的内容。总结而言,匿名IP在网络爬虫中的应用场景包括数据采集、竞争情报收集、SEO优化、价格比较、社交媒体数据采集、内容聚合等领域。它提供了更多的灵活性和隐私保护,帮助用户获取更准确的数据,并支持各种商业和分析需求。
大数据计算加速论坛
背景介绍4月23日09:00-12:45,在DataFunSummit2022:大数据计算架构峰会上,由LIKE.TG大数据资深高级工程师熊训德出品的大数据计算加速论坛,将邀请来自腾讯、阿里巴巴、矩阵起源、喜马拉雅的5位技术专家,就相关主题进行深度分享,欢迎大家一起探讨交流。
具体日程
详细介绍
出品人:熊训德LIKE.TG 大数据资深高级工程师个人介绍:四川大学硕士毕业后加入腾讯,在LIKE.TG大数据从事 hadoop 生态相关的云存储和计算等后台开发,专注于研究大数据、虚拟化和人工智能等相关技术。嘉宾介绍:1. 王华腾讯高级工程师个人介绍:华中科技大学计算机学院硕士,毕业后加入LIKE.TGEMR,现主要负责LIKE.TGEMR 监控自动化运维模块的开发工作。演讲主题:云原生混合算力助力计算加速演讲提纲:1.大数据资源使用现状2. 大数据混合算力部署方案离在线容器化部署方案AM资源限制实现YARN或标签调度3. 混合算力自动弹性能力EMR自动弹性扩缩容介绍感知触发加速资源扩容加速4. 落地实践听众收益:大数据计算效率问题和解决方案云原生混合算力计算加速如何保证作业稳定性LIKE.TGEMR如何助力云原生弹性加速计算能力2. 董国平 阿里云高级技术专家个人介绍:2010年加入阿里巴巴,目前服务于阿里云计算平台事业部,长期从事计算平台多租系统和系统安全建设,熟悉安全容器,虚拟网络和 K8s 等。演讲主题:大数据平台 MaxCompute 公有云多租户设计演讲提纲:公有云大数据平台在多租户支持的程度和实现方式上有所差异。该主题主要介绍在公有云大数据平台多租实现方案中需要考虑的问题和面临的挑战并介绍了 MaxCompute 在计算和存储多租实现上的特点和优势。听众受益:了解大数据平台中多租方案设计中需要关注的问题和挑战了解强多租方案的可能技术路线了解 MaxCompute 的产品特色3. 金海矩阵起源研发VP
个人介绍:大数据、高性能计算和分布式系统领域技术专家。前Zilliz研发负责人,从0到1完成向量数据库Milvus的研发。曾任职宝马和爱立信核心技术团队,具备丰富的行业经验和产品开源经验。国内第一个GPU与向量数据库研发负责人,上海交通大学EE专业硕士。演讲主题:新一代超融合数据库的技术挑战演讲提纲:当前大数据系统需要处理的业务场景丰富,数据类型众多,数据格式复杂。这就导致,整个大数据体系的组件也非常多。而如此复杂的大数据技术栈,也就给企业应用大数据技术,带来了巨大的成本。而这样的高成本,也必然会阻碍大数据技术在各行各业的推广。为了解决这样的复杂性,业内已经出现了一些具备融合特征的数据库类型:HTAP,期望采用一套系统来同时处理交易型和分析型负载;而湖仓一体,则是希望统一数据湖和数据仓库的处理能力;流批一体,单一系统具备流处理和批处理的能力。新一代超融合数据库希望能够在现有融合技术的基础上,采用单一系统支撑更多的业务负载,从而进一步简化大数据平台的构建复杂度。本次分享将从计算,存储等层面,分析超融合数据库面临的主要技术挑战。听众收益:当前大数据和数据库的发展现状超融合数据库在计算和存储层面的主要挑战和解决办法4. 陈涛喜马拉雅技术专家个人介绍:喜马拉雅大数据集群架构负责人,主要负责大数据集群稳定性提升。曾负责从0到1构建喜马拉雅大数据计算平台团队,包括计算引擎、调度系统、大数据监控系统和可视化系统等。演讲主题:喜马拉雅大数据弹性云的方案演进演讲提纲:集群现状、问题与优化存储治理计算弹性计算缓存加速听众收益:集群稳定性的一些优化如何通过弹性云方案作为IDC资源的重要补充上云过程中的一些思考5. 陈曦腾讯高级工程师个人介绍:腾讯高级软件工程师,负责腾讯 Alluxio 产品开发与维护。演讲主题:腾讯 Alluxio 加速下一代大数据业务落地演讲提纲:介绍 Alluxio 概念、原理、应用场景,以及新特性介绍。分享腾讯在 Alluxio 上的新特性研发和性能稳定性方面的改进。听众收益:介绍 Alluxio 新特性,腾讯的落地场景。直播报名识别二维码,免费报名报名成功后,请按照提示,入群收看。
BBS论坛(二十六)
26.发布帖子前台代码逻辑完成(1)front/hooks.py代码语言:javascript复制from .views import bp
from flask import session,g
from .models import FrontUser
import config
@bp.before_request
def before_request():
if config.FRONT_USER_ID in session:
user_id=session.get(config.FRONT_USER_ID)
user=FrontUser.query.get(user_id)
if user:
g.front_user=user(2)front/init.py代码语言:javascript复制from . import hooks(3)front/front_base.html代码语言:javascript复制 <ul class="nav navbar-nav navbar-right">
{% if g.front_user %}
<li class="dropdown">
<a class="dropdown-toggle" id="dropdownMenu1" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="true">
{{ g.front_user.username }}
<span class="caret"></span>
</a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li><a href="#">个人中心</a></li>
<li><a href="#">设置</a></li>
<li><a href="#">退出登录</a></li>
</ul>
</li>
{% else %}
<li><a href="{{ url_for('front.signin') }}">登录</a></li>
<li><a href="{{ url_for('front.signup') }}">注册</a></li>
{% endif %}
</ul>(4)front/apost.js代码语言:javascript复制$(function () {
var ue = UE.getEditor('ueditor', {'serverUrl': '/ueditor/upload/'});
$('#submit-btn').on('click', function (event) {
event.preventDefault();
var titleInput = $('input[name=title]');
var boardSelect = $('select[name=board_id]');
var title = titleInput.val();
var board_id = boardSelect.val();
var content = ue.getContent();
zlajax.post({
'url': '/apost/',
'data': {
'title': title,
'board_id': board_id,
'content': content
},
'success': function (data) {
if (data['code'] == 200) {
zlalert.alertConfirm({
'msg': '帖子发表成功',
'cancelText': '返回首页',
'confirmText': '再写一篇',
'cancelCallback': function () {
window.location = '/';
},
'confirmCallback': function () {
titleInput.val('');
ue.setContent('');
}
});
} else {
zlalert.alertInfo(data['message']);
}
}
})
});
});(5)config.py代码语言:javascript复制UEDITOR_UPLOAD_PATH=os.path.join(os.path.dirname(__file__),'images')
dz论坛数据库php网址,discuz论坛更换域名,搬家步骤
大家好,又见面了,我是你们的朋友全栈君搬家步骤具体如下:1、打包数据库文件保存到本地。2、打包网站根目录所有程序(discuz)保存到本地。3、上传网站程序包和数据库包到新的空间,将数据库上传到新的服务器中。4、找到 config\config_global.php 文件,修改以下3处内容:$_config[‘db‘][‘1‘][‘dbuser‘] = ‘数据库用户名‘;$_config[‘db‘][‘1‘][‘dbpw‘] = ‘数据库密码‘;$_config[‘db‘][‘1‘][‘dbname‘] = ‘数据库名‘;5、找到 config\config_ucenter.php 文件,修改以下5处内容:define(‘UC_DBUSER‘, ‘数据库用户名‘);define(‘UC_DBPW‘, ‘数据库密码‘);define(‘UC_DBNAME‘, ‘hbc‘);define(‘UC_DBTABLEPRE‘, ‘`数据库名`.pre_ucenter_‘);define(‘UC_API‘, ‘http://域名/uc_server‘); 如果更换域名 请填入新域名6、找到 uc_server\data\config.inc.php 文件, 修改以下3处内容:define(‘UC_DBUSER‘, ‘数据库用户名‘);define(‘UC_DBPW‘, ‘数据库密码‘);define(‘UC_DBNAME‘, ‘数据库名‘);到这里程序文件就修改完毕了。如果网站更换域名还需要以下2布操作:7、登录 http://域名/uc_server 更新应用信息选择应用管理 –> 编辑 –> 修改 “应用的主 URL” 为新域名8、登录 http://域名/admin.php 更新“应用域名”信息选择全局 –> 域名设置 –> 应用域名 更新为新网址发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160095.html原文链接:https://javaforall.cn
“仅陌生人可见”的社会,已经来临
前段时间,阅读App“微信读书”增加了一个功能:用户在阅读过程中发表评论或留言时,可以选择“仅陌生人可见”。如此一来,用户的留言仅在公域里传播,不用担心好友看到。这一产品功能刚发布,就马上在社交媒体引起热议,不少用户表示“很实用”“自己非常需要”。似乎,在今天的互联网上,虽然人们依然渴望被看到,但仅仅渴望被陌生人看到,对熟人却“敬而远之”。“仅陌生人可见”受到欢迎的背后,实际上潜藏着当今用户某种存在已久的社交焦虑。从论坛到社交媒体:社交关系的演化互联网的诞生与发展就是一段关于社交方式演化的历史。最初,网民在各类论坛上,围绕不同的主题进行交流。那时,交流是以内容为中心展开的,社交关系是通过内容而联结的。互联网的匿名性让人们不再拘谨,人们能够随性地谈天说地。彼时流行的一句名言揭示了这种心态,“在互联网上,没人知道你是一条狗”。这句话出自《纽约客》杂志于1993年刊登的一幅漫画,其蕴含的意义显而易见——作为一个匿名的网民,你可以畅所欲言。然而,自从Facebook等基于熟人关系的社交媒体应用出现后,网民在网络上的匿名性开始被削弱。比如早期在人人网上,即便你刚刚注册账号没多久,你也很可能会发现自己的小学同学或某个许久尚未联系的好友,仅仅因为你们拥有一些共同好友。十余年前,移动互联网的发展催生了越来越多的社交媒体应用,这些应用的形态也发生了变化。人们越来越少在电脑前使用社交媒体,取而代之的是越来越轻薄便捷的智能手机。互联网上,人们的身份也发生了微妙的变化,从“网民”成为了“用户”。不同于旧时围绕内容展开交流,移动互联网时代的交流以一个又一个的用户作为节点而联结成一个巨大的社会关系网络。人们开始发现,社交媒体前所未有地融入现实生活。互联网本来是解放人们的,让人们无拘无束,但如今人们却发现,白天已经见够了领导同事,回家打开手机,看到的却还是领导同事。甚至在自己新开设的社交媒体账号上,还会被推荐领导和同事,只因他们是“你可能认识的人”。从商业角度来说,软件的社交功能,是符合开发者的商业利益的。社交意味着传播,意味着能够吸纳更多用户投入到使用一款软件当中。如今网购、游戏、音乐等软件都有社交功能。但在某种程度上,过于繁复的社交功能,尤其是熟人社交,如今已经加重了用户的负担,催生了一种社交焦虑。过度连接的负担人们一方面希望在互联网上保持匿名性,另一方面又离不开以互联网作为媒介的熟人社交,但这二者是存在矛盾的。面对这一困境,人们开始运用各种策略,在匿名和熟人社交中取得平衡。比如现在很多社交媒体上,出现了一群昵称为“momo”的用户,用户正是通过这一同质化昵称的方式来隐姓埋名。“互联网上没人知道你是一条狗”这句话已不再奏效,人们只能主动地给自己戴上隐身符。社交媒体本是服务于人们日常生活的工具,但当社交媒体承载了太多的现实社交关系,人们则需要花费过多精力在社交媒体上,在社交媒体上的交流也不再轻松。例如现在有很多人自称“患有”文字讨好症,在网上聊天时,“哈哈”已经不能够代表喜悦了,“哈哈哈哈哈哈哈哈”才说明你是真的开心。而“仅陌生人可见”更意味着减轻用户的社交负担,化解用户的社交焦虑。所有的社交行为都需要遵循一整套的社会规范,在日常生活中,即便人们没有特地留心,人们也会自然而然地做出相应的行为。比如见到老师要点头微笑,对话要用尊称。但在网络上,人们渴望挣脱现有社会关系的束缚,单纯地就观点展开交流。而“仅陌生人可见”正能帮助用户更加靠近这一目标。设想一名用户在微信读书上看到了一位好友不大合理的观点,本想驳斥,却发现那位好友是某个朋友,或者是一位不大熟悉的同事,用户此时很可能就会打消争辩的念头。而如果用户面对的是一个完全陌生的人,他就不会有这些社交压力,因为他只会关注内容本身。在互联网刚刚问世时,陌生人社交占主要地位,但随着互联网与现实生活的融合越来越紧密,熟人社交变得越发重要。无处不在的熟人社交在为现代生活提供便利和提升效率的同时,也侵扰着个体的生活空间,导致人们进入了一种“过度连接”的状态。近几年,“边界感”一词时常在公共讨论中被提起,这也意味着人们意识到自身的边界不断地被蚕食,而愈发想要维护好自己的社交范围。在人们过度连接的背景下,减少连接,甚至“断连”,就成为了人们的一种心愿。这也是为什么“仅陌生人可见”受到欢迎的原因。“仅陌生人可见”与观众区隔凡是社会行为必然存在“表演”的成分。著名社会学家戈夫曼的“拟剧论”认为人们在现实生活中会想象有观众在注视自己,从而在前台做出具有表演性质的行为,而在更具隐私性的后台,人们放松自我,做出更加本真的自己。前台后台之分意味着表演是存在边界的,面对不同的“观众”和情境,人们表演的策略是不同的,这些策略可以理解为印象管理。换言之,观众区隔是进行成功的表演的必然要求。就好像演员需要服化道,生活中的“表演”也离不开物品的协助。物品既包括实体的物品,比如服饰,也包括看不见摸不着的品味、文化等等。虽然读书本应是一件稀松平常的事情,但自古以来,书籍都跟品味深深地捆绑在一起。尽管人们的品味不尽相同,但人们大体上承认,有一些书是高级的,而有一些书是没那么上得了台面的。所以围绕书籍,人们常常展开“品味表演”。通过这种品味表演,人们彰显了自身所处的圈层,并与其他群体区隔开来。著名新闻史学家迈克尔·舒德森(Michael Schudson)在分析19世纪《纽约时报》的崛起时就曾谈到,大多数读者之所以阅读《纽约时报》,只是因为精英阶层在读。不过,受过良好教育、较富裕的群体不仅读《纽约时报》,也阅读“故事类”报刊杂志,但他们阅读时会带着羞耻感。由此可见,阅读《纽约时报》这类高级报纸不仅能够彰显品味,还能凸显社会地位,而阅读有趣却“低劣”的报刊会有失身份。由于微信读书结合了微信上的社交关系,而微信又以熟人社交占主导,用户在使用微信读书时,难免会想象微信好友,也就是那些现实生活中的熟人,会如何看待自己。读书时做笔记是很多人的习惯。在微信读书上,用户在阅读过程中留下的评论,本质上是一种“数字痕迹”。通过这一痕迹,他人可以一窥用户的某些观点与思想,但人们会担心,自己的观点会不会“幼稚”,会不会“肤浅”,有没有“水平”,好友又是否会对自己有所误解。特别是某些书籍探讨的是具有争议性的话题,比如性别问题、环保问题、贫富差距问题等等。而一般来说,人们更希望与好友保持和谐的关系,并不那么愿意直面价值观的冲突与矛盾。如果将自己的所有想法都展示给好友,可能会给自己带来麻烦,给别人留下自己太“激进”,或太“保守”,又或太“平庸”的印象。麻省理工学院教授雪莉·特克尔在其代表性著作《群体性孤独》中表示,在互联网中,人们真实、复杂的一面被缩小了,完美、精致的一面则被放大了。在分享的过程中,人们满足了自己被重视、被认可、被崇拜的需要,甚至还会渐渐对自己产生了一种自带光环的幻觉,迷恋上这种“自我中心主义社交”。不同于微信朋友圈,微信读书上面没有分组功能。这意味着,在微信读书上,用户无法跟使用朋友圈时一样,控制发布内容的可见对象。换言之,用户不能决定有哪些好友会看到自己的留言,一般的观众区隔在微信读书上是失效了。在这种背景下,“仅陌生人可见”就成为了一种简单高效的观众区隔方式,用户直接屏蔽掉所有的熟人,不再需要劳心如何表演自己,让阅读回归到一种更加纯粹的状态。当现今各种互联网的产品都在致力于“连接”而带来过度的连接时,或许一种新的互联网法则正在形成,那就是在一定情境下减少连接,甚至直接断连。各项产品的开发者也应当意识到,社交在某些社会行为中或许是不重要的,又或者用户更需要具有匿名性的陌生人社交。无论如何,技术应该让人们的社交变得更加轻松,而不是增加焦虑。参考资料来源:[1]董晨宇 丁依然.(2018).当戈夫曼遇到互联网——社交媒体中的自我呈现与表演. 新闻与写作(01),56-62.[2]黄典林,刘晨宇 杨润苗.(2022).弹性断连、专注力管理与数字化时代的自我边界工作. 新闻与写作(06),14-26.[3]彭兰.(2019).连接与反连接:互联网法则的摇摆. 国际新闻界(02),20-37.[4]迈克尔·舒德森(2009). 发掘新闻: 美国报业的社会史. 北京: 北京大学出版社.本文作者:梁晓健TRI特约作者
又是神经网络!还能用来盗取XX女演员信息
来源:煎蛋网四月初,名为Egor Tsvetkov的俄罗斯摄影师利用照片和应用程序FindFace(能利用面部识别将社交媒体帐户信息与照片联系起来的神经网络),向我们展示了我们究竟故意在网上泄露了多少信息。不幸的是,他试图警告我们的东西已经变为了现实。据Global Voices报道,在俄罗斯媒体报道了Tsvetkov的项目过后三天,俄罗斯类似4Chan的在线论坛Dvach的用户们,开始利用FindFace这一应用程序分析色情片女演员的照片。这些人一旦找到匹配的对象之后,会成群结队地在俄罗斯社交媒体网络Vkontakte上面攻击这些女性,并贴出这些女演员朋友和家庭成员的照片。当然,这些照片并不局限于俄罗斯女性。上图中的女性应该是一名美国女大学生。这些拥有轻微厌女症的信息泄露者们做出这些事情的目的是“道德愤怒”,他们认为在色情行业工作的女性堕落而又虚伪。他们将他们那幼稚的废话包装成了大义凛然的借口。Vkontakte迅速地关闭了扫然这些女性的论坛。然而,FindFace在接受采访时承认,他们无力阻止此类事情的发生,不过他们将提供警方需要的信息来找出那些应该为骚扰事件负责的用户。俄罗斯安全公司Kaspersky曾写过一篇冗长的博客,并在该博客中详细阐述了FindFace的工作原理,表示应用程序常常会出现失误,因此某些人有可能因此而被误认。这所有的事情都让人非常不安。照片识别和机器学习技术只会变得越来越好。而谷歌图片这类应用程序虽然没有FindFace那么可怕,但它也能以惊人的准确率鉴定出你相机胶卷中的大部分物品。在安全性和执法这方面,面部识别技术并不是什么新鲜事。但和大部分技术一样,它在别有用心之人手上就会变成女性的地狱。
区块链媒体只是圈内的媒体
据链讯头条报道:区块链的热潮下,市场瞬间涌现出了数百个围绕区块链新闻报道的媒体平台。区块链媒体跑步入场,引发了资本新一轮的狂欢,频频传来融资的好消息。虽然短时间区块链媒体一时间看似风光无限,但当区块链的热潮退去,能够做到稳定输出优质内容的平台少之又少。 毕竟区块链还属于新生行业,相对输出的信息较少,同时区块链还缺乏成熟的应用场景,使信息的来源再度受限。导致了现在的区块链媒体同质化严重。另一方面,区块链媒体承诺的去中心化、可溯源等技术特点,虽然在实际应用上有了较好的完善,但是由于每个平台的服务范围有限,这些优势也并没有得到很好的体现。而且现在的区块链媒体也都服务于区块链行业的相关资讯,这也让区块链媒体成了圈内的媒体。 据链讯头条报道:现在的区块链媒体凭借着融资还能在风口里面待一会儿,可是一个项目如果创造不出收益,仅凭热度是不能存活下去,这也是区块链媒体现在面临的主要发展问题,优势已经提出,融资已经到手,可是发展的路在哪里? 各家区块链媒体都有自己的发展特色,自己的一条发展道路和自己的主攻方向,也都想成为这个行业的领头羊,可是行业尚处于发展阶段,一时间涌进来这么多的公司,只能让大家拥挤在这个跑道上,寸步难行。就像之前的共享单车,凑成了红橙黄绿青蓝紫,各级拉锯式的打补贴战,谁也不想在还没看到终点的时候就退出,到最后,没有资金维持的破产了,坚持到最后的,也并没有赢得有多漂亮。区块链媒体和共享单车又有一些不一样,共享单车作为出行的需要,是刚需。而媒体行业现阶段虽然有着各种各样的不足,但还处于一个用户还可以接纳的阶段,只是因为用户因为区块链的热度和优势对于区块链媒体创造的媒体行业的未来充满了期待,可是当区块链媒体迟迟做不出成绩,用户失望之后大概就是区块链媒体的没落之时了。 其实,在发展的前期,区块链媒体公司的实力并没有太大的差距,在这个时候,报团取暖不失为一种冲出重围的好方法,多家公司合作,取之长,补之短,实现资源共享,通过对于区块链媒体行业话语权的掌握,来实现对整个行业的垄断,进而推动整个行业的发展,早日实现区块链媒体的日常化。
Facebook全球宕机6小时!小扎损失60亿,15亿用户数据被出售
新智元报道 来源:verge编辑:yaxin【新智元导读】Facebook崩了,推特高傲尽显。美东时间10月4日上午11:45左右,社交平台Facebook、Ins,以及WhatsApp陷入大规模瘫痪,宕机近6个小时。就在昨日,Facebook前雇员揭露了其算法黑箱内幕。先别说5年All in元宇宙,这一次大宕机,无疑再次给社交老大泼了一盆冷水。FACEBOOK DOWN!啊,没错,崩了,2008年以来首次...美东时间10月4日上午11:45左右,社交媒体Facebook,Instagram以及即时通讯软件WhatsApp陷入大规模瘫痪,宕机近6个小时,刷新了自 2008年最长宕机时长。其中包括美国英国在内的数十个国家和地区发生了中断故障,直到4日下午开始恢复部分运营。由此,Facebook股价盘中暴跌6%,扎克伯格个人财富一日蒸发逾60亿美元。同时,# ins崩了这一话题在国内冲上热榜,引起网友激烈讨论。Facebook全球宕机,究竟怎么肥四?宕机6小时,1.6亿美元损失,因DNS故障网站监测组织Downdetector称,这是其见过的最大规模此类故障,全球出现1060万份问题报告。Facebook的首席技术官Mike Schroepfer在推特发帖称,向所有因Facebook服务停摆而受影响的所有人真诚致歉。他并未透露是何原因,只是说「我们在经历网络问题,团队力求尽快解除故障、尽快恢复正常。」互联网研究人士Brian Krebs表示,已确认宕机源于域名系统(DNS)故障。两位工程师就Facebook宕机问题做了分析,DNS名称停止解析,基础设施IP无法访问,这就好像有人一下子从Facebook的数据中心「拔出了电缆」,并断开与互联网的连接。这是因为 DNS 和互联网上的许多其他系统一样,也有它的路由机制。2008年,Facebook月活用户1亿,当年宕机约一天,影响约8000万用户。而今Facebook月活用户近30亿,导致其全球 27 亿用户中的许多人无法访问该服务。这次事故影响到了全球多个国家,包括严重依赖 WhatsApp 进行通讯的拉美国家。有专家估计,Facebook、Instagram、WhatsApp 全球服务中断一小时将给全球经济造成 1.6 亿美元的损失。Facebook三大App停摆对另一老牌社交媒体推特来说无疑是利好消息。Facebook溃败,许多用户只能转战推特。Twitter的官方账号甚至也赶潮流发推给用户打招呼。吹哨人现身,美议员:FB应拆分「Facebook 一次又一次地表明,他们会选择置利益于安全之上。」就在周日, Facebook前雇员Frances Haugen在美国60 Minutes节目上揭露了这个世界上最强大的社交媒体平台 Facebook 更多的内部运作机制。她指控,一家致力于产品优化的公司,却采用了放大仇恨言论的算法谋取利益。Haugen声称问题的根源在于「2018年推出的算法控制了你在平台上看到的东西」。Facebook为了提高用户的参与度,发现最好的参与方式便是向用户灌输恐惧和憎恨。因为激发人们的愤怒比激发其他情绪更容易。美国国会众议院成员Alexandria Ocasio-Cortez表示,Facebook爆发大规模宕机事故,这凸显出该公司在全球通信和其他服务领域的垄断地位。就在刚刚,美国民主党众议员 Alexandria Ocasio-Cortez 在推特上表示,Facebook 周一发生的大规模宕机事故是对该公司垄断全球通讯和其他服务的一次提醒,再次表明 Facebook 应该被分拆。在此之前,Facebook创始人小扎曾被指控,他就像个国王一样统治20多亿人。小心!15亿用户数据被出售在 Facebook 全球网络服务中断期间,据称在黑客论坛上有超过 15 亿 Facebook 用户的数据被出售。2021年9月下旬,一个知名黑客论坛的用户发布了一份声明,声称拥有超过15亿 Facebook 用户的个人数据。这些数据目前正在各自论坛平台上出售。根据论坛的海报,所提供的 Facebook 用户个人资料包括:姓名电子邮件地址性别电话号码用户ID一位潜在的买家表示,他们为了购买100万 Facebook 用户账户的数据花费了5000美元。这些交易员声称,他们代表的是一个运营了至少4年的网络搜索集团,并拥有18000多个客户。他们是通过抓取,并非是从黑客或泄露个人用户的账户来获得这些数据的。抓取是在计算机程序的帮助下自动收集公开可用和可在线访问的数据的过程。这些数据的大部分来源于简单的Facebook 个人资料销毁,而这些资料被用户设置为「公开」。不幸的是,绝大多数的个人信息都是由 Facebook 用户自己免费分享并向公众开放的。另一种非法的数据抓取方法是通过造假 Facebook 调查或测验。文章开头作者附上了重要说明:这与 2021 年 10 月 4 日发生的全球 Facebook 中断完全无关。这篇新闻发布的时间和 Facebook 中断构成了一个不幸的巧合,导致许多人错误地假设两者之间存在联系。推特高傲尽显要说FB等社交平台崩溃,国外网友最先崩了!国内网友也来掺一手,在微博等平台上展开激烈讨论。还有网友表示费解,「我不理解为啥上热搜,搞的钱国人民都用这个软件一样。」不知看到这张图,你脑海里是否想起了那首音乐(doge)参考资料:https://www.theverge.com/2021/10/4/22708989/instagram-facebook-outage-messenger-whatsapp-errorhttps://www.privacyaffairs.com/facebook-data-sold-on-hacker-forum/https://blog.cloudflare.com/october-2021-facebook-outage/https://www.mirror.co.uk/news/world-news/facebook-instagram-whatsapp-down-huge-25135914
用JAVA的DEA算法衡量社交媒体页面的流行度
Measuring the Social Media Popularity of Pages with DEA in JAVA原文作者:Vasilis Vryniotis原文地址:http://blog.datumbox.com/measuring-the-social-media-popularity-of-pages-with-dea-in-java/译者微博:@从流域到海域译者博客:blog.csdn.net/solo95用JAVA的DEA算法衡量社交媒体页面的流行度在前面的文章中,我们讨论了数据包络分析(Data Envelopment Analysis)技术,我们已经看到它如何被用作一个有效的非参数排序算法。在这篇博文中,我们将开发出一个JAVA数据包络分析的实例,我们将用它来评估网络上的网页和文章的社交媒体流行度。该代码是开源的(在GPL v3 license下),您可以从Github免费下载。更新:Datumbox机器学习框架现在是开源的,可以免费下载。查看包com.datumbox.framework.algorithms.dea以查看Java中Data Envelopment Analysis的实现。数据包络分析在JAVA中的实现代码是用JAVA编写的,可以直接从Github下载。它是根据GPLv3许可的,所以可以随意使用它,修改它,或者再分发。该代码实现了数据包络分析(Data Envelopment Analysis)算法,使用lp_solve库来解决线性规划问题,并使用Web搜索引擎优化分析(Web SEO Analytics )索引提取的数据,以构建基于Facebook,Google Plus和推特上分享的一个混合的社交媒体页面流行度矩阵。在前面的文章中介绍了算法的所有理论部分,在源代码中可以找到关于其实现的详细的javadoc注释。(原博文之后数据包络分析(Data Envelopment Analysis)算法及其实现全部简称了DEA,请读者注意,译者注。)下面我们提供一个关于其架构实现的高级别描述:1. lp_solve 5.5 library为了解决各种线性规划问题,我们使用一个名为lp\_solve的开源库。某些特定的lib是用ANSI C编写的,并使用JAVA包装来调用库方法。因此,在运行代码之前,您必须在您的系统上安装lp_solve。该库的二进制文件在[Linux和Windows都可以使用,您可以在lp_solve文档中阅读更多有关安装的信息。在尝试运行JAVA代码之前,请确保您的系统上安装了(相关的)特定库。有关安装和配置库的任何问题,请参阅lp_solve文档。2.DataEnvelopmentAnalysis Class这是DEA算法的主要实现类。它实现了一个名为estimateEfficiency()的公共方法,它获取记录的Map并返回它们的DEA得分。3. DeaRecord ObjectDeaRecord是一个特殊的对象,用于存储我们记录的数据。由于DEA需要分离输入和输出,因此DeaRecord对象将以DEA可以处理的方式分别存储我们的数据。4. SocialMediaPopularity ClassSocialMediaPopularity是一个应用程序,它使用DEA来评估社交媒体网络上Facebook的like,Google的 +1和twitter的Tweets的网页流行度。它实现了两个受保护的方法:calculatePopularity()和estimatePercentiles()以及两个公共方法loadFile()和getPopularity()。calculatePopularity()使用DEA实现根据社交媒体计数来估计页面的得分数。estimatedPercentiles()方法获取DEA分数并将其转换为百分位数。总的来说,百分比比DEA分数更容易解释; 因此当我们说一个网页的流行分数是70%时,这意味着该网页比70%的其他网页更受欢迎。为了能够估计一个特定页面的流行度,我们必须有一个包含其他页面的社交媒体数据的数据集。这是有原因的,因为需要预测哪个网页是受欢迎的,哪些不是,您必须能够将其与网络上的其他页面进行比较。为此,我们使用来自以txt格式提供的Web SEO分析索引的小型的匿名样本。您可以通过从网页上的更多页面提取社交媒体计数来构建自己的数据库。(社交媒体计数,比如点赞数、转发数、评论数)loadFile()方法用于加载DEA的上述统计信息,getPopularity()方法是一种易于使用的方法,可以获取Facebook的like,Google的+1和一个页面的Tweets数量,并以此评估其在社交媒体上的流行度。如何使用数据包络分析的JAVA实现在DataEnvelopmentAnalysisExample类中,我提供了2个不同的关于如何使用代码的例子。第一个例子直接使用DEA方法来根据它们的输出(ISSUES,RECEIPTS,REQS)和输入(STOCK,WAGES)来评估组织单位的效率。这个例子来自DEAzone.com的一篇文章。代码语言:txt复制Map<String, DeaRecord> records = new LinkedHashMap<>();
records.put("Depot1", new DeaRecord(new double[]{40.0,55.0,30.0}, new double[]{3.0,5.0}));
//...adding more records here...
DataEnvelopmentAnalysis dea = new DataEnvelopmentAnalysis();
Map<String, Double> results = dea.estimateEfficiency(records);
System.out.println((new TreeMap<>(results)).toString());第二个示例使用我们的社交媒体流行度应用程序,通过使用来自社交媒体的数据来评估页面的流行度,例如Facebook的like,Google的+1和Tweets。所有的社交媒体计数都被标记为输出,我们传递给DEA一个空的输入向量。代码语言:txt复制SocialMediaPopularity rank = new SocialMediaPopularity();
rank.loadFile(DataEnvelopmentAnalysisExample.class.getResource("/datasets/socialcounts.txt"));
Double popularity = rank.getPopularity(135, 337, 9079); //Facebook likes, Google +1s, Tweets
System.out.println("Page Social Media Popularity: "+popularity.toString());必要的扩展(上面)所提供的代码只是DEA如何被用作排名算法的一个例子。为了改进其实现,需要进行下面的扩展:1.加速(算法的)实现特定的DEA算法实现会评估数据库中所有记录的DEA得分。由于我们需要解决如同数据库中记录数量那样多的线性规划问题,这使得实现变得缓慢。如果我们不需要计算所有记录的分数,那么我们可以显著地加快执行速度。因此,该算法的小扩展可以使我们更好地控制哪些记录应该被解决掉,哪些只能被用作约束。2.扩大社交媒体统计数据库(这篇文章所)提供的社交媒体统计数据库由来自Web SEO Analytics索引的1111个样本组成。为了能够估计更准确的流行(度)分数,需要更大的样本。您可以通过统计来自网络上更多页面的社交媒体计数来创建自己的数据库。3.添加更多的社交媒体网络该实现使用Facebook的喜欢,Google的+1和推文的数量来评估文章的受欢迎程度。不过,来自其他社交媒体网络的指标可以很容易地被考虑在内。您只需要从您感兴趣的网络中构建一个社交媒体数据库,然后扩展SocialMediaPopularity类来处理它们。关于实施的最终意见为了能够扩展(算法的)实现,您必须对Data Envelopment Analysis的工作原理有一个很好的理解。这在前面的文章中已经介绍过了,所以在继续进行任何更改之前,请确保您阅读了之前的教程。此外,为了使用JAVA代码,您必须在您的系统中安装lp\_solve库(参见上文)。如果你在一个有趣的项目中使用这个实现,那么就给我们一条线索,我们将在我们的博客上展示你的项目。另外,如果你喜欢这篇文章,请花点时间在Twitter或Facebook分享。
Facebook早期投资人、知名风投Jim Breyer谈AI:价值超过社交媒体和互联网的总和
风投资本家Jim Breyer总是能够把握住科技革命的关键点,早在2005年Facebook还是个“婴儿”时,他就高瞻远瞩地对小扎进行了投资,如今这家社交网络公司的市值已经超过3260亿美元。如果你是一个投资人,该把钱投在哪个行业领域里呢? Breyer表示,毫无疑问是人工智能行业,他表示人工智能是下一波最大的技术革命,价值超过社交媒体和互联网的总和。他预计,人工智能会给内容和电影娱乐行业带来颠覆性创新。上周四,在巴黎举办的Viva Technology科技大会上,Breyer如是说道:“从现在开始之后的十年时间,人工智能将会创造出更多财富,人工智能公司也会给股东带来更多价值提升机会,相比于1995年的互联网浪潮和2005年社交媒体投资热度,我相信人工智能会为投资人带来更多财富。”
Breyer曾是Facebook董事会成员,目前依然是该公司的大股东。作为Breyer Capital风投的老板,他还投资了很多其他公司,包括音乐流媒体服务公司Spotify和电影制作公司Legendary Entertainment(传奇娱乐影业),后者最近被中国企业巨头万达集团以35亿美元的价格收购。在传奇影业公司,Breyer表示他看到了人工智能在电影领域里的应用,并表示人工智能有颠覆整个行业的潜力。传奇影业出品的《星际穿越(Interstellar)》引起了不小的轰动,其中一个原因就是得益于人工智能技术对电影预告片的预测优化。Breyer说道:“我们应用了数据统计和机器学习技术,并找了一组数据开发人员分析《星际穿越》第一部预告片在Facebook、Instagram和其他社交网络上的反馈。利用这些反馈信息,告诉我们该如何制作第二部预告片和最终版预告片。这对我们来说真的非常重要,比如我们该在多少家电影院上映,该在哪些地区的电影院上映,以及我们还如何进行市场营销。
对于一部大片来说,通常需要1.5亿美元左右的营销预算,这笔钱该花在什么地方同样需要分析。使用先进的数据分析、人工智能、人类辅助学习技术,结合相关数据,帮助我们将营销预算缩减到1亿美元,但营销效果却得到大幅提升。”未来,人工智能技术还将会应用到选角、预算、或是其他电影工作上。Breyer预言,人工智能将会彻底改变电影行业。VIA cnbc
BBS论坛(三十一)
31.帖子加精和取消加精功能完成(1)apps/models.py代码语言:javascript复制class HighLight(db.Model):
__tablename__='highlight_post'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
post_id=db.Column(db.Integer,db.ForeignKey('post.id'))
create_time=db.Column(db.DateTime,default=datetime.now)
post=db.relationship('PostModel',backref='highlight')(2)cms/views.py代码语言:javascript复制@bp.route('/posts/')
@login_required
@permission_required(CMSPermission.POSTER)
def posts():
context = {
'posts': PostModel.query.all()
}
return render_template('cms/cms_posts.html',**context)
@bp.route('/hpost/',methods=['POST'])
@login_required
@permission_required(CMSPermission.POSTER)
def hpost():
post_id=request.form.get('post_id')
if not post_id:
return restful.params_error(message='请传入帖子id')
post=PostModel.query.get(post_id)
if not post:
return restful.params_error(message='没有这篇帖子')
highlight=HighLight()
highlight.post=post
db.session.add(highlight)
db.session.commit()
return restful.success()
@bp.route('/uhpost/',methods=['POST'])
@login_required
@permission_required(CMSPermission.POSTER)
def uhpost():
post_id = request.form.get('post_id')
if not post_id:
return restful.params_error(message='请传入帖子id')
post = PostModel.query.get(post_id)
if not post:
return restful.params_error(message='没有这篇帖子')
print(post_id)
highlight=HighLight.query.filter_by(post_id=post_id).first()
print(highlight)
db.session.delete(highlight)
db.session.commit()
return restful.success()(3)cms_posts.html代码语言:javascript复制{% extends 'cms/cms_base.html' %}
{% from 'common/_macros.html' import static %}
{% block title %}
帖子管理
{% endblock %}
{% block head %}
<script src="{{ static('cms/js/posts.js') }}"></script>
{% endblock %}
{% block page_title %}
{{ self.title() }}
{% endblock %}
{% block main_content %}
<table class="table table-bordered">
<thead>
<tr>
<th>标题</th>
<th>发布时间</th>
<th>版块</th>
<th>作者</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for post in posts %}
<tr data-id={{ post.id }} data-highlight={{ 1 if post.highlight else 0 }}>
<td><a target="_blank" href="{{ url_for('front.post_detail',post_id=post.id) }}">{{ post.title }}</a>
</td>
<td>{{ post.create_time }}</td>
<td>{{ post.board.name }}</td>
<td>{{ post.author.username }}</td>
<td>
{% if post.highlight %}
<button class="btn btn-info btn-xs highlight-btn">取消加精</button>
{% else %}
<button class="btn btn-danger btn-xs highlight-btn">加精</button>
{% endif %}
nbsp;nbsp;nbsp;<button class="btn btn-default btn-xs">移除</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}(4)cms/js/posts.js代码语言:javascript复制$(function(){
$('.highlight-btn').on('click',function(){
var $this=$(this);
var tr=$this.parent().parent();
var post_id=tr.attr('data-id');
var highlight=parseInt(tr.attr('data-highlight'));
var url='';
if(highlight){
url='/cms/uhpost/'
}else{
url='/cms/hpost/'
}
zlajax.post({
'url':url,
'data':{
'post_id':post_id
},
'success':function(data){
if(data['code']==200){
zlalert.alertSuccessToast('操作成功');
setTimeout(function(){
window.location.reload();
},500);
}else{
zlalert.alertInfo(data['message']);
}
}
})
});
});
BBS论坛(三十三)
33.celery实现邮件异步发送(1)task.pypip install celery redis代码语言:javascript复制from celery import Celery
from flask import Flask
from flask_mail import Message
from exts import mail,alidayu
import config
app=Flask(__name__)
app.config.from_object(config)
mail.init_app(app)
alidayu.init_app(app)
# 运行本文件:
# 在windows操作系统上:
# celery -A tasks.celery worker --pool=solo --loglevel=info
# 在linux操作系统上:
# celery -A tasks.celery worker --loglevel=info
def make_celery(app):
celery = Celery(app.import_name, backend=app.config['CELERY_RESULT_BACKEND'],
broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
TaskBase = celery.Task
class ContextTask(TaskBase):
abstract = True
def __call__(self, *args, **kwargs):
with app.app_context():
return TaskBase.__call__(self, *args, **kwargs)
celery.Task = ContextTask
return celery
celery = make_celery(app)
@celery.task
def send_mail(subject,recipients,body):
message = Message(subject=subject,recipients=recipients,body=body)
mail.send(message)
# @celery.task
# def send_sms_captcha(telephone,captcha):
# alidayu.send_sms(telephone,code=captcha)(2)config.py代码语言:javascript复制# celery的配置
CELERY_RESULT_BACKEND = "redis://127.0.0.1:6379/0"
CELERY_BROKER_URL = "redis://127.0.0.1:6379/0"(3)cms/views.py代码语言:javascript复制@bp.route('/email_captcha/')
def email_captcha():
#获取要修改的邮箱
email = request.args.get('email')
if not email:
return restful.params_error('请输入要修改的邮箱')
#得到大小写字母的列表
source = list(string.ascii_letters)
#得到大小写字母的列表 + 0到9的数字字符串
source.extend(map(lambda x: str(x), range(0, 10)))
# 随机取六位作为验证码
captcha = "".join(random.sample(source, 6))
#给这个邮箱发送邮件验证码
# message = Message(subject='derek论坛密码修改邮件发送', recipients=[email,], body='你的验证码是:%s'%captcha)
# try:
# mail.send(message)
# except:
# return restful.server_error()
#celery异步发送邮件
send_mail.delay('derek论坛密码修改邮件发送', [email], '你的验证码是:%s' % captcha)
#把邮箱和验证码保存到memcached中
zlcache.set(email,captcha)
return restful.success()
社交直播平台搭建,几大社交功能,如何进行搭建?
社交直播平台搭建的几大功能:陌生交友据有关下载量的数据分析,很多互联网公司表示对陌生交友领域很感兴趣。因为通过社交APP开发软件用户可以扩大自己交往的圈子,还可以很快结交到有着相同兴趣爱好的朋友。定位功能用户可以通过社交APP开发软件上的定位功能,可以让自己或者朋友清楚地了解自己所在的位置,以避免身处异地的迷茫。语音聊天几乎所有的社交APP都可以通过语音聊天与远在家乡的家人朋友,或者身在异地的朋友取得联系。这样的话,用户就不用再通过打电话而浪费很多电话费。甚至还可以进行视频通话,比起电话通话,更能让对方感到亲近。所以说,单单从这一方面来讲,开发APP确实在一定程度上给我们的生活带来便利。为了实现以上功能,我们怎样进行直播平台搭建呢?服务端服务端可以选择crtmpserver,crtmpserver开源,在windows平台以及linux平台下都可以运行。随着人们对视频质量要求的提高,基本上视频的分辨率都是高清(1080p),码率基本会在4M以上。试想如果服务器网卡选择千兆网卡,单个网卡最多也就支持两百多路。一般来讲,服务器的cpu配置会比普通电脑高很多,支持几百路并发是不会出现性能问题。播放端如果在网页上播放(IE),可以选择JwPlayer,如果用插件的也是可以。Android端播放器如果底层基于ffmpeg,也可以播放CrtmpServer转发的音视频流(ffmpeg需要引入librtmp库),IOS系统同理。视频采集与编码视频采集可以有多种途径,比如通过电脑摄像头,通过OBS等录屏软件进行录屏,通过手机摄像头采集。由于目前户外直播和移动互联网很火,所以我们就选择实现在安卓设备上通过摄像头采集视频流。视频直播源码与数据传输:将编码完成后的音视频数据进行传输,早期的音视频通过同轴电缆之类的线缆进行传输,IP网络发展后,使用IP网络优传输涉及技术或协议:传输协议:RTP与RTCP、RTSP、RTMP、HTTP、HLS(HTTP LiveStreaming)等控制信令:SIP和SDP、SNMP等如果你是iOS或者Android程序员,做RTMP推流就会更简单,可以直接找一个推流的数据库然后给出视频参数,以及最终的RTMP地址,就能推出一个标准的RTMP流。如果你是C++程序员,你至少要掌握采集、编码、写流这3个步骤。其主要的代码流程就需包括打开音视频设备、创建编解码器、设置编码参数、初始化网络流句柄、写协议头、循环采集数据、解码数据、编码数据、格式封装和写网络流。
docker部署Discuz论坛
环境准备:ip服务192.168.2.10(server1)docker、k8s192.168.2.20(server2)docker、k8s192.168.2.30(server3)docker、k8sk8s集群如何搭建如果是刚开机的k8s集群的主机开机后启动服务(集群还是ready)代码语言:javascript复制[root@server1 ~]# systemctl enable kubelet.service systemctl start kubelet.service
[root@server1 ~]# systemctl stop firewalld systemctl start docker.service开始我把防火墙都关了不然端口太多代码语言:javascript复制systemctl stop firewalldserver1:pull所需要的mysql镜像代码语言:javascript复制[root@server1 ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
8559a31e96f4: Pull complete
d51ce1c2e575: Pull complete
c2344adc4858: Pull complete
fcf3ceff18fc: Pull complete
16da0c38dc5b: Pull complete
b905d1797e97: Pull complete
4b50d1c6b05c: Pull complete
d85174a87144: Pull complete
a4ad33703fa8: Pull complete
f7a5433ce20d: Pull complete
3dcd2a278b4a: Pull complete
Digest: sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7server1:pull所需要的nginx和php的整合镜像代码语言:javascript复制[root@server1 ~]# docker pull richarvey/nginx-php-fpm
Using default tag: latest
latest: Pulling from richarvey/nginx-php-fpm
aad63a933944: Pulling fs layer
b61c449d5d91: Pulling fs layer
3fde16e1397a: Pulling fs layer
b1096698ab2a: Pulling fs layer
96de990b7ad3: Pulling fs layer
c280bfe25221: Pulling fs layer
02be9679a029: Pulling fs layer
01973f657634: Pulling fs layer
75924d0578e0: Pulling fs layer
7545938f30ed: Pull complete
267be130ac8a: Pull complete
5b9ce6473ee0: Pull complete
0cb267b5005b: Pull complete
0bbcede612f0: Pull complete
6f23dfb3d18c: Pull complete
363732275cc7: Pull complete
679aa7f9f360: Pull complete
d47507c4f094: Pull complete
17ba4fac2074: Pull complete
b16f52630a15: Pull complete
e8c7df728273: Pull complete
3b3bc6c69299: Pull complete
d0f1d1b1ad30: Pull complete
b8af2e53bd85: Pull complete
7e439df1bb98: Pull complete
f28361c951da: Pull complete
126a49c3e514: Pull complete
39838375a23b: Pull complete
1ca506cbf594: Pull complete
Digest: sha256:8b7c47b940fd79b5764ec12fdfbc7a1a198889316347963c9e9bd1aa78eec098
Status: Downloaded newer image for richarvey/nginx-php-fpm:latest
docker.io/richarvey/nginx-php-fpm:latestNFSserver2下载nfs代码语言:javascript复制[root@server1 ~]# yum -y install nfs-utils
[root@server2 ~]# mkdir -p /data/k8s/{web,db}
[root@server2 ~]# vim /etc/exports
[root@server2 ~]# cat /etc/exports
/data/k8s 192.168.2.0/24(rw,sync,no_root_squash)
[root@server2 ~]# exportfs -rv
exporting 192.168.2.0/24:/data/k8s
[root@server2 ~]# systemctl start nfs
[root@server2 ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.server1:代码语言:javascript复制[root@server1 ~]# mkdir -p /home/k8s/lnmp/mysql
[root@server1 ~]# cd /home/k8s/lnmp/mysql
[root@server1 mysql]# kubectl create secret generic mysql-pass --from-literal=password=123.com
secret/mysql-pass created
[root@server1 mysql]# vim mysql-pv.yml
#内容:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
path: /data/k8s/db
server: 192.168.2.20
[root@server1 mysql]# kubectl apply -f mysql-pv.yml
persistentvolume/mysql-pv created
[root@server1 mysql]# vim mysql-pvc.yml
#内容:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-claim
labels:
app: discuz
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
[root@server1 mysql]# kubectl apply -f mysql-pvc.yml
persistentvolumeclaim/mysql-claim created
[root@server1 mysql]# vim mysql-dp.yml
#内容:
apiVersion: apps/v1
kind: Deployment
metadata:
name: dz-mysql
labels:
app: discuz
spec:
selector:
matchLabels:
app: discuz
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: discuz
tier: mysql
spec:
imagePullSecrets:
- name: my-secret
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
name: dz-mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-claim
[root@server1 mysql]# kubectl apply -f mysql-dp.yml
deployment.apps/dz-mysql created
[root@server1 mysql]# vim mysql-svc.yml
#内容:
apiVersion: v1
kind: Service
metadata:
name: dz-mysql
labels:
app: discuz
spec:
ports:
- port: 3306
selector:
app: discuz
tier: mysql
[root@server1 mysql]# kubectl apply -f mysql-svc.yml
service/dz-mysql created
[root@server1 mysql]# kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/mysql-pv 10Gi RWX Retain Bound default/mysql-claim 17m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/mysql-claim Bound mysql-pv 10Gi RWX 8m6s
[root@server1 mysql]# vim web-pv.yml
#内容:
apiVersion: v1
kind: PersistentVolume
metadata:
name: web-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
path: /data/k8s/web
server: 192.168.2.20
[root@server1 mysql]# kubectl apply -f web-pv.yml
persistentvolume/web-pv created
[root@server1 mysql]# vim web-pvc.yml
#内容:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: web-claim
labels:
app: discuz
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
[root@server1 mysql]# kubectl apply -f web-pvc.yml
persistentvolumeclaim/web-claim created
[root@server1 mysql]# vim web-dp.yml
#内容:
apiVersion: apps/v1
kind: Deployment
metadata:
name: dz-web
labels:
app: discuz
spec:
replicas: 1
selector:
matchLabels:
app: discuz
tier: nginx-php
template:
metadata:
labels:
app: discuz
tier: nginx-php
spec:
imagePullSecrets:
- name: my-secret
containers:
- image: richarvey/nginx-php-fpm
name: dz-web
ports:
- containerPort: 9000
- containerPort: 80
name: dz-web
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/www/html
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: web-claim
[root@server1 mysql]# kubectl apply -f web-dp.yml
deployment.apps/dz-web created
[root@server1 mysql]# vim web-svc.yml
#内容:
apiVersion: v1
kind: Service
metadata:
name: dz-web
labels:
app: discuz
spec:
type: NodePort
ports:
- port: 80
nodePort: 30001
selector:
app: discuz
tier: nginx-php
[root@server1 mysql]# kubectl apply -f web-svc.yml
service/dz-web created
#如果下一步操作显示0/1别着急先往下做(等3-5分钟即可)
[root@server1 mysql]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
dz-mysql-5dcd86b5c8-qgqbm 1/1 Running 0 22m 10.244.1.24 server2 <none> <none>
dz-web-68959dc478-879qr 1/1 Running 0 6m43s 10.244.2.28 server3 <none> <none>
[root@server1 mysql]# kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/mysql-pv 10Gi RWX Retain Bound default/mysql-claim 33m
persistentvolume/web-pv 10Gi RWX Retain Bound default/web-claim 11m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/mysql-claim Bound mysql-pv 10Gi RWX 23m
persistentvolumeclaim/web-claim Bound web-pv 10Gi RWX 5m22sserver2:代码语言:javascript复制[root@server2 data]# git clone https://gitee.com/ComsenzDiscuz/DiscuzX.git
[root@server2 data]# mv DiscuzX/upload/* k8s/web/
[root@server2 data]# ls
DiscuzX k8s
[root@server2 data]# cd k8s/web
[root@server2 web]# ls
admin.php data m source
api favicon.ico member.php static
api.php forum.php misc.php template
archiver group.php plugin.php uc_client
config home.php portal.php uc_server
connect.php index.php robots.txt
crossdomain.xml install search.php
[root@server2 web]# chmod -R 777 /data/k8s/web/server1:代码语言:javascript复制[root@server1 mysql]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
dz-mysql-5dcd86b5c8-qgqbm 1/1 Running 0 40m 10.244.1.24 server2 <none> <none>
dz-web-68959dc478-879qr 1/1 Running 0 24m 10.244.2.28 server3 <none> <none>
[root@server1 mysql]# kubectl exec -it dz-mysql-5dcd86b5c8-qgqbm -- mysql -uroot -p123.com
mysql> create database hy;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on hy.* to 'hy'@'%' identified by '123.com';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye验证:IP:30001
下面的步骤跟着走就行了!
BBS论坛(三十二)
32.帖子排序功能完成(1)front_index.html代码语言:javascript复制<ul class="post-group-head">
{% if current_sort==1 %}
<li class="active"><a href="{{ url_for('front.index',bd=current_board) }}">最新</a></li>
{% else %}
<li><a href="{{ url_for('front.index',bd=current_board) }}">最新</a></li>
{% endif %}
{% if current_sort==2 %}
<li class="active"><a href="{{ url_for('front.index',st=2,bd=current_board) }}">精华帖子</a></li>
{% else %}
<li><a href="{{ url_for('front.index',st=2,bd=current_board) }}">精华帖子</a></li>
{% endif %}
{% if current_sort==3 %}
<li class="active"><a href="{{ url_for('front.index',st=3,bd=current_board) }}">点赞最多</a></li>
{% else %}
<li><a href="{{ url_for('front.index',st=3,bd=current_board) }}">点赞最多</a></li>
{% endif %}
{% if current_sort==4 %}
<li class="active"><a href="{{ url_for('front.index',st=4,bd=current_board) }}">评论最多</a></li>
{% else %}
<li><a href="{{ url_for('front.index',st=4,bd=current_board) }}">评论最多</a></li>
{% endif %}
</ul>
<ul class="post-list-group">
{% for post in posts %}
<li>
<div class="author-avatar-group">
<img src="{{ post.author.avatar or url_for('static',filename='common/images/logo.jpg') }}"
alt="">
</div>
<div class="post-info-group">
<p class="post-title"><a href="{{ url_for('front.post_detail',post_id=post.id) }}">{{ post.title }}</a>
{% if post.highlight %}
<span class="label label-danger">精华帖</span>
{% endif %}
</p>
<p class="post-info">
<span>作者:{{ post.author.username }}</span>
<span>发表时间:{{ post.create_time }}</span>
<span>评论:0</span>
<span>阅读数 :0</span>
</p>
</div>
</li>
{% endfor %}
</ul>(2)front/views.py代码语言:javascript复制from sqlalchemy import func
@bp.route('/')
def index():
board_id=request.args.get('bd',type=int,default=None)
page = request.args.get(get_page_parameter(), type=int, default=1)
sort=request.args.get('st',type=int,default=1)
banners = BannerModel.query.order_by(BannerModel.priority.desc()).limit(4)
boards = BoardModel.query.all()
start = (page - 1) * config.PER_PAGE
end = start + config.PER_PAGE
posts=None
total=0
query_obj=None
if sort==1:
query_obj=PostModel.query.order_by(PostModel.create_time.desc())
elif sort==2:
query_obj=db.session.query(PostModel).outerjoin(HighLight).order_by(HighLight.create_time.desc(),PostModel.create_time.desc())
elif sort==3:
query_obj=PostModel.query.order_by(PostModel.create_time.desc())
elif sort==4:
query_obj=db.session.query(PostModel).outerjoin(CommentModel).group_by(PostModel.id).order_by(func.count(CommentModel.id).desc(),PostModel.create_time.desc())
if board_id:
query_obj=query_obj.filter(PostModel.board_id==board_id)
posts=query_obj.slice(start, end)
total=query_obj.count()
else:
posts = query_obj.slice(start, end)
total = query_obj.count()
pagination = Pagination(bs_version=3, page=page, total=total, outer_window=0, inner_window=2)
context = {
'banners': banners,
'boards': boards,
'posts': posts,
'pagination': pagination,
'current_board':board_id,
'current_sort':sort
}
return render_template('front/front_index.html', **context)
Linux 搭建 discuz 论坛
Discuz! 是腾讯(Tencent)旗下 Comsenz 公司推出的以社区为基础的专业建站平台,帮助网站实现一站式服务。让论坛(BBS)、个人空间(SNS)、门户(Portal)、群组(Group)、应用开放平台(Open Platform)充分融合于一体,帮助网站实现一站式服务。Discuz 是基于php网页,在 linux 和 windows 两平台均可部署的论坛工具,本文是基于LAMP搭建论坛的教程。1, 准备工作Discuz是基于php,首先需要搭建php运行环境, windows平台搭建php请见我的百度文库,本文介绍linxu平台搭建方法。1) 安装 apache,请见我先前的博客:Ubuntu 配置 Apache2) 安装 php(依次先安装mysql + libxml2 + php)(a) php 官方下载, 本文是下载最新版php-5.4.15.tar.gz(b) 安装mysql:sudo apt-get install mysql-server(c) 下载 libxml2,本文下载最新版libxml2-2.9.1.tar.gz,安装libxml2: tar zxvf libxml2-2.9.1.tar.gz cd libxml2-2.9.1/ sudo mkdir -p /opt/libxml2 sudo ./configure --prefix=/opt/libxml2/ sudo make; sudo make install
(d) 安装php tar zxvf php-5.4.15.tar.gz cd php-5.4.15 sudomkdir -p /opt/php-5.4.15-server sudo ./configure --prefix=/opt/php-5.4.15-server --with-apxs2=/opt/httpd-2.4.2-server/bin/apxs --with-libxml-dir=/opt/libxml2 --with-mysql
sudo make; sudo make install
(e) 配置环境 拷贝php.ini: sudo cp php.ini-development /opt/php-5.4.15-server/lib/ 修改apache httpd.conf:sudo vi /opt/httpd-2.4.2-server/conf/httpd.conf ,在 AddType application/x-gzip .gz .tgz 下面添加以下两行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
(f) 验证php 在 /opt/httpd-2.4.2-server/htdocs/ 目录下,新建一个文件 index.php: sudo vi /opt/httpd-2.4.2-server/htdocs/index.php
代码语言:javascript复制<?php
phpinfo();
?>
在浏览器中,输入网址: http://localhost/index.php,打开以下页面,说明配置php成功。2, Discuz 下载Discuz 官方下载,本文下载最新Discuz_X3.0_SC_UTF8.zip3, Discuz 环境配置(a) 解压zip文件:unzip Discuz_X3.0_SC_UTF8.zip -d Discuz_X3.0_SC_UTF8(b) 拷贝Discuz到apache httdp目录:sudo cp -r Discuz_X3.0_SC_UTF8 /opt/httpd-2.4.2-server/htdocs/(c) 进入/opt/httpd-2.4.2-server/htdocs/Discuz_X3.0_SC_UTF8/upload/ 目录,设置子目录权限:sudo chmod -R 777 config/ data/ uc_client/ uc_server/(d) 配置Discuz 默认文件:sudo vi /opt/httpd-2.4.2-server/conf/httpd.conf <IfModule dir_module>
DirectoryIndex index.php default.php index.html index.htm
</IfModule>
(e) 配置Discuz 虚拟目录:sudo vi /opt/httpd-2.4.2-server/conf/httpd.conf
查找: DocumentRoot "/opt/httpd-2.4.2-server//htdocs"
添加如下两行:
Alias /forum "/opt/httpd-2.4.2-server//htdocs//Discuz_X3.0_SC_UTF8//upload" // 添加一行,虚拟目录
<Directory "/opt/httpd-2.4.2-server//htdocs//Discuz_X3.0_SC_UTF8//upload"> // 指向discuz目录
如下图(目录名有改动,请根据自己目录修改):4, Discuz 安装(a) 按照步骤3,配置好Discuz环境变量后,在浏览器输入网址: http://localhost/Discuz_X3.0_SC_UTF8/upload/install/index.php,出现如下安装页面:(b) 点击“同意”,继续(c) 点击“下一步”,继续(如果没有权限,请参见上面步骤3 —— (c))(d) 点击“下一步”,继续(e) 点击“下一步”,在浏览器输入网址: http://localhost/forum/admin.php,出现如下页面, 说明安装成功!登陆后,进入”管理中心首页“——》”首页“,会提示删除安装目录(网页):这是为了防止再次安装,因此一般只需把”install“目录,修改为”install_bk"或其他名字即可,我喜欢改成"install_bk",修改命令: sudo mv install install_bk另附数据库截图(部分表结构): 后台数据库访问方式: mysql -uroot -pabcd1234 后台数据库为 ithomer,后台数据库表如下:5, Discuz 功能Dizcuz 具有非常丰富的功能,如用户注册, 论坛主题设置,页面访问权限设置,发起投票(需装插件)等功能,下面是默认论坛页面:
参考推荐:Discuz! X3 全新安装图文教程
Ubuntu 配置 Apache
什么是自媒体? 自媒体的发展
最近聊天的时候谈到自媒体,自己也答应过要找机会讲一下自媒体,那现在就聊一下吧。个人观点,大牛勿喷,欢迎点评。一、什么是自媒体?在看这篇文章前,先思考一下什么是自媒体?我们看看百度百科上是怎么解释的? 自媒体(外文名:We Media)又称公民媒体或 个人媒体,是指私人化、平民化、普泛化、自主化的传播者,以现代化、电子化的手段,向不特定的大多数或者特定的单个人传递规范性及非规范性信息的新媒体的总称。自媒体平台包括:博客、微博、微信、百度官方贴吧、论坛/BBS等网络社区。对于自媒体,我自己的解释是 个人通过QQ空间、微信公众平台、微博等网络社区输出价值、正能量 并得到粉丝的认可的新媒体。二、自媒体的发展在不到三年的时间里,自媒体行业已经形成规模,目前还有很多自媒体在不断涌现,越来越多的专业人士投身自媒体行业,这些各行各业的专业人士,因为有绝活,所以有内容可写。那就不难解释为什么很多企业和个人愿意为它买单。 因为价值的输出,使很多关注那个领域的人和企业受益,又因为受益,所以会有越来越多的企业和个人关注。我一直强调付出价值,输出价值是营销的开始,想要成交先付出,比如一个做保健品的,他每天写一篇文章,写男人女人如何养生,不同年龄段的人如何养生,吃什么有利于人的健康,刚好他自己就有相关的保健品,他可以帮助消费者选择合适的保健品并给一些养生的建议,因为经常写养生方面的东西自己又是做这个的,所以他是这方面的专家,消费者很容易接受一个专家的建议,那么成交也就很快就有了,而且这位顾客还会带来后续价值,这位客户除了自己以后经常买,而且还会推荐朋友亲人来,这样你是不是赚翻了?三、自媒体需要有什么样的内容?自媒体是网络发展的产物,可以说互联网进军传统行业的一大武器就是打破垄断和特权,淘宝的出现使千千万万个人可以实现自己的创业梦,他们利用淘宝上销售自己的东西,打破了传统大企业的垄断,我想卖就卖,就是很任性!网络是这样,自媒体更是这样,自媒体就是媒体权利被瓦解之后的产物,人人都可以是自明星,人人都可以有自己的媒体。自媒体不要特权,简单快捷没成本,这促使能生产内容的人尝试成为自媒体,那么问题来了,做自媒体该写什么样的内容呢?网媒以全面及时的消息见长,纸媒以详实丰富的事件追踪立足,自媒体的根基则是评论,注重思想和观点的自由传递。大多数自媒体人的个人性格都流露在文章中,他们爱憎分明、立场明确,表达幽默,或许在传统媒体的新闻专业主义来衡量,我们这些作品都是不专业的,但是现在读者的立场上,他们花费时间去关注一件事,一个人,一定是想要得到一个明确的 清楚的结论,而不是一个搞不清楚是非对错的客观观点。每个自媒体的背后都站着一个实实在在的人,作为一个人,他是有情绪的,有自己的独特观点的,这也是读者为什么喜欢自媒体的原因。四、自媒体平台有哪些?现在,自媒体平台在不断地增加,今天我只说几个主流的自媒体平台吧,我认为的主流自媒体平台有:微信订阅号;QQ空间;搜狐自媒体平台;今日头条;百度百家。五、自媒体如何变现?自媒体作为一个媒体,如何变现也是它要面临的问题。自媒体行业最引诱人的是其商业模式。自媒体的广告模式。自媒体在某种意义上说也不算媒体,它可以被说成是意见领袖,而媒体则更倾向于是一个传播渠道,而自媒体更多的是一个内容制作。粉丝愿意付费购买你的东西,其实可以理解为给面子,也可以理解为捧场,网络上有那么多卖同一种产品的,为什么粉丝愿意买你的?因为他们信任你,愿意给你面子。所以我不论现在或是以后做什么项目,首先要做到的就是尽自己最大的可能给用户最好的服务,用户思维放在第一。粉丝愿意给脸,我也不能辜负人家。好了,关于自媒体,再写上几篇文章也写不完,东西太多了,所以关注我的粉丝,未来有机会再跟你们讲吧。我的博客即将同步至LIKE.TG+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1loab4y69jfje--------------------- 作者:w4979 来源:CSDN 原文:https://blog.csdn.net/w4979/article/details/84338352 版权声明:本文为博主原创文章,转载请附上博文链接!
破解恐怖组织宣传密码:“伊斯兰国”最重视推特
来源:无界新闻
作者:吴梦启杰西卡·斯特恩是哈佛大学进行恐怖主义研究和授课的讲师。J.M.伯格是布鲁金斯学会的作者以及《外交政策》专栏作家。2015年初,两人合著的研究“伊斯兰国”的专著《伊斯兰国:恐怖政权》发表。这是全球首批研究“伊斯兰国”的学术性书籍之一。由于信息的缺乏,本书在“伊斯兰国”内政外交和军事作战方面并没有提供更多内容,但在“伊斯兰国”的对外宣传方面着墨甚多,也为我们揭示了西方网络平台和社交媒体运营的一些基本模式,值得国人借鉴。本文谨在此予以摘编。《伊斯兰国:恐怖政权》着力揭示“伊斯兰国”兴起的历史。在1980年代,“圣战”这个词语尚未完全开始流行的时候,极端势力的宣传策略就已经渐渐成形。最早的宣传品有两种:第一种是把自己的观点和行为拍摄成录像带或者是影片;第二种则是模仿美国《时代》周刊或是《新闻周刊》,出版一些类似的彩色新闻杂志。由于当时互联网尚未大规模兴起,这些宣传品通过邮寄或者是在宗教活动中心散发的方式,到达目标受众手上。如果有人对极端势力的行为感兴趣,可以到宗教活动中心询问更多信息。极端分子披上宗教人员的外衣,组织观看录像带,看完后大家交流观感,借机灌输极端思想。1990年代,《波斯尼亚烈士》是恐怖分子们最早拍摄的从“圣战”角度解读政治和战争的纪录片。随后,极端分子们又拍摄了充满说教的、冗长的视频《乌玛的政权》。9·11事件之后,极端分子们拍摄了《十九烈士》以宣传自己的恐怖阴谋。总体来说,这些视频的质量粗糙低下,要不是充满了枯燥乏味的说教,就是血腥残暴的处决镜头。这一点尤其体现在2003年的伊拉克战争后。伊拉克基地组织的头目扎卡维残忍嗜杀,他和他部下制作的视频因为过于恐怖,遭到了基地组织二号头目扎瓦希里的严厉批评。这个问题甚至成为后来“伊斯兰国”与基地组织翻脸的原因之一。2012年,极端分子们发布了新的视频——《交锋》。从本质上说,它仍旧继承了基地组织通过影像进行说教的特点。不过,在两年时间里,《交锋》连续拍摄了四集。拍摄手法和叙事方式越来越专业,影响力也越来越大。发布渠道也有了新的变化:它们全部是通过网络发布的。互联网成为极端分子进行大规模宣传的重要平台。从传统媒体到互联网1990年代,互联网兴起极大地降低了极端势力的宣传成本。电子杂志逐渐取代印刷杂志。极端势力在美国办的两份杂志《剑》和《伊斯兰报告》全部上网。1996年美国的一份行业杂志《犯罪行为》调查认为,要出版一份纸质《剑》月刊,每个月至少得花1000美元,而以电子杂志方式出版并通过电子邮件发送,可以使出版成本基本降为零。到了2012年“伊斯兰国”兴起前夕,无论是基地组织还是转战叙利亚和伊拉克的“圣战者”,都已经可以很熟练地制作电子杂志。2014年5月,“伊斯兰国”的兴起已经逐渐显现,它的宣传人员逐渐形成了一整套宣传思维:一方面它继承了基地组织的说教传统,另一方面则致力于表现“伊斯兰国”如何统治自己的控制区域。电子杂志里既有处决所谓“足球运动员”的图片,也有伊玛目们诵经的内容,还有一些宗教警察的行动以及当地农业的影像。这些电子杂志发行期数不定,页数从50页到100多页不等,使用阿拉伯语、英语、法语和德语出版。其中最著名的一份杂志《达比克》(又翻译为《逊尼派穆斯林圣战者》)刚刚在9月初公布了“拍卖”疑为被绑架中国人质的海报。这份杂志一度甚至可以通过亚马逊订阅。《达比克》杂志发布的“拍卖”中国人质的海报。与大部分极端分子的宣传产品相同,“伊斯兰国”的这些电子杂志和视频也是通过社交媒体发布的。如果没有全球性的社交媒体,它们的宣传也就不可能产生全球性的影响。极端分子们很早就意识到了这一点。在社交媒体并未广泛出现的1990年代中后期,互联网流行的社交方式是网络论坛,也就是我们所熟悉的BBS。最先利用BBS进行宣传和联络的是美国一些白人种族主义者。很快,这一招就被极端势力学会了。他们先利用雅虎和美国在线等网站建起自己的BBS,每个BBS里设几个分论坛,每个论坛集中讨论一个领域的话题。版主在后台组织。论坛中迅速建立了一整套等级制度。在线时间越长,发言越积极,观点越符合版主要求的ID在整个论坛当中的地位就越高。在这套等级制度完善之后,各个ID形成一个网络部落,并且有单独的聊天室,从而让极端分子有了足够的空间和时间宣传思想,甄别新人,组织团队。2013年,极端分子甚至利用单独的聊天室展开了一个全球“圣战”领导人的网络会议。但是从一封缴获的本·拉登信件中显示,极端分子们认为BBS有很多缺陷。其中一个缺陷就是网络部落过于封闭,不利于扩大影响力。另外一个问题是它太容易泄密,不但很容易处于监控之下,而且还非常被各种间谍渗透。尽管如此,BBS目前仍是极端分子常用的宣传方式之一。网络社交媒体成为主战场9·11之后,社交媒体三巨头Twitter、Facebook和Youtube兴起。最早在Youtube上设立账号,开始上传各种视频的是美籍也门人阿弗拉基(Awlaki)。他同时还拥有Facebook上的账号,但何时开设账号已经不可考。此人是一个口才极好的神职人员,9·11之前曾经在美国见过多名参与劫机的极端分子,还跟2009年美国军营里枪杀13名战友的军医哈桑见过面,很早就被美国安全部门关注。但他仍旧能够在Youtube上发出各种宣传极端思想和仇美仇西方视频,点击率总是能够达到几十万。出于对“言论自由”的考虑,Youtube一直没有理会各界要求对阿弗拉基网络言论的控制。直到2010年实在承受不了压力,Youtube才允许观众在浏览视频的时候根据自己的体会标注此视频是否涉及恐怖主义(之前Youtube早就允许观众标注视频是否涉黄涉暴)。只有经过Youtube内部审核之后,确认视频涉及恐怖主义才能予以删除。随后,Youtube再度在压力下让步,删除了阿弗拉基的大部分恐怖主义视频,并且封了他的账号。在这之前,塔利班和基地组织都已经学会使用社交媒体公布信息,先后注册了在三大社交媒体上的账号。2011年,塔利班的Twitter账号和阿富汗国际安全部队的Twitter账号互掐,让塔利班的账号名声鹊起。更有趣的是2012年基地组织内讧,内部成员在社交媒体上晒出各种腐败证据,这大概是社交媒体本身的双刃剑作用一种表现。Facebook对于本站的账号控制要比Youtube严格很多。从2009年开始,Facebook就一直严密监控涉及恐怖主义的账号,随查随封。但是效果却有点差强人意。被封账号只需要重新注册一个新账号,就又可以肆无忌惮地发言了。美国中情局将其总结为“九头蛇效应”(Hydra Effect)——你砍掉了它的一个脑袋,它可以长出两个新的。但是作为反恐专家的本书作者却认为这种“封号”的做法有积极效果。他举例说:2013年1月基地组织在Twitter账户上公布了他们杀害一名法国人质的消息。Twitter立刻就把基地组织的这个账户封掉。当天,基地组织的新账户又冒了出来,并且得意洋洋地宣布:靠封号你们打不赢这场战争。不过,这个新账户的粉丝已经从原来的21000个降低到只有几百个。本书作者认为,只要持续不断地封号,极端分子的账户迟早会失去所有粉丝。实际上,从2013年开始,新锐极端组织“伊斯兰国”就不断在Twitter开设各种账户对自己进行宣传。由于Twitter对“伊斯兰国”账号不断采取严厉的封号措施,这个组织的账户粉丝一度由最多时的10万降低到不足3万。在Facebook上的严厉措施也取得了类似效果。“伊斯兰国”最重视Twitter在社交媒体上的战斗很快就进入了一个新的境界。2014年夏天,“伊斯兰国”正式宣布成立。这个组织在社交媒体上的宣传手法也上了新的台阶,大部分斗争发生在Twitter上。这一年的4月,经过一个巴勒斯坦信息工程师(代号“J”)的研发,“伊斯兰国”推出了一款手机app,名字有点怪异,叫做“黎明好消息”(the Dawn of Glad Tidings)。这个应用分为两个部分应用于安卓系统智能手机上。一个部分定期发送“伊斯兰国”的各种宣传新闻,同时搜集已经安装该应用的手机客户信息,主要是该客户的手机运营商身份,客户所在地等信息。第二部分则与twitter关联功能。使用者可以通过“黎明好消息”直接使用Twitter发布推文。但是在使用推文的同时,这个app会自动生成一个空白的Twitter账户。掌握源代码的管理者可以用空白的Twitter账户推送信息。“伊斯兰国”的成员绝大部分都安装了“黎明好消息”。通过这款应用,“伊斯兰国”社交媒体团队每天都利用大量的空白账户向各种Twitter使用者发送各种推文,高峰期一天可以发出4万条推文。最惊悚的一次是在2014年6月,伊拉克的平民在Twitter上使用“巴格达”作为关键词搜索的时候,许多人的手机上出现了大量代表“伊斯兰国”黑旗飘扬的图片,以及“我们来了”的推文。这个时刻正好是“伊斯兰国”攻占摩苏尔,兵临巴格达城下的时刻,气焰极为嚣张。除此之外,“黎明好消息”还具备一定的搜索功能。用指定的符号加上想要搜索的关键词,用户可以很轻易地搜到一大堆“伊斯兰国”公布的各种新闻简报,绝大部分简报都是被普通搜索引擎过滤掉的。谷歌和Twitter的反应很快。6月份的“巴格达推送黑旗”事件过后,谷歌立刻宣布撤掉了代号“J”的信息工程师研发的所有app。Twitter下手没有那么狠,只是在打开跟这个应用有关的链接时,会弹出一个窗口告警,说这款应用可能会带来隐私泄密。直到2014年6月份之前,Twitter没有使用Facebook和Youtube给极端分子账户标注“恐怖主义”的手段。极端势力利用了Twitter这一点。从2013年开始,“伊斯兰国”就不断在Twitter开设各种账户对自己进行宣传。它对于Twitter的使用差不多到了登峰造极的地步。利用Twitter来招募新兵就是其中很成功的做法。在前线打仗的“伊斯兰国”士兵普遍开设Twitter账户,每天推送自己“战斗”的一手信息。遇上对这些信息感兴趣的人提问,做到“有问必答”,最后甄别出有意加入“伊斯兰国”作战的人,再用Twitter一步步指引他们如何来到土耳其,如何进入叙利亚加入“伊斯兰国”。除了推送各种消息和募兵,“伊斯兰国”还用Twitter来募集资金,甚至还在Twitter上和努斯拉阵线(基地组织叙利亚分支)隔空吵架。努斯拉阵线还在使用本·拉登时代的老办法在Twitter上宣教,手段远不如“伊斯兰国”灵活。最后吵架超不过“伊斯兰国”,粉丝数量也只有后者的一半,只好眼睁睁地看着大量捐款落到“伊斯兰国”的腰包里。偶尔也有意外发生。2014年6月,“伊斯兰国”拿下伊拉克北部重镇摩苏尔后,一大堆神棍利用“黎明好消息”在Twitter上造势,要求“伊斯兰国”头目巴格达迪当哈里发。类似的事情在中国古代称为“劝进”,理论上来说被“劝进”的那一位要三度推让才能接受。哪知道6月17日“黎明好消息”突然被屏蔽掉了,这一番轰轰烈烈的“劝进”顿时连声响儿都听不见。不过十几天后,巴格达迪照样宣布自己是伊斯兰世界的哈里发。看来“劝进”还是有效果的。Twitter对待涉嫌恐怖主义账号的态度一向比较放松,需要有相当复杂的程序才能举报并封闭涉嫌账号。2013年9月21日,肯尼亚首都内罗毕的西门购物中心发生恐怖袭击,造成72人身亡。自此之后,Twitter才开始转向严厉。2014年2月,“伊斯兰国”的正式账号在没有明显违反Twitter规则的情况下被封闭了。本书作者认为,Twitter是应政府要求才封闭账号的。但是具体哪国政府,却没有明确提示。Twitter自己公布的数据显示,2013年上半年,总共有60次来自政府的请求封闭账号。这个数字在下半年变成了377次。在2014年的上半年又在377的基础上增长了14%。2014年6月,Twitter对“伊斯兰国”的账号开始进行更加严厉的打击。到8月份,上百个“伊斯兰国”的账号被封闭。此举迫使大批与之相关的账号不得不改变自己在Twitter上的发言,更改带有“伊斯兰国”色彩的头像和言论。但是在9月1日到11月1日之间,仍旧有1400个Twitter账号涉恐被封,以至于“伊斯兰国”的人都把被封闭的ID称为“Twitter烈士”。到2014年年底,涉恐Twitter的账号活跃度大大下降。本书作者的统计显示,截至书籍出版时,涉恐账号的推文大约有62%左右一次转发都没有。“伊斯兰国”的反击手段很多,奏效却很少。这些手段既包括威胁和恐吓Twitter的工作人员,也包括使用各种虚假账户以及盗取他人账户发送推文。在Twitter要求相关账户提供手机号码后,“伊斯兰国”的“电子旅”(由本书作者冠名的一个专门负责社交媒体宣传的“伊斯兰国”机构分支)甚至负责提供虚假的手机号码以欺骗Twitter。对于这些手段,Twitter都找到了对应的手段予以回击。目前,Twitter以及别的社交媒体在这场和“伊斯兰国”的大战当中,似乎占据上风,作者总结道。结果充分说明了一点:在这个世界上,想要大声喊话,喇叭必须掌握在自己手里。
教你如何推广网站、增加流量的4大方法
流量是做网站成功的关键。自从有了智能企业建站系统后(如新万云企业美站等),做网站不再难,然而如何在众多同类网站中脱颖而出,获得更多流量呢?下面,新万网络给大家分享一些网站推广经验。一、搜索优化百度每日处理的搜索量超过了60亿次,搜索引擎优化变得尤为重要。影响网站排名的因素有很多。据统计, 80%以上用户寻找需求时,只点击搜索结果首页的网站连接!我国网站总数已超过420万个,如何让客户快速找到您的产品和业务?直接有效的方法:让更多的产品关键词登上搜索引擎首页。不妨可以尝试用新万-万推宝SEO推广软件,可更快更有效提升网站排名、浏览量,访客量、订单量。① 受众在搜索哪些关键词时你的网站会出现在结果页?可挑选那些竞争少、精确度更高的长尾关键词(三到四个词)。,② 在网站页面和博文中添加元标题、描述和标签。这些元素会帮助搜索引擎理解网站的内容。③ 确保网站对移动端的友好。现在大部分的搜素都是在移动端上,所以企业建站时要同时搭建好自己的手机网站。二、社交媒体(微信、微博等)在互联网上扩大影响时,首先要考虑你的目标受众在哪些社交媒体上比较多。比如现有客户、目标客户、博主等有影响力的人等。与这些人在社交媒体上互动能够帮你被他人注意到。分享他人内容也是建立关系的好方法。尤其是现在微博、微信的粉丝力量,要建立并维护好自己的粉丝群体。经常与粉丝互动,保持黏度。可搭建自己的微信网站、小程序、创建一些微营销活动等等。三、目录列表目录列表能够帮助客户在茫茫网络世界中找到你的网站。这些列表都有入站链接,能够很好地提升整体SEO。此外公司相关信息与联系信息要实时更新。四、网络社区在相关行业圈子论坛中保持活跃是网站获得流量的其中一个好方法。寻找那些与你所在领域相关的主题/帖子,回答网友的提问或者参与对话。这会让你的名字和签名出现在网民眼前。不要在论坛上发布带网站链接的垃圾内容,而是要选择有趣的话题切入。
论坛自动签到教程
为了方便且于是自己搭建了一个论坛,bbs.lanol.cn其他论坛也都是一个原理方法很简单大致流程:1,抓取签到的那个包,这一步直接使用浏览器操作即可。2,用python模拟发包,达到签到的效果第一步,抓取签到的包打开目标网站进入签到页面右键,点击检查或者按F12右侧选择Network
抓取之前清空一下,方便等下识别哪个包是签到的在签到这里随便选择,填写一下然后点击开始签到就会发现右侧多了一个一个plugin。。。的东西
这应该就是那个发送签到的请求了,点开看一下往下翻,可以看到我们刚刚签到时填写的内容。至此,抓包已经完成了第二步,用python帮我签到。一开始直接导入resquests
import requestsurl就是下图中的request urlrequest method在图中也可以看到是post请求headers 我们就只要把cookie和ua取下来就行了,cookie当作密码,ua用来伪装爬虫
data就是最下面的最终的代码是这样的代码语言:javascript复制import requests
url = 'https://bbs.lanol.cn/plugin.php?id=dsu_paulsign:signoperation=qiandaoinfloat=1inajax=1'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
'cookie': 'UM_distinctid=1714a0bf24892-0609c53ff921e-5313f6f-144000-1714a0bf24924c; y97u_2132_saltkey=lKA5yQLQ; '
'y97u_2132_lastvisit=1586420041; '
'y97u_2132_ulastactivity=1c93SeUmVdFPkdPiyF%2BNzzXzMIGaLIyIpVgy8vrn3MYENm%2FYy6uH; '
'y97u_2132_nofavfid=1; y97u_2132_sid=fMB8NH; y97u_2132_onlineusernum=1; y97u_2132_sendmail=1; '
'y97u_2132_seccode=21.68cbf3245b60f72363; '
'y97u_2132_auth=9f7aUZbzGYauXDKXfFuNw4qQQanEpDQJD6gDDeaH884krZJs3z%2FYvkC%2FinizPg4pFjXAgFsr6NrLuT7'
'%2FKqI2; y97u_2132_lastcheckfeed=6%7C1586424079; y97u_2132_checkfollow=1; y97u_2132_checkpm=1; '
'y97u_2132_lastact=1586424083%09plugin.php%09',
}
data = {
'formhash': 'f0f241b5',
'qdxq': 'nu',
'qdmode': '2',
'todaysay': '',
'fastreply': '0',
}
html = requests.post(url=url, headers=headers, data=data).text
print(html)测试结果:能看到这里说明你已经很不错了,这是隐藏的第三步,每天自动签到腾讯云函数可以帮你每天定时运行python代码,而且还有一定的免费额度,平时签到啥的够用了LIKE.TG函数地址:https://console.cloud.tencent.com/scf/index?rid=1教程开始:然后把代码全部粘贴到这里就行了点击完成新建触发方式这里就可以根据自己需求填写了有时候虽然会提示调用失败,但是其实已经签到成功了