技术文章

golang tools安装记录

主宰稳场 提交于 2021-02-20 11:02:56
我的环境: OS:macos,11.2.1 golang:go version go1.16 darwin/arm64 golang环境变量: GOPROXY="https://goproxy.cn,direct" GO111MODULE="on" 现在可以安装了,在命令行执行 go get -v -u golang.org/x/tools/cmd/... 即可把所有的go命令安装好了,安装在$GOPATH/bin目录下 来源: oschina 链接: https://my.oschina.net/OHC1U9jZt/blog/4957136

RTMP推流平台EasyDSS程序以服务运行时如何转化绝对路径?

拟墨画扇 提交于 2021-02-20 11:02:37
Web无插件直播点播平台EasyDSS有两种运行模式,一种是以可执行程序直接运行,另外一种是以服务运行。一般在生产环境下,多会采用以服务的方式进行运行。 但是在以服务运行时,在编程中对于路径的处理需要特别处理。比如在以“./config.toml ”代表配置文件路径的情况下,如果直接运行可执行程序,就能够找到正确的路径。“./ ”代表当前路径。但以服务运行,则无法找到正确的路径。因此如果以服务运行,当前路径在不同的操作系统下就为不同的路径。 在 Windows 操作系统下,如果程序以服务运行,当前路径在 C:\Windows\System32 中。 在 Linux 操作系统中,如果以服务运行,当前路径在 / 中。 即如果以服务运行,对于 “./config.toml”,在 Windows 操作系统下,就会在 C:\Windows\System32 查找,因此不会查找到。 所以在代码中对于此种路径进行编码优化,具体方式如下: //GetRealPath 判断传递的是否是相对路径,返回真实路径 func GetRealPath(path string) string { //如果是绝对路径 if filepath.IsAbs(path) { return FormatPath(path) } return FormatPath(filepath.Join(CWD(), path)) }

构建万物可信互联的基石,带你深度剖析区块链跨链的关键技术,满满是干货!

*爱你&永不变心* 提交于 2021-02-20 11:02:02
【摘要】 什么是区块链,相信你一定有所了解,那么你是否了解区块链跨链技术呢?本文将从区块链跨链技术的起源发展、相关名词、关键技术和模型实现几个方面进行深度剖析,干货满满! 1.区块链跨链技术诞生背景及发展历程 1.1 什么是跨链? 区块链技术经过10来年演进,已经被认为是可以参与未来可信社会构建的重要基础设施。但是现实的社会中包括许多行业和不同的经济领域。把整个现实世界中的各个行业都套用区块链是不现实的,也是不合适的。不同行业、不同经济领域的商品可以通过市场实现价值交换。每个区块链系统都是一个独立的价值经济体系。区块链跨链技术是连接独立区块链的枢纽,承载着不同价值体系的区块链之间的交换功能。价格是交换货物的前提,价格由商品本身的价值决定,受供需关系的影响,供需关系又建立在市场之上。为了实现不同区块链上的价值交换,区块链通过跨链为每个独立区块链中的价值交易市场提供跨链契约服务。每个区块链是一个独立的账本,两个不同的区块链对应两个不同的独立账本,两个账本之间没有关联关系。跨链这个技术,打通不同账本之间的障碍,允许价值跨越不同区块链进行流转。本质上,价值不能在账间转移。但是对于一个特定的用户来说,一个区块链中存储的价值可以转化为另一个区块链价值,从而实现了价值的循环。 1.2 诞生的背景及发展历程 随着2008年比特币诞生以来,区块链技术已经有了非常广泛的发展

个人主页模板制作,你应该注意的SEO细节

…衆ロ難τιáo~ 提交于 2021-02-20 11:01:29
在个人主页制作的过程中,我们会遇到各种情况,针对不同的网站类型,以及实际需求,我们会给出不同的解决方案,特别是在个人主页模板设计的过程中,如果你掉以轻心,在后期SEO优化的过程中,往往是“积重难返”很不好调整。 那么,个人主页模板制作,你应该注意的SEO细节有哪些? 根据以往做沈阳SEO的经验,我们将通过如下内容,进一步阐述: 1、个人主页模板 在做个人主页制作的过程中,我们经常面对主要问题,包括: ①社区论坛的个人主页。 ②B2B与B2C电商网站的个人主页。 ③独立博客KOL的嘉宾页面。 当然,还有众多的个人页面模板类型,需要我们仔细研究,在这里就不一一赘述。 2、页面URL形态 在做个人主页制作的过程中,经常被忽略的一个SEO细节就是页面URL形态的问题,特别是基于社区论坛的链接,比如:大量的动态参数在其中。 这导致一个非常明显的问题,这种类型的页面,很难有效的被百度收录,而就无从谈排名。 3、页面内容展现 所谓的页面内容展现,主要是基于两个方面,一个是站内页面的展现,一个是搜索引擎SERP页面的展现,为此,我们可能需要: ①利用站内重要的栏目与页面,重复的展现个人主页,比如:专家聚合页。 ②合理的利用内链,展现个人主页的链接。 ③积极配置结构化数据,比如:熊掌ID,利用个人主页模板的图片调用,采用搜索结果出图。 4、页面权重流动 所谓的页面权重流动

CentOS7.8通过QQ邮箱实现邮件报警

守給你的承諾、 提交于 2021-02-20 11:00:45
测试环境:CentOS7(只基于虚拟机) 1、在浏览器登录我们的QQ邮箱,找到设置选择账户。 2、然后下来找到如下图所示界面,将POP3服务开启,开启时需要向腾讯发送一条短信进行认证。 3、发完短信后会出现下图的界面,会有一个授权码,其实这个也就相当于是密码,下面的操作会用上。 二、安装邮件客户端工具 mailx [root @localhost ~]# yum install mailx [root @localhost ~]#vim /etc/mail.rc ##在文件的最后,添加以下几行 set from=发件人邮箱@qq.com set smtp=smtp.qq.com set smtp-auth-user=邮箱用户名 set smtp-auth-password=自己设定的 授权密码 set smtp-auth=login 三、测试邮件发送功能 1.给自己发送邮件,首先先确保自己能连网 [root @localhost ~]# ping smtp.qq.com ##是否能ping 通。如果不通,请检查网络 2.进行测试 [root @localhost ~]# echo "邮件内容"|mail -s "邮件标题" 邮箱地址(例如:1008610000@qq.com) 3.验证测试效果 来源: oschina 链接: https://my.oschina.net/u

django 发布会签到系统web开发

柔情痞子 提交于 2021-02-20 10:54:50
  引言   最近学习了虫师的发布会签到系统demo,结合自己所学django知识,对demo重新塑造了一下。也是为了练练手,巩固知识。现在就分享一下成果~   Django工作流   学习django web开发,先来简单了解一下django的工作机制,请看下图: 简单说明: 用户通过浏览器访问:http://127.0.0.1:8000/index,首先运行的是urlpatterns程序,通过url路由找到对应的视图函数views.py,视图函数处理所有逻辑和数据,并且将用户要的数据经过函数处理后通过index.html返回给浏览器前的用户看。    详情流程   从用户通过浏览器访问→函数处理→数据展示,整个形成一个闭关。   MVC是众所周知的模式,即:将应用程序分解成三个组成部分:model(模型),view(视图),和 controller(控制 器)。其中: M——管理应用程序的状态(通常存储到数据库中),并约束改变状态的行为(或者叫做“业务规则”)。 C——接受外部用户的操作,根据操作访问模型获取数据,并调用“视图”显示这些数据。控制器是将“模型”和“视图”隔离,并成为二者之间的联系纽带。 V——负责把数据格式化后呈现给用户。   Django也是一个MVC框架。但是在Django中,控制器接受用户输入的部分由框架自行处理(C交给用户),所以 Django

仿微信聊天表情发送

China☆狼群 提交于 2021-02-20 10:53:54
如题,这是公司项目的一个功能模块,先上个效果图: 其次大致说说原理: 1,首先判断输入的字符,是否包 含表情的文 字,比如 这个表情对应的文件名为 emoji_1.png,它对应的文字描述 : [可爱] ,如果我们在输出的是输出这么一句话:老婆,我想你了 。 那么我们对应的根本文字就是: 老婆,我想你了[可爱] 。 2,具体的转换过程就是用正则表达式比配文字中是否含有[xxx]这类的文字,如果有,那么我们就根据拿到的[xxx]找到它对应的资源文件id,当然这其中有一个关系表,看你怎么处理这个关系了。最后将其用SpannableString替换成文字,表面上显示有图片,其实TextView里的text依然是: 老婆,我想你了[可爱] 。这个过程明白么? 下面贴上DEMO工程的结构: 再贴上几个重要的类: [java] view plain copy print ? package com.example.facedemo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.content.Context; import

各类型变量所占字节数,sizeof()

眉间皱痕 提交于 2021-02-20 10:52:59
与操作系统位数和编译器都有关。 可用 sizeof() 得到,当前主流编译器一般是32位或64位。   类型     16位 32位   64位    char       1 1    1    short int     2  2    2    int       2  4    4   long int   4     4    8    long long int  8   8    8    char*    2    4    8(由寻址范围确定)    float    4    4    4    double   8    8    8 int,long int,short int 宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的): sizeof(short int)<=sizeof(int) sizeof(int)<=sizeof(long int) short int至少应为16位(2字节) long int至少应为32位。 *指针- 地址 *(即指针变量): 4个字节(32位机的 寻址空间 是4个字节。同理64位编译器)(变化*) 64位操作系统下8个字节。 字节 字节是二进制数据的单位。通常是 八位的二进制数。一些老型号计算机结构使用不同的长度。 B与bit 数据存储是以“字节”( Byte )为单位,数据传输大多是以“位”(bit

Java enum的用法详解

时光怂恿深爱的人放手 提交于 2021-02-20 10:52:47
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 public enum Color { RED, GREEN, BLANK, YELLOW } 用法二: switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。 enum Signal { GREEN, YELLOW, RED } public class TrafficLight { Signal color = Signal.RED; public void change() { switch (color) { case RED: color = Signal.GREEN; break; case YELLOW: color = Signal.RED; break; case GREEN: color = Signal.YELLOW; break; } } } 用法三:向枚举中添加新方法 如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。 public enum Color { RED("红色", 1), GREEN("绿色", 2),

通达OA权限提升漏洞通告

99封情书 提交于 2021-02-20 10:50:21
0x00 漏洞背景 2020年04月22日, 360CERT监测发现 通达OA官方 发布了编号为 11.5.200417 的更新通告,此次更新修复了一枚权限提升漏洞,漏洞等级: 高危 。 通达OA是由北京通达信科科技有限公司研发的一款通用型OA产品,涵盖了个人事务、行政办公、流程审批、知识管理、人力资源管理、组织机构管理等企业信息化管理功能。2015年,通达云OA入驻阿里云企业应用专区,已为众多中小企业提供了稳定、可靠、强悍的云计算支撑。 通达OA 存在 权限提升漏洞 , 攻击者 通过 发送特制请求包 ,可以造成 权限提升(未认证用户提升到管理员) 。 对此,360CERT建议广大用户及时安装最新补丁,做好资产自查以及预防工作,以免遭受黑客攻击。 0x01 风险等级 360CERT对该漏洞的评定结果如下 评定方式 等级 威胁等级 高危 影响面 有限 0x02 漏洞详情 在 通达OA 存在如下代码逻辑 $UID = intval( $_POST [ "UID" ]); ... $query = "SELECT * from USER where UID=' $UID '" ; if($ROW = mysql_fetch_array( $cursor )){ $USER_ID = $ROW [ "USER_ID" ]; $PWD = $ROW [ "PASSWORD" ];