在excel如何分割字符串?-excel-PHP中文网

mikel阅读(196)

来源: 在excel如何分割字符串?-excel-PHP中文网

在excel如何分割字符串?

方法:

一、首先先输入一组要拆分字符串的数据,全部选中。

e4fa881ee68ba4a623a3076cccf8924.png

二、然后在上方菜单找到“分列”,点击选中。

3c3fe8c594f4df80dad022ae088864a.png

三、然后在弹出的“文本分列向导”中 选择“分隔符号”下一步。

15e62224919730ff5cedbb007a53233.png

四、然后在“分隔符号”位置选择“空格”,点击选择下一步。

1db1364ea66331d42b1de4a000829f5.png

五、然后在第三步中选择打“列数据格式”选择则“文本”然后点击选择“确定”

168175b2d2f3ecde1d75aadcac4dece.png

六、EXCEL分割字符串完成

506148b0840f74c64070492ed8baf82.png

推荐教程:《excel教程

以上就是在excel如何分割字符串?的详细内容,更多请关注php中文网其它相关文章!

低代码 系列—— 初步认识 Appsmith - 彭加李 - 博客园

mikel阅读(303)

来源: 低代码 系列—— 初步认识 Appsmith – 彭加李 – 博客园

初步认识 Appsmith

appsmith 是什么

appsmith 是 github 上的一个开源项目,截至此刻(20220512)有 17.7k Star。

Appsmith 是一个低代码、开源的框架,用于构建内部应用程序

使用基于 JavaScript可视化开发平台,构建 CRUD 应用程序、仪表盘、管理面板,而且速度快了 10 倍。

Tip:With our JavaScript-based visual development platform, build CRUD apps, Dashboards, Admin Panels, and many more 10x faster. —— docs_Introduction

安装 appsmith

:笔者使用的 win10

打开官网,有两段醒目的文字:

A powerful open source framework to build internal tools
用于构建内部工具的强大开源框架

Quickly build any custom business software with pre-built UI widgets that connect to any data source. Control everything with JavaScript.
使用可连接到任何数据源的预构建 UI 小部件快速构建任何自定义业务软件。 使用 JavaScript 控制一切

点击docHost it yourself,进入文档

appsmith100.png

Appsmith 提供了多种技术部署。笔者选用 Docker。

Tip

  • 唯一官方支持的 Appsmith 安装是基于 Docker 的
  • Appsmith 可以在本地部署,也可以使用 Docker 在您的私有实例上部署 —— docs_Docker
  • 倘若不了解 docker,可以查看笔者的 初步认识 docker

进入 setup/docker 安装指南:

提供了两种安装方式:

  • Quick Start (with docker-compose) – 使用 docker-compose。
  • Explore Appsmith (without docker-compose) – 不使用 docker-compose。

docker compose 用于构建和管理多个服务,更复杂,这里笔者选用更简单的方式:without docker-compose

通过 docker run 下载镜像并启动 Appsmith:

// 约1.2G
202205-later> docker run -d --name appsmith -p 80:80 -v "$PWD/stacks:/appsmith-stacks" appsmith/appsmith-ce
Unable to find image 'appsmith/appsmith-ce:latest' locally
latest: Pulling from appsmith/appsmith-ce
8e5c1b329fe3: Pull complete
c086a11e6410: Pull complete
77fbce06aba6: Pull complete
01e01a36d9f0: Pull complete
525e27e69b74: Pull complete
f23d2a639a69: Pull complete
39c9347cc360: Pull complete
cfdc8301afe2: Pull complete
f496d56b0e53: Pull complete
45e7897ce8f4: Pull complete
e4fa2a7eeac0: Pull complete
1ece9193ec88: Pull complete
2b90261d42de: Pull complete
72ad69fc9113: Pull complete
84c90c9c8dfc: Pull complete
60270c8d4298: Pull complete
df215547aa3b: Pull complete
0d8252e94cfe: Pull complete
c1494763999c: Pull complete
367d490330fe: Pull complete
4f4fb700ef54: Pull complete
755c6060309a: Pull complete
79f8c7decfae: Pull complete
Digest: sha256:e34adcdf4fade53440d8406753078d6b0a7cbd7ef73d73747e4bf0274b34fc6f
Status: Downloaded newer image for appsmith/appsmith-ce:latest
0018628962f2a8df3068b6597a91a9529cdcf39cd0497309698fc176ced5fb6f

通过 docker ps 查看运行中的容器,发现 appsmith 已启动:
已启动:

202205-later> docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS                                                 NAMES
0018628962f2   appsmith/appsmith-ce   "/opt/appsmith/entry…"   2 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp, 0.0.0.0:9001->9001/tcp, 443/tcp   appsmith

浏览器访问 localhost:80,跳转至 Welcome 页面:

appsmith1.png

点击GET STARTED设置账户(即注册),进入下图:

appsmith2.png

输入信息后,点击NEXT,进入下图:

appsmith3.png

点击MAKE ... APP按钮,进入下图:

appsmith4.png

点击BUILD ... OWN,进入 appsmith,如下图所示:

appsmith6.png

整个界面分左中右三部分:

  • 左侧,有项目的页面(pages);部件(widgets),例如按钮、表格;查询(queries),例如刷新表格数据、数据库相关(datasources)
  • 中央,项目的ui
  • 右侧,配置,例如配置按钮的颜色、显示文字、事件等

hello world

需求:点击按钮,弹出信息

做法是:

  • 左侧拖拽 BUTTON 部件到舞台中央
  • 点击舞台中央的按钮
  • 在右侧进行配置,例如修改Label、添加事件(onClick)等

appsmith-btn1.png

点击舞台中央的按钮,或右上角的DEPLOY(部署)进行测试。结果如下图所示:

appsmith-btn2.png

连接本地数据库

笔者的本地数据库采用 mySQL

据官网介绍,在 appsmith 中使用本地 api,需要使用 ngrok —— 如何在 Appsmith 上使用本地 API

Tipngrok 是将您的应用程序放到互联网上的最快方式。

安装 mySQL

首先下载 mySQL。笔者进入这里,直接点击No thanks, just start my download.下载 .msi 版本。如下图所示:

mysql0.png

双击 .msi 版本安装,未做特殊配置,安装过程需要等待一些时间下载(笔者花了20来分钟):

mysql.png

进入 mysql 工作台:

mysql2.png

:实例名称笔者是 ”MySQL80“

安装 Navicat for MySQL

Navicat for MySQL 为数据库管理供了直观而强大的图形界面。

直接来 这里 下载安装即可

启动,然后新建 mysql 的连接,输入相关信息。如下图所示:
mysql3.png

点击Test Connection测试连接

mysql4.png

连接成功!

新建一个数据库 test-database,再创建一个表 users,定义4个字段。如下图所示:

mysql5.png

点击 Test Connection 测试连接,报错如下:

client does not support authentication protocol requested by server; consider upgrading MySQL client

笔者依次输入下面三个命令,再次测试即可通过:

mysql> use mysql;

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '你的密码';
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

安装 ngrok

进入 ngrok 官网

首先进行免费注册,然后就能获取授权码,用于连接你的账号。如下图所示:

ngrok.png

Tip:注册好像需要能FQ,笔者使用 github 账号授权完成注册。

然后进入官网的 Download 模块下载 wins 版本,解压即可:

D:\software
// 下载的源文件
2022/05/03  23:00         7,261,772 ngrok-v3-stable-windows-amd64.zip
// 解压
2022/04/27  07:02        17,821,696 ngrok.exe

双击 ngrok.exe,然后输入授权码相关代码连接账号:

software>ngrok config add-authtoken 28g6uez9gLpfamK1zG6j81SioFY_849x4eb96MNpQLaot5naj
Authtoken saved to configuration file: C:\Users\77714\AppData\Local/ngrok/ngrok.yml

最后提供本地网络应用程序:

software>ngrok tcp 3306

ngrok2.png

:两处红框的信息稍后会在 appsmith 连接数据源时使用。重启后,端口 17872 也会改变。

创建数据源

Appsmith 选择 mysql 数据源。如下图所示:

mysql6.png

然后输入相关信息,点击Test测试通过。如下图所示:

appsmith7.png

创建成功!

:倘若重启 ngrok(例如重启机器了),这里的端口(17872)需要重新配置,因为端口变了,否则测试不会再通过。

创建查询

点击NEW QUERY...新建查询。如下图所示:

appsmith8.png

点击Select。如下图所示:

appsmith9.png

Tip:上图的 CreateSelectUpdateDelete 是否就是对应官网描述的 CURD

With our JavaScript-based visual development platform, build CRUD apps, Dashboards, Admin Panels, and many more 10x faster.

使用我们基于 JavaScript 的可视化开发平台,构建 CRUD 应用程序、仪表板、管理面板等的速度提高 10 倍。

修改代码为SELECT * FROM users,用于查询我们的表。然后点击右上角的RUN,数据即可同步过来。如下图所示:

appsmith10.png

Tip:笔者先前已在数据库中插入了这条记录

Table Widgets

拖拽表格部件,输入{{}}根据提示配置表格数据。如下图所示:

appsmith11.png

刷新表格

appsmith12.png

内网部署 Appsmith

需求:将 Appsmit 部署到内网的 ubuntu 20.04 服务器

步骤如下:

在外网环境中下载镜像并导出 .tar 文件:

// 在外网环境中下载镜像
$ docker pull appsmith/appsmith-ce

// 导出镜像
$ docker save appsmith/appsmith-ce -o appsmith_appsmith_ce.tar

把导出的 .tar 文件弄到的 ubuntu 服务器中,然后导入镜像,最后运行即可:

// 导入镜像
$ docker load -i appsmith_appsmith_ce.tar

// 运行镜像 appsmith/appsmith-ce
$ docker run -d --name appsmith -p 80:80 -v "$PWD/stacks:/appsmith-stacks" appsmith/appsmith-ce

浏览器访问 localhost:80,后续就和上文相同。比如注册信息也没有什么需要注意的。

其他章节请看:

低代码 系列

最强开源低代码平台 - Appsmith 功能介绍与使用体验 - 知乎

mikel阅读(238)

来源: 最强开源低代码平台 – Appsmith 功能介绍与使用体验 – 知乎

Appsmith 背景介绍

Appsmith 成立于 2019 年,是一款开源低代码框架。这两年发展迅猛,是现在 GitHub 上最火的低代码开发平台(18k star),目前处于正式发行阶段。Appsmith 主要用于构建管理面板、内部工具和仪表板等,允许拖放 UI 组件来构建页面,通过连接到任何 API、数据库或 GraphQL 源,并使用 JavaScript 语言编写逻辑,可以在短时间内创建内部应用程序。这种开发模式仅需了解一些基本的 JavaScript,在代码方面没有抽象层或术语需要学习,因而广受开发人员的好评。

Appsmith 背后的理念来自创始人 Mohan 和 Nayak,他们意识到这是一个可行项目后,协力把它推向了市场。在这个过程中,他们决定不会将其授权为专有服务并出售服务订阅,而是开源该工具,以便任何人都可以使用它。

开发人员的时间是非常宝贵的,Nayak 说:Appsmith 将开发人员时间减少了 90%,框架本身为您承担了很多没必要的繁重工作。因此,它不仅减少了您需要的团队规模,还使规模较小的开发人员团队更有效率。 (“Low-code platforms like Appsmith reduce the amount of developer time that you need by like 90% because the framework itself is doing a lot of heavy lifting. So not only does it reduce the size of a team you need, it makes even a smaller team of developers more efficient.”)

Appsmith 具体介绍

组件

Appsmith 使用现成的组件构建工作流,将表格、图表、表单等常见元素直接拖入应用程序,包括文本、表单、输入、按钮、表格、图像、复选框、开关、单选按钮、日期选择器、下拉列表、文件选择器、容器、地图、模式、富文本编辑器、选项卡和视频等。

动图封面

数据源

Appsmith 可以使用 15+ 种 DB、REST API 或 GraphQL 作为数据源,同时支持 OAuth 2.0 等多种鉴权协议。通过配置数据源以及编写该数据源所对应的查询语句,可以做到对与底层数据的增、删、改、查工作。

动图封面

编写 MongoDB 查询:查询平均分大于 7 分的电影

JavaScript

许多平台在需要添加更高级功能时创建了自己的 DSL(领域特定语言)或抽象层,这种方法很难学习上手且功能有限。Appsmith 巧妙的解决了这个困难,操作者能够直接在应用程序的任何地方插入 JavaScript,可以实现多个查询的编排以及数据之间的 ETL (Extract-Transform-Load) 操作。

使用 JavaScript 对原始数据进行转换并展示在表格中

托管与免费

由于 Appsmith 是一个开源项目,因此代码可以免费使用,但它必须托管在某个地方。Appsmith 提供了免费的社区版自托管服务,同时他们在今年年初推出了部分免费的商业云托管服务,此外一个企业版正在制定中,即将推出。

关于如何在 Docker 上部署自己的 Appsmith 服务器,可以参考 Docker Setup

应用发布与分享

您可以进行多次编辑和保存,并在编辑器中查看结果,应用程序更改后会自动保存,并实时反映在编辑器中,单击「DEPLOY」后 Appsmith 会将这些更新推送到应用程序的实时版本。

Appsmith 按组织对应用程序进行分组,并通过这些组与其他用户共享创建的应用程序。当您与某人共享应用程序时,实际上是在共享该组织中的所有应用程序 —— 因此务必将确认当前组织下的所有应用程序以及新用户所分配的角色。

安全与加密

Appsmith 应用程序默认是安全的,所有连接都经过 TLS 加密,凭据使用 AES-256 加密,防止数据泄露,具有可靠安全的加密传输。

开源与社区

Appsmith 不采用寻常低代码解决方案——它是完全开源的,这意味着任何人都可以在 GitHub 上下载源代码,在本地(或第三方云主机上)安装、部署,以及后续的二次开发。Appsmith 的开发团队也非常欢迎对社区做出贡献的使用者,感兴趣的话,您也可以创建自定义小组件,通过 GitHub 提交自己的功能和错误修复,或者是在 Discord 中与他们讨论新的想法和建议。

Appsmith 团队主要通过几个渠道与社区进行交流:

Discord 非常活跃,Appsmith 非常积极地联系社区寻求反馈,每周四都会举行现场社区电话会议,演示新的或即将推出的功能并且回答社区的问题。

Appsmith 总体评价

在之前的文章里提到过(「为什么说低代码是内部系统开发的未来趋势?」「深度解读:2021 海外企业内部系统现状」),低代码的基本理念是将日常活动中的艰巨工作从中抽身出来,以便开发人员可以专注于高阶业务逻辑,提高公司和开发者的效率。Appsmith 凭借低代码 UI 开发器、大量数据源连接器、自定义 JavaScript、开源许可证和蓬勃发展的社区,在低代码开发市场领域占据独特的地位。

Appsmith 使用预构建的 UI 组件创建页面,再连接到数据源与 Appsmith 集成,包括 REST API、MySQL、Postgres、MongoDB 和其他数据库,然后创建和执行查询,在 SQL 或 JS 编辑器中编写查询和业务逻辑,将 UI 绑定到您的查询响应或业务逻辑中,最后单击便可部署您的应用并邀请组织中的其他用户一起合作。通过这些步骤,您可以为复杂的多步骤工作流创建简单的 CRUD 应用程序,使开发与任何数据源连接的 UI 变得非常容易,也可以通过在任何地方编写 JS 来自定义应用程序。

不过我们在亲身体验了 Appsmith 一段时间,也利用它开发了一些内部系统后,也发现该平台的一些局限性:

  1. 当前的开源代码在可读性、可维护性等方面还有待加强,二次开发门槛很高。
  2. 系统稳定性方面仍有欠缺,部分组件或者整个应用可能会无响应。
  3. 关于企业功能部分还有很多需要完善的地方,例如当前权限系统设计过于简单,无法适配复杂业务场景。

码匠与 Appsmith 的比较

码匠在充分参考了 Appsmith、Retool、JetAdmin 等多款海外知名低代码平台的设计理念同时,针对国内用户使用习惯做了大量优化,UI 界面设计更加适合国内场景,并整合了多款国内数据源,包括 飞书、企业微信、钉钉、阿里云 OSS 等,不仅如此,码匠还提供了国内业务场景下常见的租户管理、更加细粒度的权限控制、审计日志等功能,为您的企业信息安全保驾护航。在系统稳定性方面,码匠在系统快速迭代的同时高度重视系统的健壮性与可靠性,设计与开发过程中充分考虑各种异常场景,力求面对各种异常与突发情况仍然能够提供持续、可靠的服务能力。

动图封面

码匠目前提供了云端在线版本和私有化部署方案,欢迎您去官网(majiang.co/)亲自体验,如果希望进一步与我们讨论码匠的方方面面,欢迎与我们联系~

玩转玩转WordPress上的数据库缓存插件Redis Object Cache- 知乎

mikel阅读(347)

玩转WordPress上的数据库缓存插件Redis Object Cache

来源: 玩转WordPress上的数据库缓存插件Redis Object Cache – 知乎

为了提升网站速度,降低MySQL的负载,通常都需要将数据缓存到内存中,常用的就是memcached、redis,但是相对来说Redis更符合需求,可以支持非常复杂的数据类型,而且也更通用。于是我就选择了Redis,而WordPress上最好的redis缓存插件就是Redis Object Cache了,直接在“插件>安装插件”搜索名称安装即可。

Redis如何通过命令行搭建我暂且不谈,因为宝塔可以直接安装redis,如果你Redis都是一台机子的话,安装之后可以到php那里装redis插件,这个php的redis插件是给你缓存session用的。

一般来讲,安装插件后,直接点那个Enable Object Cach,就可以跑了。

那么问题来了,假如有的小伙伴有钱,有多台服务器怎么办呢?

啊这…虽然我穷的一批,买服务器都只能天天蹭优惠,每台服务器都不在一个机房,但是我测试了一下,还是可以使用的。

虽然Redis Object Cache的控制页面没给我们出选择题和填空题,但是我们可以直接把卷子改了。

有两种方法:

第一种:爷直接去wp-config.php改

在这个PHP文件的最后,添加如下代码:

// Redis Object Cache真麻烦嘤嘤嘤
define('WP_REDIS_HOST',['127.0.0.1','192.168.0.6']);
define('WP_REDIS_SERVERS', [
'tcp://127.0.0.1:6379?database=6&alias=master',
'tcp://192.168.0.6:6379?database=6&alias=slave-01',
]);

当然,这个可以连多个redis主机,不过这里需要注意WP_REDIS_SERVERS的alias的两个名词必须是master和slave-01这种形式。

第二种:玄学问题的究极解决方法

第一种方法我是真没搞懂为什么在我常用的服务器上不行,但是拿到我闲置得沾灰的服务器上却可以,估计是php本身的redis扩展的问题,也有可能是别的问题。

由于Enable Object Cach的时候,系统会将
/wp-content/plugins/redis-cache/includes/ 插件目录下的 object-cache.php 文件复制到/wp-content/目录下,所以启用之前在这个php文件改下代码,大概这段代码长这样:

$parameters = array(
'scheme' => 'tcp',
'host' => '127.0.0.1', 
'port' => 6379,
'database' => 0,
'password' => '123',
'timeout' => 1,
'read_timeout' => 1,
'retry_interval' => null,
);

请注意了,这个插件的文件夹根目录有一个叫object-cache.php的玩意,眼睛别看错了,然后傻乎乎的跑过来跟我说我配置失败了你能帮帮我吗?我只帮老奶奶过马路,你要是问这种问题就给我一边凉快去。

关于host那里的多值的php写法应该是支持的,但是我忘了怎么写了(实际上是懒得测试),另外如果要改object-cache.php里面的东西,记得把插件先关了,把wp-content目录下的副本删了,再在原插件里面改,再去启用。

另外,为了防止某些二货的插件自动升级了,配置失效了,找到我对我说你能帮帮我吗,所以我建议最后记得在wp里面把插件自动更新关了,关闭自动更新关闭代码如下:

function remove_update_notifications( $value ) {
if ( isset( $value ) && is_object( $value ) ) {
	unset( $value->response[ 'redis-cache/object-cache.php' ] );
}
return $value;
}

这里的redis-cache是插件目录名,object-cache.php是主文件名,如果有这几行代码,如果要禁用其他的插件自动更新,直接用unset那行代码复制并改一下往下面加。

总结

wp配置redis还是很简单的,不过如果redis没password就留空或者直接把代码删了。

ChatGPT 怎么用最新详细教程-新手小白一看就会 - 掘金

mikel阅读(424)

来源: ChatGPT 怎么用最新详细教程-新手小白一看就会 – 掘金

ChatGPT 以其强大的信息整合和对话能力惊艳了全球,在自然语言处理上面表现出了惊人的能力。这么强大的工具我们都想体验一下,那么 ChatGPT 怎么用呢?本文将给你逐步详细介绍。

使用 ChatGPT 主要有4步:

  1. 0 需要科学上网才能使用,你懂的,点击链接https://tly.la/847971
  1. 注册 ChatGPT 账号
  2. 通过短信接码平台 sms-activate.org 完成 ChatGPT 手机号验证
  3. 登录 ChatGPT 账号,对话框输入,开始使用 Chat GPT !
  4. 输入任意话题,探索 ChatGPT 的强大功能

好了,我们开始逐步图文介绍。

1.注册 Chat GPT 账号

注冊ChatGPT这一步主要包含以下几步(需要按照顺序逐步操作):

  1. 将网络环境切换成国外ip(注意:必须是国外 ip 如美国、加拿大等,香港澳门 ip 是不行的),且后续整个注册流程都必须在此网络环境下进行。
  2. 打开 chat.openai.com/auth/login 链接并使用自己的邮箱进行账号注册
  3. 打开邮箱查收 OpenAI 账号验证邮件,点击验证按钮完成邮箱验证

下面每一个步骤的图片,大家可以对照着进行操作

邮箱验证完成后,我们第一步注册 ChatGPT 账号就算完成了,但是到这里我们还不能开始使用 ChatGPT,因为我们还需要进行手机号码验证。没有通过手机号码验证是使用不了 OpenAI(ChatGPT的开发商) 的服务的。

因为OpenAI官方的限制,国内和港澳的手机号码还有 Google Voice 的虚拟号码都是不能使用的。

这时候就要用到下一步的接码平台。

最简单省事的方式是购买最简单的账号,不用准备各种复杂的环境(适合新手小白),价格也不高只要16元,省去麻烦的环境配置过程,非常推荐!

那要怎么验证呢,请看下一步。

2.完成 ChatGPT 手机号码验证

这一步需要用到接码平台完成手机号验证,推荐平台链接地址:sms-activate.org

具体过程包含以下几步:

  1. 通过自己的邮箱注册 sms-activate.org 账号并完成邮箱验证(其他接码平台同理,但是不一定每个都好用,sms-activate是博主亲自验证过的)
  2. 打开邮箱查收验证邮件并点击确认完成 sms-activate.org 账号认证
  3. 登录sms-activate并且在右上角找到充值按钮,点击进行充值
  4. 点击充值跳转后,往下滑找到支付宝,这里建议大家充值0.2美金就可以了(不够用再充)。
  5. 充值好了以后回到首页搜索「open」关键字就可以找到 OpenAI 验证码的临时号码购买链接。
  6. 在右侧激活区看到待使用的临时号码,将此号码复制到 OpenAI 的验证码接收区里面。
  7. 在 OpenAI 的页面点击发送验证码,这样就可以在接码平台接收到验证码(有时候有一点慢需要耐心等待一下),将验证码填进去,这样就完成 ChatGPT 手机号验证了。

这一步比较长,但是操起其实也不复杂,简单说就是通过接码平台收验证码完成验证,大家只要按照步骤操作就能成功。

打开邮箱找到验证邮件

历经千辛万苦,我们终于可以开始使用 ChatGPT 啦,恭喜!

3.登录 ChatGPT 账号并开始使用

注册完后,我们去 ChatGPT 网站去登陆: chat.openai.com/auth/login

输入我们上面第一步注册好的账号密码就可以成功登录。

登录以后我们会进入到 ChatGPT 的主界面,在屏幕的正下方就是我们使用 ChatGPT 的输入对话框,ChatGPT采用交互式对话界面,使用非常便捷友好,你可以任意输入你感兴趣的内容并敲回车,ChatGPT 将会回答你。

比如我们问一下 ChatGPT 梯形相关的问题,看看他会怎么回答。

到这里,你已经学会了如何使用 ChatGPT 了!

4.探索 ChatGPT 的强大功能

你可以尝试用各种方式向 ChatGPT 提出各种各样的问题或者指令,通过这一步你将更能体会到 ChatGPT 的强大之处。来吧,朋友,让我们真正学会 Chat GPT 怎么用。

比如:

回答知乎问题

例如问题如何年入百万:

或者是高考如何考700分

或者是这个问题:除了电影院,还有什么有意思的约会地点?

我发现了新大陆,是不是????

3、写文案

我感觉百事可乐的文案我也可以做

4、写代码

可以的,这回程序员直接失业!有这个法宝,还要程序员干嘛鸭

二、排查程序bug 就这排查Bug的能力,我看比我都要强

5、写情书

6、搞钱

这真的太牛逼了,回答的没毛病。

第二,如何赚更多的钱,简直没毛病好吧!

7、亚马逊搞钱

简直吊炸天!!!

简直吊炸天!!!

然后 亚马逊上怎么选品?

可以,我已经悟透了!

8、如何做好自媒体

好啦,到这里为止,我们已经一步步教会了你怎麽注冊 ChatGPT账号,怎么通过 ChatGPT 手机号验证,怎么用 ChatGPT。

祝大家玩的愉快!

如上是需要我们去注册玩耍的,如果不想要那么麻烦,也可以看国内的一些网站,如下所示:

作者:黛色翩翩
链接:https://juejin.cn/post/7197687219582287933
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

苹果cms如何开启Redis高速缓存提升访问速度_苹果cms播放器缓冲设置_wanyizhilu的博客-CSDN博客

mikel阅读(507)

来源: (1条消息) 苹果cms如何开启Redis高速缓存提升访问速度_苹果cms播放器缓冲设置_wanyizhilu的博客-CSDN博客

由于采集的影片数据过多,如果不设置缓存,可能会造成网站访问缓慢,或者CPU消耗过高。随着用户访问量的上升,添加缓存设置是有这个必要的,众所周知,redis作为一款非常优秀的缓存工具,非常适合苹果cmsv10。

redis的优点:

redis支持简单的k/v类型的数据,还支持list,set,zset,hash等类型

redis支持主从模式应用

redis支持数据持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用

redis单个value的最大限制是1GB,memcached是1MB

下面的教程适合在宝塔面板下设置完成:

1,来到宝塔面板>>软件商店:安装Redis,安装好即可 其余不用管。

 

2,然后再找到你的网站环境所使用的php版本点击设置。

 

3,进入你所使用的php版本设置,安装扩展,安装redis缓存器

 

4,进入苹果CMS后台,网站参数设置-性能优化,缓存方式设置为Redis,IP:127.0.0.1端口:6379然后测试连接 连接成功代表能正常使用该缓存,然后开启:数据缓存/页面缓存(如下图)

 

5,最后一步非常重要,那就是重载php配置,重启网站才能生效,小伙伴们别忘啦!
————————————————
版权声明:本文为CSDN博主「wanyizhilu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wanyizhilu/article/details/104573761

最新获取ip地址方法,搜狐的已经不能用了_weixin_47411869的博客-CSDN博客

mikel阅读(236)

来源: (1条消息) 最新获取ip地址方法,搜狐的已经不能用了_weixin_47411869的博客-CSDN博客

最近开发过程中,搜狐获取ip地址的方法被禁用了,百度了一波,最终找到下面这个,有需要的朋友拿走不谢哦

//获取IP
fetch(‘https://api.ipify.org?format=json’)
.then(res => res.json())
.then(data => {
console.log(data, “dataip”)
var Ip = data.ip
localStorage.setItem(‘Ip’, Ip)
console.log(localStorage.getItem(‘Ip’, Ip))
})`
————————————————
版权声明:本文为CSDN博主「weixin_47411869」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_47411869/article/details/128289914

SQL Server中使用msdb数据库的存储过程sp_delete_backuphistory和sp_delete_database_backuphistory来删除备份和恢复历史数据 - PowerCoder - 博客园

mikel阅读(261)

来源: SQL Server中使用msdb数据库的存储过程sp_delete_backuphistory和sp_delete_database_backuphistory来删除备份和恢复历史数据 – PowerCoder – 博客园

根据微软文档对sp_delete_backuphistory存储过程的介绍,SQL Server在每次备份和恢复数据库后,会向msdb系统数据库的备份和恢复历史表写入数据,如果SQL Server经常要做频繁的备份和恢复操作,会造成msdb系统数据库逐渐变大,所以微软建议定期调用msdb数据库的存储过程sp_delete_backuphistory来删除msdb系统数据库中备份和恢复历史表的内容:

EXEC msdb.dbo.sp_delete_backuphistory @oldest_date = '12/20/2019'--删除msdb系统数据库中,2019年12月20日之前的备份和恢复历史表内容

详情可以查看:sp_delete_backuphistory

sp_delete_backuphistory存储过程是根据时间来删除备份和恢复历史表数据,我们还可以调用sp_delete_database_backuphistory存储过程来删除某一个数据库的备份和恢复历史表内容:

EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'TestDB'--删除msdb系统数据库中,TestDB数据库的所有备份和恢复历史表内容

 

参考文献:

sp_delete_backuphistory
sp_delete_database_backuphistory

 SQL Server日志文件过大 大日志文件清理方法 不分离数据库_slimboy123的博客-CSDN博客

mikel阅读(335)

来源: (1条消息) SQL Server日志文件过大 大日志文件清理方法 不分离数据库_slimboy123的博客-CSDN博客

SQL Server日志文件过大 大日志文件清理方法 ,网上提供了很多分离数据库——〉删除日志文件-〉附加数据库 的方法,此方法风险太大,过程也比较久,有时候也会出现分离不成功的现象。下面的方式是不需要做数据库分离和附加操作的。

SQL 2008收缩清空日志方法:

1.在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完整模式,一定必务要再改回完整模式,不然数据库就不支持时间点备份了。
1).选择数据库–属性—选项—恢复模式–选择简单。
2).收缩数据库后,再调回完整。
2.可以用命令直接操作

USE[master]
GO
ALTER DATABASE 要清理的数据库名称 SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE 要清理的数据库名称 SET RECOVERY SIMPLE –简单模式
GO
USE 要清理的数据库名称
GO
DBCC SHRINKFILE (N‘要清理的数据库名称_log‘ , 2, TRUNCATEONLY) –设置压缩后的日志大小为2M,可以自行指定
GO
USE[master]
GO
ALTER DATABASE 要清理的数据库名称 SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE 要清理的数据库名称 SET RECOVERY FULL –还原为完全模式
GO

90多G的日志文件打开3分多钟清理完毕

注意:要清理的数据库名称_log为数据设置的逻辑名

————————————————
版权声明:本文为CSDN博主「slimboy123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/slimboy123/article/details/54575592

封装一套几乎通用的WebSocket代码 - 简书

mikel阅读(515)

来源: 封装一套几乎通用的WebSocket代码 – 简书

前言

对接过几次WebSocket连接,无论是在纯JavaScript、Vue亦或Uniapp等框架语言中使用,Socket代码流程基本上差不多。无非就是:

  • 发起连接
  • 发送数据(发送心跳等)
  • 接收数据
  • 关闭连接
  • 断线重连
  • 异常处理…
    每次都需要重写比较麻烦,故封装一套大致流程的WebSocket代码,哪怕从纯JavaScript项目搬到Vue、Uniapp等框架中,也只需要做小部分修改即可。

具体实现

创建socket.js,代码如下:

// 在Vue中使用,不需要可以去除以下引用
import Vue from 'vue'
import storage from 'store'

// 导出socket对象
export {
  socket
}

// socket主要对象
var socket = {
  websock: null,
  // 固定的WebSocket地址:此处是从env文件中读取socket地址,可以自行从其他config文件中读取或直接写死
  // 如需使用动态WebSocket地址,请自行作ajax通讯后扩展
  ws_url: process.env.VUE_APP_API_SOCKET_URL,
  // 开启标识
  socket_open: false,
  // 心跳timer
  hearbeat_timer: null,
  // 心跳发送频率
  hearbeat_interval: 5000,

  // 是否自动重连
  is_reonnect: true,
  // 重连次数
  reconnect_count: 3,
  // 已发起重连次数
  reconnect_current: 1,
  // 重连timer
  reconnect_timer: null,
  // 重连频率
  reconnect_interval: 3000,

  /**
   * 初始化连接
   */
  init: () => {
    if (!("WebSocket" in window)) {
      console.log('浏览器不支持WebSocket')
      return null
    }

    // 已经创建过连接不再重复创建
    if (socket.websock) {
      return socket.websock
    }

    socket.websock = new WebSocket(socket.ws_url)
    socket.websock.onmessage = function (e) {
      socket.receive(e)
    }

    // 关闭连接
    socket.websock.onclose = function (e) {
      console.log('连接已断开')
      console.log('connection closed (' + e.code + ')')
      clearInterval(socket.hearbeat_interval)
      socket.socket_open = false

      // 需要重新连接
      if (socket.is_reonnect) {
        socket.reconnect_timer = setTimeout(() => {
          // 超过重连次数
          if (socket.reconnect_current > socket.reconnect_count) {
            clearTimeout(socket.reconnect_timer)
            return
          }

          // 记录重连次数
          socket.reconnect_current++
          socket.reconnect()
        }, socket.reconnect_interval)
      }
    }

    // 连接成功
    socket.websock.onopen = function () {
      console.log('连接成功')
      socket.socket_open = true
      socket.is_reonnect = true
      // 开启心跳
      socket.heartbeat()
    }

    // 连接发生错误
    socket.websock.onerror = function () {
      console.log('WebSocket连接发生错误')
    }
  },

  /**
   * 发送消息
   * @param {*} data 发送数据
   * @param {*} callback 发送后的自定义回调函数
   */
  send: (data, callback = null) => {
    // 开启状态直接发送
    if (socket.websock.readyState === socket.websock.OPEN) {
      socket.websock.send(JSON.stringify(data))

      if (callback) {
        callback()
      }

      // 正在开启状态,则等待1s后重新调用
    } else if (socket.websock.readyState === socket.websock.CONNECTING) {
      setTimeout(function () {
        socket.send(data, callback)
      }, 1000)

      // 未开启,则等待1s后重新调用
    } else {
      socket.init()
      setTimeout(function () {
        socket.send(data, callback)
      }, 1000)
    }
  },

  /**
   * 接收消息
   * @param {*} message 接收到的消息
   */
  receive: (message) => {
    var params = JSON.parse(message.data)

    if (params.kind != 0) {
      console.log('收到服务器内容:', message.data)
    }

    if (params == undefined) {
      console.log("收到服务器空内容")
      return false
    }
    
      // 以下是接收消息后的业务处理,仅供参考

    // 被服务器强制断开
    if (params.kind != undefined && params.kind == 110) {
      socket.socket_open = false
      socket.is_reonnect = true

      // 被服务器踢掉
    } else if (params.kind == 99) {
      socket.socket_open = true
      socket.is_reonnect = false
      console.log("被挤下线 不做处理")
      return false
    } else if (params.kind == 'order_new') {
      console.log('有新的订单通知')
      var time = Date.parse(new Date()) / 1000
      params.timestamp = parseInt(params.timestamp)

      console.log(time - params.timestamp)

      // 测试环境不限制推送时间
      if (process.env.NODE_ENV == 'development') {
        // 小于半小时push和播放  大于半小时并且小于3天只push  大于3天不处理
        if ((time - params.timestamp) > 3600 * 24 * 3) {
          console.log('超过三天')
          return false
        }

        if ((time - params.timestamp) > 30 * 60 && (time - params.timestamp) < 3600 * 24 * 3) {
          console.log('超过半小时')
          return false
        }
      }

      // uniapp中可以使用$on和$emit来实现对应的业务处理

    } else if (params.kind == 'refund_created') {
      console.log('有新的退款订单')
      
    }

    if (params.kind == 'order_new' || params.kind == 'refund_created') {
      console.log('订单列表刷新')

    }
    
      // 自行扩展其他业务处理...
  },

  /**
   * 心跳
   */
  heartbeat: () => {
    console.log('socket', 'ping')
    if (socket.hearbeat_timer) {
      clearInterval(socket.hearbeat_timer)
    }

    socket.hearbeat_timer = setInterval(() => {
      const token = storage.get('Access-Token')
      var data = {
        kind: 0, //请求类型 kind 0 心跳包
        shop_id: Vue.prototype.$shop_id(false), //如果是商家 传当前店铺ID 否则可不传
        'API-Token': token, //用户的token
        'API-Source': 'MERCHANT', // MERCHANT  商家  CUSTOMER  顾客
      }
      socket.send(data)
    }, socket.hearbeat_interval)
  },

  /**
   * 主动关闭连接
   */
  close: () => {
    console.log('主动断开连接')
    clearInterval(socket.hearbeat_interval)
    socket.is_reonnect = false
    socket.websock.close()
  },

  /**
   * 重新连接
   */
  reconnect: () => {
    console.log('发起重新连接', socket.reconnect_current)

    if (socket.websock && socket.socket_open) {
      socket.websock.close()
    }

    socket.init()
  },
}

使用时主要修改socket对象中的一些配置、发送数据处理、接收数据业务处理等。

如何使用

// 引入socket.js
import { socket } from '@/utils/socket'

// 发起连接
socket.init()

// 发送数据
socket.send({test:123}, () => {console.log('这是回调函数,发送test 123后执行')})

// 断开连接
socket.close()

// 重新连接
socket.reconnect()

封装后,使用简单粗暴。

作者:Coder1024
链接:https://www.jianshu.com/p/f9aa24ee91dd
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。