iOS    2020-05-25 17:55:51    37    0    0

开头先说下超级签, 也不知道谁起的这么有创意的名字。 简单来说就是用过苹果的个人开发者帐号对用户设备进行针对性打包,然后提供用户下载。PS: 这过程是由系统自动完成。
这个是签名的流程图:


这个就涉及到几个问题
对 mobileconfig 文件进行签名, 提供给用户下载
需要获取用户的设备号 也就是 uuid
需要把获取到的用户的 uuid 添加到苹果的开发者后台里面。 这个就涉及到跟苹果的通信
从苹果的开发者后台下载 mobileprovision 文件。 这个也是需要跟苹果通信的。PS: 要把包名添加到开发者后台, 否者会签名失败
使用linux系统对ipa文件进行签名, 然后提供给用户下载
解决方案:
问题1:
为iOS的mobileconfig文件进行签名 这篇描述的比较详细, 但里面的方法好像不太能用了。反正我没测试通过, 这是一个坑之一。
解决方案是:阿里云免费SSL证书对IOS描述文件mobileconfig的签名认证 该方案可以正常使用。里面提及的证书, 阿里云已经更新过了。
正确的应该使用: 此处划重点

apache证书的 xxx.net_public.crt 直接使用不需要按照文中转换
nginx的 xxx.key 和 xxx.pem
划重点:mobileconfig 必须是https,必须是301跳转,且nginx或其他web服务器 必须支持TSL1.2以上 坑之二…不想重新编译请使直接使用负载均衡完美解决这个问题
openssl s_client -connect 域名:443 -tls1_2 该命令可测试你的域名能否支持tsl1.2
问题2:
通过Safari浏览器获取iOS设备UDID(设备唯一标识符) 的博客写的又详细又好, 我就不多此一举了

问题3和4:
在github上有开源工具 Spaceship,感谢开源贡献者, 感谢你们。。但顺便吐槽一下, ruby写的…文档看着头疼
Spaceship 文档
ruby api文档
ruby 初学者

问题5:
又是一枚开源工具 isign, 简单到一行代码搞定签名, 这个是python写的,必须2.+的环境, 不要用3.0以上的 我使用的是2.7的。对此我也想吐槽一句,网上介绍超级签必定介绍这个工具, 但为什么没有人说一下这个工具可以在linux上跑。。为此我一直傻傻的认为只能在mac上运行

isign -c 客户端证书.pem -k 私钥.

MySQL    2020-05-22 09:53:57    30    0    0

为什么基于Docker搭建?

  • 资源有限
  • 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐
  • 一台机器上可以运行多个Docker容器
  • Docker容器之间相互独立,有独立ip,互不冲突
  • Docker使用步骤简便,启动容器在秒级别

利用Docker搭建主从服务器

首先拉取docker镜像,我们这里使用5.7版本的mysql:

docker pull mysql:5.7

然后使用此镜像启动容器,这里需要分别启动主从两个容器

Master(主):

docker run -p 3339:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Slave(从):

docker run -p 3340:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Master对外映射的端口是3339,Slave对外映射的端口是3340。因为docker容器是相互独立的,每个容器有其独立的ip,所以不同容器使用相同的端口并不会冲突。这里我们应该尽量使用mysql默认的3306端口,否则可能会出现无法通过ip连接docker容器内mysql的问题。

使用docker ps命令查看正在运行的容器:

mark

此时可以使用Navicat等工具测试连接mysql

mark

配置Master(主)

通过docker exec -it 627a2368c865 /bin/bash命令进入到Master容器内部,也可以通过docker exec -it mysql-master /bin/bash命令进入。627a2368c865是容器的id,而mysql-master是容器的名称。

cd /etc/mysql切换到/etc/mysql目录下,然后vi my.cnf对my.cnf进行编辑。此时会报出bash: vi: command not found,需要我们在docker容器内部自行安装vim。使用apt-get install vim命令安装vim

会出现如下问题:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package vi
MySQL    2020-05-22 08:34:23    24    0    0

连接MySQL数据库时会出现Authentication plugin 'caching_sha2_password' cannot be loaded的错误。

出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password. 

这里用第二种方式 ,解决方法如下

1. 管理员权限运行命令提示符,登陆MySQL(记得添加环境变量)

   mysql -u root -p

   password:                                                                         #登入mysql

 

2. 修改账户密码加密规则并更新用户密码

   ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;   #修改加密规则 

   ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';   #更新一下用户的密码 

 

3. 刷新权限并重置密码

   FLUSH PRIVILEGES;   #刷新权限 

 上面两步对应的截图

单独重置密码命令:alter user 'root'@'localhost' identified by '111111';

Docker    2020-05-21 09:49:02    17    0    0

我们运行的容器可能在镜像的基础上做了一些修改,
有时候我们希望保存起来,封装成一个新的镜像。
可以使用docker提供commit功能。
现在以centos为例,在一个裸的centos上面安装vim编辑器,
并且把这个修改保存下来,封装成一个能执行vim命令的centos镜像。

1.启动镜像并做出修改
docker run -it centos /bin/bash

[root@afcaf46e8305 /]#
注意afcaf46e8305是产生的容器ID,前面运行的时候不要-d后台运行了,不然无法进入容器交互执行模式:

安装vim并且退出容器:
yum install -y vim
exit

2.把容器打包成镜像
docker commit afcaf46e8305 centos-vim

3.查看镜像centos-vim
docker images | grep centos-vim
查看镜像的详细信息:
docker inspect centos-vim:afcaf46e8305

4.使用centos-vim这个镜像
docker run -it centos-vim /bin/bash
发现可以直接使用vim了,而不需要重新安装:
vim --version

5.OPTIONS说明
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。
docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1

Docker    2020-05-21 08:51:39    20    0    0

composer 是php的一个依赖管理工具。帮助安装外部工具库,可以很轻松的用一行命令将其它人的优秀代码引用到项目中去。

默认不是全局安装,而是基于指定的项目的某个目录中进行安装。

1.安装

#curl -sS https://getcomposer.org/installer | php

//移动到全局目录下

#mv compose.phar /usr/local/bin/composer

2.检测是否安装成功

#composer --version

3.切换为国内镜像

#composer config -g repo.packagist composer https://packagist.phpcomposer.com

4.更新composer

#composer selfupdate

 

5.composer的使用

(1)在项目目录下面创建comoser.json文件,内容如下:

{

    "require":{

        "monolog/monolog":"1.2.*"

    }

}

保存,然后#composer install 安装依赖包

(2)直接用require命令,不需要创建composer.json文件

#composer require monolog/monolog 

6.update 命令

//更新所有依赖

#composer update

//更新指定的包

#composer update monolog/monolog

//更新指定的多个包

#composer update monolog/monolog symfony/dependency-injection

//还可以通过通配符匹配包

#composer update monolog/monolog symfony/*

7.remove命令

#composer remove monolog/monolog

8.search命令

#composer search monolog

#composer search --only-name monolog

9.show 命令

//列出所有已经安装的包

#composer show 

//可以通过通配符进行筛选

#composer show monolog/*

//显示具体某个包的信息

#composer show monolog/monolog

Docker    2020-05-20 15:11:32    228    0    0

vps可视化管理的面板中,唯独宝塔面板依托强大的社区支撑,开发力度很很大,因此非常适合lunix系统搭建网站等使用,非常方便。但是宝塔面板初始安装一般需要一分钟,然后lnmp环境安装需要二十分钟以上,这个漫长的过程现在可以打破了,不到三分钟,用docker就可以完成快速部署,本站demo站超负荷实测一个多月没毛病。

注意:此法不适合新手小白,新手推荐按原始方法进行操作(篇末有参考链接)。

截图

颠覆性安装宝塔面板,只需三分钟完成原本半小时的操作-Docker全自动安装最新bt-panel(含视频教程)

优点

  • Docker容器部署,省略初始化LNMP编译过程
  • 最新版本的宝塔面板+LNMP基础环境(最新版本的官方纯净安装的基础上安装nginx,mysql,php7.3)
  • 可随时管理容器,无需重置服务器。

安装步骤

项目地址: https://hub.docker.com/r/pch18/baota

1.Docker安装(已安装的可省略此步骤)

curl -sSL https://get.docker.com/ | shservice docker restartsystemctl enable docker  #设置开机自启

2.宝塔面板部署

docker run -tid --name baota -p 80:80 -p 443:443 -p 8888:8888 -p 888:888 -p 20:20 -p 21:21 --privileged=true --restart always -v baota_www:/www -v ~/wwwroot:/www/wwwroot pch18/baota

运行结束就玩了宝塔面板的安装,实际上整个过程也就两分钟左右。

颠覆性安装宝塔面板,只需三分钟完成原本半小时的操作-Docker全自动安装最新bt-panel(含视频教程)

下一步简单点而言就是执行以下命令

docker exec -it baota bash    #进入docker宝塔容器rm -f /www/server/panel/data/admin_path.pl   #关闭安全出口bt default    #重置宝塔面板的登陆账号及密码,后期进入面板后可手动修改

完成以上步骤,就可以打开ip:8888 进行访问了,正常部署一点问题都没有。

备注:该宝塔已安装最新版本,内含LNMP基础环境,php7.3.普通搭建已经非常齐全了。

已知问题

1.部分机器初始化环境可能某些端口被占用,比如80端口被占用,使用netstat -lnp|grep 80 查看进程PID,然后使用ki

人人都是产品经理    2020-05-13 18:06:10    23    0    0

目前,基于大数据的推荐系统已经成为了移动互联网的研究热点,本文介绍了评判推荐系统好坏的十个评价指标。

随着移动互联网的飞速发展,网络中的信息量呈指数式增长,大量的商品、资讯、知识、视频、音乐等内容和资源可供用户选择,信息过载问题日益突出。

而推荐系统是解决信息过载最有效的方式,因此,基于大数据的推荐系统已经成为了移动互联网的研究热点。

其实推荐系统在上世纪末就已经出现了,亚马逊在1998年就通过基于ITEM的协同过滤技术,为数百万客户提供商品选购建议。而学术界对于推荐系统的研究也一直在进行着。

虽然随着云计算、大数据、人工智能等新兴科技的发展,算力、数据和算法的提升,使推荐系统的性能越来越好,但针对推荐系统的评价体系则基本保持了稳定,只是各项指标的精度在不断提升。

了解推荐系统,可以从认识推荐系统的评价指标开始,主要包括以下十点:

一、用户满意度

用户作为推荐系统的重要参与者,其满意度是评测推荐系统的最重要指标。

有时,互联网企业会通过调查问卷的方式,或者是简单的满意或不满意的按钮,来获得用户的满意度反馈。

但更多的时候,用户满意度是通过对用户某些行为的统计进行量化分析后计算出来的。比如在移动电商应用中,用户如果购买了推荐的商品,就表示他们在一定程度上满意系统的推荐结果,而购买转化率就可以用于度量用户的满意度。

此外,点击率、分享率、收藏率、停留时间等指标,也都可能在度量用户满意度方面具备一定的权重。

二、预测准确度

预测准确度只是泛泛的名称,具体要看你希望预测什么内容,例如预测用户对系统推荐的电影的观后评分?

或是预测系统推荐的歌曲列表中,用户最终选择了几首加入到了他的歌单?

但总体来说,预测准确度是度量一个推荐系统或者推荐算法在预测用户行为的准确性方面最重要的指标。

提高预测准确度通常依赖于算法和模型精度的提升,所以更具备学术层面的研究价值。大数据、机器学习等热门技术,与预测准确度之间的关系极为密切,彼此之间互相促进,技术的发展推动了预测准确度的提升,而似乎永无止境的对预测准确度的提升需求,也带动了技术层面的不断投入。

三、覆盖率

覆盖率用来描述一个推荐系统对长尾内容或商品的发掘能力。

关于覆盖率的定义,最简单的理解是推荐系统能够推荐出来的物品,占平台中全部物品的比例。

以图文内容推荐为例,自媒体作者可能会很关心他们的内容有没有被推荐给读者,而对于覆盖率达到100%的推荐系统,则意味着每篇内容都被推

Docker    2020-05-13 17:46:17    13    0    0

Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定。

在实际部署中,我们需要指定容器ip,不允许其自行分配ip,尤其是搭建集群时,固定ip是必须的。

我们可以创建自己的bridge网络 : mynet,创建容器的时候指定网络为mynet并指定ip即可。

查看网络模式

docker network ls 

clipboard

创建一个新的bridge网络

docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1 mynet

查看网络信息

docker network inspect mynet

clipboard[1]

创建容器并指定容器ip

docker run -e TZ="Asia/Shanghai" --privileged -itd -h hadoop01.com --name hadoop01 --network=mynet --ip 172.18.12.1 centos /usr/sbin/init

运行容器

docker exec -it hadoop01 /bin/bash

clipboard[2]

centos最小化安装没有ifconfig命令,可通过yum进行安装

yum install -y net-tools

clipboard[3]

安装ssh服务

yum install -y openssh-server

yum install -y openssh-clients

systemctl start sshd.service

新增非root用户

useradd brock

passwd brock

clipboard[4]

通过本地客户端访问(通过创建容器时指定端口或配置独立ip)

docker run -e TZ="Asia/Shanghai" -p 6001:22 --privileged -itd -h hadoop01.com --name hadoop01 --network=mynet --ip 172.18.12.1 centos /usr/sbin/init

route -p add 172.18.12.0 MASK 255.255.255.0 10.0.75.2

clipboard[5]

2020-05-11 10:03:55    157    0    0

前面我们写了关于Docker的一些内容,现在我们需要在容器中开启php对Memcached的扩展。网上找了一些资料,下面我们直接贴出命令行。

进入容器

docker exec -it jphp-fpm /bin/bash

jphp-fpm 是我们创建容器时给的容器名。

注意:我们这里使用的是 bitnami/-fpm 的套件。

安装预编译环境

apt-get update -y && apt-get install -y pkg-config libmemcached-dev autoconf gcc make zlib1g zlib1g-dev vim

安装php-memcached扩展

pecl channel-update pecl.php.net && pecl install memcached

修改php的配置文件php.ini

通过phpinfo里Loaded Configuration File,我们看到php.ini的位置:/opt/bitnami/php/lib/php.ini

echo 'extension=memcached.so' >> /opt/bitnami/php/lib/php.ini

退出容器 ,HOST终端重启php-fpm

docker restart jphp-fpm​
2020-05-07 11:21:18    69    0    0

迁移介绍

Redis-cli是Redis自带的一个命令行工具,安装Redis后即可直接使用Redis-cli工具。

下载Redis-cli,请使用以下命令获取:

wget http://download.redis.io/releases/redis-3.0.7.tar.gz

适宜场景

通过Redis-cli导入整库,需要能够获取到AOF文件,适宜以下场景:

  • “数据中心自建Redis服务”迁移到“DCS缓存实例”
  • “华为云上自建Redis服务”迁移到“DCS缓存实例”

本文主要介绍在Linux系统中进行操作。

步骤1:生成AOF文件

须知:
  • 正式进行迁移操作前,建议先暂停业务,确保不会在迁移过程中丢失新产生的数据变动。
  • 建议选择业务量较少的时间段进行迁移。

使用如下命令开启缓存持久化,得到AOF持久化文件。

redis-cli -h {source_redis_address} -p 6379 -a {password} config set appendonly yes

开启持久化之后,如果AOF文件大小不再变化,说明AOF文件为全量缓存数据。

说明: 
  • 使用redis-cli登录redis实例,输入命令“config get dir”可以查找生成的AOF文件保存路径,文件名如果没有特殊指定,默认为:appendonly.aof。
  • 生成AOF文件后如需关闭同步,可使用redis-cli登录redis实例,输入命令“config set appendonly no”进行关闭。

步骤2:上传AOF文件至华为云ECS

  1. 为节省传输时间,请先压缩AOF文件再传输。
  2. 将压缩文件(如以SFTP方式)上传到华为云ECS。
说明: 

ECS需保证有足够的磁盘空间,供数据文件解压缩,同时要与缓存实例网络互通,通常要求相同VPC和相同子网,且安全组规则不限制访问端口,安全组设置请参考如何选择和配置安全组

步骤3:导入数据

redis-cli -h {dcs_instance_address} -p 6379 -a {password} --pipe < appendonly.aof

须知:

如果使用公网SSL加密时,连接地址和端口请替换为实际的配置信息。

步骤4:迁移后验证

数据导入成功后,请连接DCS缓存实例,通过info命令,确认数据是否已按要求成功导入。

如果导入不成功,需要分析原因,修正导入语句,然后使用flushall或者flush

10/155