妙蛙种子

妙蛙种子 查看完整档案

北京编辑  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

妙蛙种子 发布了文章 · 今天 09:31

如何在Windows上运行Apache Kafka?

Windows是您青睐的开发环境吗?想在Windows上运行Apache Kafka吗?由于Windows Subsystem for Linux 2(WSL 2),现在你可以如愿以偿。 Windows仍然不是拿Kafka与生产级工作负载一起运行的推荐平台,但是想试用Kafka,完全没问题。不妨看看如何做到这点。

一、搭建环境

安装WSL 2

Windows Subsystem for Linux 2使这一切成为可能。微软称,WSL 2是“一种直接在Windows上的GNU/Linux环境(包括大多数命令行工具、实用程序和应用程序),未经修改,没有传统虚拟机或双重启动设置的开销。”

确保您在运行Windows 10版本1903.18362或更高版本。点击“开始”,然后进入到设置>系统>关于。在“ Windows规范”部分中找到“操作系统版本”。

图1

如果您使用Windows Update,可能拥有最新版本,可以上手。如果没有,您需要更新Windows 10。

如果您确信Windows是最新的,按照以下说明来安装WSL 2。

启用Windows Subsystem for Linux

在安装Linux发行版之前,开启Windows Subsystem for Linux功能。以管理员身份打开PowerShell,然后运行以下命令:

  1. dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

这可能需要一两分钟。输出应类似以下内容:

  1. Deployment Image Servicing and Management tool
  2. Version: 10.0.18362.1139
  3. Image Version: 10.0.18363.1139
  4. Enabling feature(s)
  5. [==========================100.0%==========================]
  6. The operation completed successfully.

启用虚拟机功能

WSL 2需要虚拟机平台功能。在PowerShell中,运行以下命令:

  1. dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

获取Linux内核更新

下载Linux内核更新程序包,这是常规的Windows Installer(.msi)文件。

双击.msi文件以安装WSL 2更新。如果系统提示您提升权限,请选择“是”以批准安装。

设置默认的WSL版本

在PowerShell中运行以下命令,将WSL 2设置为Linux发行版的默认版本:

  1. wsl --set-default-version 2

输出应类似以下内容:

  1. For information on key differences with WSL 2 please visit https://aka.ms/wsl2

WSL 2可以使用了。想了解安装WSL 2的更多信息(包括故障排查),请参阅《面向Windows 10的Windows Subsystem for Linux安装指南》

安装您青睐的Linux发行版

从Microsoft Store安装Linux,就像在Windows上安装其他应用程序一样。

打开Microsoft Store应用程序,搜索“Linux”。

图2

本文使用Ubuntu 20.04。选择Ubuntu 20.04 LTS,然后点击“安装”。

安装完成后,点击“启动”。外壳将打开并显示以下消息:

Installing, this may take a few minutes...

Please create a default UNIX user account. The username does not need to match your Windows username.

For more information visit: https://aka.ms/wslusers

Enter new UNIX username:

输入用户名和密码以完成安装。

图3

安装Java

运行程序包管理器以获得最新更新。在上面打开的Ubuntu外壳窗口中,运行以下命令:

  1. sudo apt-get update && sudo apt-get upgrade -y
  2. ℹ️ Tip: Right-click pastes text into the terminal window.

Kafka要求Java运行时环境版本8或更高。查看Linux安装系统中的Java版本:

  1. java -version

输入应类似这样:

  1. openjdk version "1.8.0_265"
  2. OpenJDK Runtime Environment (build 1.8.0_265-8u265-b01-0ubuntu2~20.04-b01)
  3. OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)

如果Java未安装或不是合适的版本,使用发行版的程序包管理器来安装它。有许多方法来安装Java。在Ubuntu上,这是最简单的方法之一:

  1. sudo apt install openjdk-8-jdk -y

下载Kafka

可以使用程序包管理器来安装Kafka,也可以下载打包文件(tarball),直接解压缩到本地机器上。

Kafka下载网站选择一个镜像,下载打包文件。下列命令下载Apache Kafka版本2.6:

  1. wget https://ftp.wayne.edu/apache/...

运行以下命令,解压Kafka压缩包,并通过cd切换到kafka目录:

  1. tar -xzf kafka_2.13-2.6.0.tgz
  2. cd kafka_2.13-2.6.0

运行ls –al命令,列出kafka目录的内容:

  1. total 64
  2. drwxr-xr-x  7 jim jim  4096 Oct 14 12:27 ./
  3. drwxr-xr-x 25 jim jim  4096 Nov 20 12:52 ../
  4. -rw-r--r--  1 jim jim 29975 Jul 28 11:16 LICENSE
  5. -rw-r--r--  1 jim jim   337 Jul 28 11:16 NOTICE
  6. drwxr-xr-x  3 jim jim  4096 Jul 28 11:23 bin/
  7. drwxr-xr-x  2 jim jim  4096 Jul 28 11:23 config/
  8. drwxr-xr-x  2 jim jim  4096 Oct 14 12:26 libs/
  9. drwxr-xr-x  2 jim jim  4096 Oct 14 12:28 logs/
  10. drwxr-xr-x  2 jim jim  4096 Jul 28 11:23 site-docs/

启动Kafka集群

运行以下命令启动ZooKeeper:

  1. bin/zookeeper-server-start.sh config/zookeeper.properties

会有好多输出,ZooKeeper很快准备就绪,通常只需一两秒。

打开另一个终端会话。将目录切换到kafka目录,启动Kafka代理:

  1. cd kafka_2.13-2.6.0
  2. bin/kafka-server-start.sh config/server.properties

如果您将窗口排列成并排,输出应该类似以下屏幕截图:

图4. 在Windows和WSL 2上运行的Ubuntu 20.04上的ZooKeeper(左)和Kafka代理(右)。

生成和使用一些消息

打开另一个终端会话,运行kafka-topics命令,创建一个名为quickstart-events的Kafka主题:

  1. cd kafka_2.13-2.6.0
  2. bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092

输出应类似这样:

  1. first event
  2. second event
  3. third event

将生成者和使用者终端窗口并排排列。在生成者终端中,多输入几个消息,观察它们在使用者终端中出现的情况。

图5

停止Kafka

试用过Kafka后,遵循这些步骤以退出Kafka环境:

  1. 使用Ctrl+C停止使用者和生产成客户端
  2. 使用Ctrl+C停止Kafka代理
  3. 使用Ctrl+C停止ZooKeeper服务器
  4. 运行以下命令以清理:
  5. rm -rf /tmp/kafka-logs /tmp/zookeeper
查看原文

赞 0 收藏 0 评论 0

妙蛙种子 发布了文章 · 2月24日

如何在Java中将DOCX转换为PDF

自从Microsoft Word 2003中引入DOCX格式以来,由于其易于编辑和深入的设计选择,DOCX格式一直在全球各地的办公室中享有很高的知名度。但是9当涉及到兼容性,尤其是最终用户的查看一致性时,它的局限性开始显现出来。

它的复杂性很快就成为一种负担,兼容应用程序的不同版本会给您艰苦的设计带来意想不到的(通常是不幸的)后果。相反,无论设备,操作系统还是应用程序,PDF都具有无所不在的支持和无与伦比的一致显示保真度。但有啥用?,要进行编辑时,PDF也不实用。转换肯定冲会员。

如何在Java中将DOCX转换为PDF

由于这些优点和缺点,在两种格式之间进行转换仍然非常必要,而且在许多情况下通常很关键。手动将少量DOCX文件转换为PDF格式可能很简单,但工作中有很多呢?需要机械性重复呢?从程序角度看待这种转换,必须解决许多问题。

我们的主要问题是首先解析DOCX文件。这样做的主要原因是DOCX非常复杂。此格式的ECMA规范包括5000页,并定期添加新功能。另外,DOCX中的选择深度成为一把双刃剑。另一个问题是DOCX文件实际上是包含多个元数据和文档文件的压缩存档。使用“ rels”对这些文件之间的关系进行排序当然不是一件容易的事。而且,我们甚至还没有解决将所有解析后的数据转换成最终PDF的问题。

让我们假设没有开发时间或预算来从头开始研究整个过程。本教程将展示如何通过使用基于云的API来执行从DOCX到PDF的转换来解决这一难题。还将介绍如何使用此API对DOCX文件执行搜索和替换操作。

实际上,以编程方式对DOCX文件执行搜索和替换非常困难,因为它直接遇到了前面提到的解析问题。但还好的是,我们的API也可以为我们执行此任务。将所有这些放在一起,将使我们能够使用DOCX的编辑功能轻松地为报告,发票,邮件等创建富文本模板,并通过搜索和替换填充它们,然后将它们转换为PDF格式。因此,我们可以利用DOCX的优势来弥补PDF中缺少编辑选项。

在今天的演示中,我们的主要目标是在转换中保持最高的保真度。重要的设计选择(如页面布局,表格和注释)将保持不变。话虽如此,让我们开始设置过程。

我们的第一步包括安装API客户端。向我们的Maven POM文件添加一个存储库引用,如下所示:

XML格式

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

在添加以下依赖项引用之后,这将允许Jitpack动态编译我们的库:

XML格式

<dependencies>
<dependency>
    <groupId>com.github.Cloudmersive</groupId>
    <artifactId>Cloudmersive.APIClient.Java</artifactId>
    <version>v3.62</version>
</dependency>
</dependencies>

编译我们的库之后,我们现在可以将其实现到控制器中了。只需将这些导入命令添加到文件的开头即可。

// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditDocumentApi;

现在是时候调用我们的第一个函数,在本例中为convertDocumentDocxToPdf。下面是一些示例代码,演示了如何构造此代码。

piClient defaultClient = Configuration.getDefaultApiClient();
// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");
EditDocumentApi apiInstance = new EditDocumentApi();
ReplaceStringRequest reqConfig = new ReplaceStringRequest(); // ReplaceStringRequest | Document string replacement configuration input
try {
    byte[] result = apiInstance.editDocumentDocxReplace(reqConfig);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling EditDocumentApi#editDocumentDocxReplace");
    e.printStackTrace();
}

尽管不是特别复杂,但必须遵循一些要求:

  • 有效的DOCX文档应用作我们的inputFile
  • 必须从API实例调用我们的函数
  • 使用API密钥,可以从Cloudmersive网站免费获得。该密钥是免费的,永久有效,将输入文件限制为4MB,并允许从任何Cloudmersive API调用1,000个API。

完成之后,就完成了DOCX to PDF的设置。如果进行测试运行,将看到我们已经可以开始实时转换文档。

现在让我们转向使用DOCX模板创建富文本PDF文档的问题。搜索和替换是动态替换字段以填充这些模板的理想工具。对于单个搜索和替换操作,可以使用editDocumentDocxReplace,它将接受ReplaceStringRequest对象。它由一个inputFile(通过字节数组或URL),要搜索的matchString,replaceString和matchCase bool组成,后者确定是否考虑字母大小写。这是一些示例代码,您可以将其用作参考:

ApiClient defaultClient = Configuration.getDefaultApiClient();
//配置API密钥授权:Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
//取消注释以下行以设置API密钥的前缀,例如“ Token”(默认为null)
//Apikey.setApiKeyPrefix("Token“);
EditDocumentApi apiInstance = new EditDocumentApi();
ReplaceStringRequest reqConfig = new ReplaceStringRequest(); // ReplaceStringRequest | 文档字符串替换配置输入
try {
    byte[] result = apiInstance.editDocumentDocxReplace(reqConfig);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling EditDocumentApi#editDocumentDocxReplace");
    e.printStackTrace();
}

那么,如果需要一次替换大量字符串怎么办?不必重复调用前面提到的函数,我们可以改用editDocumentDocxReplaceMulti。此函数还接受一个请求对象,该对象包含一个单独的字符串替换请求数组,每个请求都有自己的matchString和replaceString。这样可以快速替换字符串,使其在与DOCX模板结合使用时特别有用。例如,可以通过单个函数实时地以诸如名称,地址和日期之类的值填充表单中的所有各个字段。

在该库中,还可以找到用于标识和填充PDF表单字段,检索和编辑元数据,文件验证以及多种流行文件格式之间的转换的功能。

查看原文

赞 0 收藏 0 评论 0

妙蛙种子 发布了文章 · 2月23日

Java、JavaScript、C、C++、PHP、Python都是用来开发什么?

用任何编程语言来开发程序,都是为了让计算机干活,比如编写一篇文章,下载一首MP3等,而计算机干活的CPU只认识机器的指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。理论上任何语言干任何事情几乎都可以, 但是主要干什么那就不一样了。

对于刚步入IT行业的小白,或许只知道某一语言相对应的薪资是多少,但却不知道主要是做什么的,更不会考虑到以后的职业发展方向问题。以下将对编程语言进行详细的讲解。

C和C++

C/C++理论上说可以做任何开发, 只要有合适的硬件驱动和API,特点是效率高,基本上是编译语言里面效率最高的。

除非你的系统中连C/C++编译器都不具备. 某些系统当中C++编译器是不具备的, 但是C一般都具备. 目前而言, C语言主要用来开发底层模块(比如驱动,解码器,算法实现), 服务应用(比如web服务器)和嵌入式应用(比如微波炉里的程序). C++也可以做这些, 不过由于C++的复杂性和标准问题, 人们还是更愿意使用C来做. C++更适合比较复杂但又特别需要高效率的设施,比如大型游戏,一些基础库, 大型桌面应用。

Java、JavaScript、C、C++、PHP、Python都是用来开发什么?

总结:

C: 系统底层, 驱动, 嵌入式开发.

C++: 游戏开发, 大规模, 高性能, 分布式要求的程序开发。

Java

java常常跟”企业”联系在一起, 因为具备一些很好的语言特性, 以及丰富的框架, 在企业应用中最被青睐, 你总可以听到关于J2EE, JSP, Hibernate之类的东西的讨论. 同时, java在手机领域也有一席之地, 在普遍智能化之前, 很多手机就是以支持java应用作为卖点的, 而智能手机爆发之后, java手机主场变成了android, 作为安卓的标准编程语言而存在。

Java、JavaScript、C、C++、PHP、Python都是用来开发什么?

总结:

Java: 网页, 企业级开发, 普通应用软件, 游戏后台。

JavaScript

Javascript听起来跟java有关系, 其实并没有任何关系, 只是名字像而已.就好比雷峰塔和雷锋的关系一样,虽然只差一个字。js最广泛的应用毫无疑问是在web前端. 简单的说, 网站给你传过来的是一堆用各种标签表示格式的文档, 而js负责操纵这些文档实现一些客户端动态效果. js的领地还不仅如此, 现在的Node.js还可以用于服务器端的开发。

Java、JavaScript、C、C++、PHP、Python都是用来开发什么?

总结:

JavaScript是浏览器的脚本语言,一般和Html,CSS这些一起学,主要做网站的前端开发,展现各种酷炫的画面。

Python

Python由于具有丰富和强大的库,它又叫做作胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。

常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。

Python是做服务器开发与物联网开发。信息安全,大数据处理,数据可视化机器学习,物联网开发,各大软件的api,桌面应用,都需要python。

Java、JavaScript、C、C++、PHP、Python都是用来开发什么?

总结:

Python:动态解释型,开发效率高,开源,灵活,入门门槛低。

查看原文

赞 0 收藏 0 评论 0

妙蛙种子 发布了文章 · 2月22日

编程中如何让图片垂直居中?两种方案分享给大家

flex方法

首先给图片添加一个div,设置其宽高及基本属性,其次把div中的display元素设置成flex,最后给img添加align-items:center属性,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style tpye="text/css"> body{ 
            background:#000
        }
        div{
            width: 900px;
            height: 800px;
            background:deeppink;
            display: flex;
            align-items: center;
        }
        div img{
            width: 579px;
            height: 282px;
            align-items: center;
        } </style>
</head>
<body>
<div>
    <img data-original="html.png" alt="">
</div>
</body>
</html>

看下效果

编程中如何让图片垂直居中?两种方案分享给大家

display方法

首先创建一个div,以及对有图片的div设置样式,给img的父级添加一个diaplay,并且属性为table,并且把包含图片的div中的display属性设置成table-cell,最后给有图片的div设置成vertical-align: middle; 属性,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style tpye="text/css"> body{
            background: #bbb;
        }
        div{
            display: table;
            width: 900px;
            height: 700px;
            background: #f3f3f3;
            display: table-cell;
            vertical-align: middle;
        }
        div img{
            width: 282px;
        } </style>
</head>
<body>
<div>
    <img data-original="html.png" alt="">
</div>
</body>
</html>

效果图:

编程中如何让图片垂直居中?两种方案分享给大家

查看原文

赞 0 收藏 0 评论 0

妙蛙种子 发布了文章 · 2月21日

Js中的new操作符起到什么作用?

Js是当今时代最常用的代码操作语言,其中new操作符尤为常见。对于很多代码小白来说,并不清楚new在Js中扮演着怎样的角色,具体是做什么用,干了什么。本文从new操作符的作用着手,简单介绍new操作符相关知识。

Js中的new操作符起到什么作用?

  1. 创建了一个空对象
var obj=new Object();

在Js代码中,new操作符的主要作用是产生对象。通过new创建空对象,为创建对象打基底。

  1. 设置原型链
obj.__proto__= Func.prototype;

JS中在利用new操作符建好基底后,就开始下一步的Js代码操作,设置原型链。new通过构造函数创建出的实例可以访问到构造函数原型链中的属性,换言之,通过new操作符,原型链链接了实例和构建函数。

  1. (改变this指向)让Func中的this指向obj,并执行Func的函数体。
var result =Func.call(obj);

一般情况下,在Js代码组中,出现this时,构造函数内部是正常工作,但当通过new操作符改变this指向后,所出现的返回值会被正常的返回出去。

  1. 判断Func的返回值类型:如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象。
 if (typeof(result) == "object"){
     func=result;
}
else{
      func=obj;
}

从上述一组new操作符代码中可看出,new还可用来判断Func的返回值类型。如果返回值是值类型,则正常返回。如果是引用类型,就返回到引用类型的对象。

以上四点是new操作符在Js代码中的主要作用,对于Js代码小白希望可以有帮助。

查看原文

赞 0 收藏 0 评论 0

妙蛙种子 发布了文章 · 2月20日

普通函数与箭头函数的区别?

普通函数和箭头函数的区别

箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式,一种只包含一个表达式,连{ ... }和return都省略掉了。还有一种可以包含多条语句,这时候就不能省略{ ... }和return。

箭头函数是匿名函数,不能作为构造函数,不能使用new

普通函数和箭头函数的区别

普通函数和箭头函数的区别

箭头函数不绑定arguments,取而代之需要用展开运算符解决...解决

普通函数和箭头函数的区别

箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己的this值

普通函数和箭头函数的区别

箭头函数通过 call() 或 apply() 方法调用一个函数时,只传入了一个参数,对 this 并没有影响。

普通函数和箭头函数的区别

箭头函数没有原型属性

普通函数和箭头函数的区别

查看原文

赞 0 收藏 0 评论 0

妙蛙种子 发布了文章 · 2月4日

python与PHP的区别

  1. python是动态解释的语言。他可以完成系统级的开发。
  2. python是跨平台的,你可以运用python在mac,在linux,在win下,甚至是s60手机中开发软件;PHP没有这些能力。
  3. 从语法上说python的语法蜜糖更多些,语言结构简练,最简单的,PHP的$烦死你。
  4. web开发上,PHP应用较广,有很多现成的代码和模版,python这方面欠缺,虽然他有很多很好的框架。比如django。
  5. python因其应用范围,学习时间更长,当然如果你只玩网站建设,像上面有人说的webpy学习周期很短,基本上在浏览器中就能完成基本的建站工作。
  6. 如果要学习编程技术,建议python。如果像尽快出网站建议PHP。(PHP的现成整站程序多,改改就能用,但是发展方向没有Python广泛)
查看原文

赞 0 收藏 0 评论 0

妙蛙种子 发布了文章 · 2月2日

如何使用vim快速加密和解密文件

每当您在Linux系统中有一个想要保持私密的文本文件,无论系统中拥有帐户的其他用户可能具有什么特权,您都可以借助加密来实现。一种简单的方法是使用vim编辑器中内置的功能。您需要提供一个密码,然后记住该密码或将其存储在密码保险箱中,该过程非常简单。文件名无法更改,恢复文件内容的方式与加密方式几乎相同。

首先,假设我们有一个以这样开头的文件:

  1. $ head -3 mysecret
  2. I feel the need to put my deepest darkest secret into a text file on my Linux
  3. system. While this likely isn't common practice, I'm not sure that I can trust
  4. anyone with it. But a penguin? That's a different story! So here goes ...

现在,如果不想让其他用户知道您的私密信息,可以使用带-x(加密)选项的vim。

  1. $ vim -x mysecret

vim编辑器将立即索要加密密钥。您将输入两次密码。请注意,密码输入时不会显示,而是每个字符将显示为星号。

  1. Enter encryption key: *
  2. Enter same key again: *

一旦vim打开了文件,它看起来很正常,您可以继续编辑详细信息或添加到您的私密信息中——如果您想这么做,也可以写出加密形式的文件。

想写出加密的内容,只需像平常使用vim那样保存文件即可。

  1. :wq

随后试图查看该文件的任何人都可能会看到以下内容:

  1. VimCrypt~036▒!y)K▒▒i▒▒▒▒▒{▒z▒▒▒D▒:▒▒7▒▒蝇Xd▒#n▒▒▒ڎq4▒▒݋▒^9▒|▒▒▒+A▒]j▒▒▒a▒N▒▒
  2. ▒▒▒▒▒▒}▒▒&f▒▒A3▒Wt[▒T:с▒أny▒*▒▒}▒▒▒▒▒"▒▒▒ڈ^▒C▒E▒W▒▒v▒pV▒_▒Cj͞.EA▒▒▒#▒ex▒:▒K▒▒`P
  3. ▒u▒ ▒▒yhK▒X▒▒(W▒s(RY▒A▒
  4. ▒▒l9▒▒▒_▒▒▒▒▒I▒▒Lk▒ ▒k▒▒▒▒=▒5G▒▒▒t▒2Ӣ▒gF▒ 3▒Iq▒C▒▒▒▒OZ[▒l▒_▒~▒▒z

一旦您准备好再次读取文件或继续详细表述私密信息,请再次使用vim命令,并在系统出现提示时输入密码。

  1. $ vim mysecret
  2. Need encryption key for "mysecret"
  3. Enter encryption key: *

内容会再次以纯文本显示。

  1. I feel the need to put my deepest darkest secret into a text file on my Linux
  2. system. While this likely isn't common practice, I'm not sure that I can trust
  3. anyone with it. But a penguin? That's a different story! So here goes ...

用通常的:wq结束vim会话,文件将保持加密状态。

如果您准备在某个时候与他人共享您的私密信息,可以像当初调用它那样解密文件。首先使用vim -X命令。注意这回使用大写的X:

  1. $ vim -X mysecret
  2. Need encryption key for "mysecret"
  3. Enter encryption key: *

随后您会看到原始文本。

  1. I feel the need to put my deepest darkest secret into a text file on my Linux
  2. system. While this likely isn't common practice, I'm not sure that I can trust
  3. anyone with it. But a penguin? That's a different story! So here goes ...

然后输入:X,但是当系统提示您再次输入加密密钥(两次)时,只需按回车键:

  1. Enter encryption key:
  2. Enter same key again:

使用:wq再次写出文件。之后,您的文件将恢复为未加密形式。

  1. $ head -3 mysecret
  2. I feel the need to put my deepest darkest secret into a text file on my Linux
  3. system. While this likely isn't common practice, I'm not sure that I can trust
  4. anyone with it. But a penguin? That's a different story! So here goes ...

更多的选择

还有许多其他工具可用于加密文件,但是这种方法只需要vim和用于记住密钥的任何方法。要确定某个文件是否被vim加密,可以运行file命令。在下面的示例中,我们看到该命令告诉您文件何时加密以及何时未加密。

  1. $ file mysecret
  2. mysecret: Vim encrypted file data
  3. $ file mysecret
  4. mysecret: UTF-8 Unicode text

原文标题:Using vim to quickly encrypt and decrypt files,作者:Sandra Henry-Stocker

查看原文

赞 0 收藏 0 评论 0

妙蛙种子 发布了文章 · 2月2日

人们需要了解的边缘计算的谬误

边缘计算对于更广泛的云计算和基础设施服务市场意味着什么?很多行业人士对这一问题仍在进行讨论。调研机构Forrester Research公司的分析师最近对于边缘计算发展进行了预测,而Gartner公司分析师在几年前也提出了类似的评论。

Forrester Research公司一名分析师表示,“边缘计算的发展将在2021年迎来一个拐点,这可能减缓云计算服务的增长。”他指出,边缘计算将会吸引一些原本用于云计算扩展的资金。此外,边缘计算的发展将使公共云的市场增长减少5%。

“2021年将成为边缘计算的一个拐点”这个观点可能是一个谬误。这是一个过激的评论,并且没有实现的机会。

出现“拐点”意味着技术或市场发展方向(或发展步伐)发生了重大而有意义的变化。过去几年发生的事情并不能说明在2021年将陷入困境。事实上,出现这种情况可能需要更长的时间。如果考虑CDN所做的工作以及二线市场数据中心和托管服务提供商所做的事情,边缘计算已经存在了一段时间。而在2021年,这一切并不会突然发生变化。

可以预期边缘计算的需求将会增长,但预计不会出现任何异常情况;这只是基础设施服务行业一贯的持续增长轨迹。如果把边缘计算看作是更小的计算增量,它是部署在更远位置的微型数据中心或靠近无线光纤通道这样的战略连接点,那么现在并没有接近拐点。

在过去的几年中出现了一些新兴技术,概念验证(POC)在2019年兴起,5G技术已经开始推广。随着2021年的到来,这正是边缘计算所处的位置:数量有限的试点项目处于概念验证(POC)阶段,少数专业供应商和服务提供商正在从事这方面的工作。

在需求方面,只有一小部分应用程序和工作负载为此做好了准备。人们经常谈论的下一代应用程序尚未出现。如果没有需求,就不会激发更有意义的增长。

而边缘计算生态系统正在整合。这些发展并不像是拐点。如果说有什么不同的话,那就是一个开始,可能需要在未来十年的大部分时间才能达到临界点。

边缘计算的发展并不会减缓云计算的增长。边缘计算将在相应的层面上减缓或蚕食云计算市场增长的观点只是误导。不要介意分析师预测将会显著削弱公共云的增长。如果从更传统的角度考虑边缘计算,则这一点很适用。

由于Forrester公司分析师似乎从根本上误解了云计算和边缘计算的工作方式,因此其预测是错误的。在CDN之类的传统边缘计算模型中,边缘计算的增长是由于集中式云计算增长而发生的,而不是与云计算无关。例如,内容提供商首先围绕核心构建,然后通过CDN推向边缘。如果没有云计算,边缘计算就不会独立存在(只有极少数的例外)。事实上,边缘计算并不是独立存在的,它高度依赖于处在核心的云计算,可以说它是云计算的副产品或延伸。

在新的场景中使用边缘计算,情况更是如此。基础设施在核心和边缘之间的分配主要是功能分离,以最大限度地提高最终用户的性能。这两项工作是同时进行的,而不是损害对方的利益。边缘计算部署正与核心的云计算中心紧密集成,以便可以轻松访问云平台或公共云基础设施。这将反过来推动云计算的增长,而不是蚕食。因此蚕食云计算市场的想法在这里根本没有意义。

围绕云计算和边缘计算的争论可以追溯到十年前云计算的兴起。运营商和投资者都非常担心云计算会蚕食传统的基础设施服务市场,例如托管数据中心和主机托管。公平地说,出现了一些竞争,但是花费了十多年的时间才得以实现,而且只有在超大规模云平台出现之后,才会直接地感受到这种竞争。

例如,即使是像裸机这样的细分市场,也仍然有一些用例,尽管有种种不利因素,但仍可以继续增长。这些行业并没有像大型机那样正在萎缩。云计算削弱了某些基础设施服务领域的增长,但总的来说,它提升了互联网基础设施生态系统,同时也给其他领域带来了变化。

那么可以在边缘计算中看到类似的结果吗?这并不好比较。公共云也在颠覆传统的基础设施模式,而边缘计算更像是基础设施发展的延伸或迭代。仅此一项就使得边缘计算蚕食云的概念(实际上是放缓其增长轨迹)的想法在短期内是不太可能实现的。

Gartner公司的分析师也发布了类似的声明,但其声明也经不起推敲。Gartner公司的一名分析师在2017年发表的一篇文章中声称:“还有另一种趋势将使工作负载、数据、处理和业务价值从云平台中转移。边缘计算将会蚕食云计算。”

以上已经对这个错误观点进行了讨论。而边缘计算并不是在蚕食云计算,也不是零和游戏。

边缘计算和云计算将协同工作,并且往往会随着水涨船高的发展趋势而相互受益。云计算提供商非常擅长管理他们的标准化、集中化、大规模的数据中心和控制软件。但边缘计算技术将完全不同,其更具活力、更具进化性和竞争力。目前尚不清楚构建块技术将如何不同以及它们将如何具有竞争力。边缘计算仍然与服务器、电力、冷却、网络连接和房地产有关。无线连接和规模更小的微型数据中心是新的组成部分,但它们并不是能够从根本上改变事物的新技术。”

而“新技术”又如何具有竞争力?会让互联网基础设施过时,然后变得无关紧要吗?如果边缘计算要蚕食云计算,那就必然发生这种情况,那么谁将成为边缘计算的赢家?AWS公司已经进入边缘市场,该公司已经推出了Outposts、Local Zones、Wavelength。Microsoft Azure推出了Azure Stack和Azure Arc。

AWS公司之所以关注边缘计算,是因为知道可以推动更多的云计算增长(基础设施以及机器学习和分析工具的普及)。该公司只需要扩展并进入边缘市场,累积数据并将其返回核心。

Forrester公司和Gartner公司的分析师有关边缘计算的预测或评论具有误导性,他们需要对其谬误感到内疚,这也许并不奇怪。许多技术分析师开始涉足云计算领域,并倾向于从中断和过时的角度进行思考。他们没有认识到云计算是主要涉及运营专业知识、服务交付以及基础设施的基础设施业务。对于这些分析师来说,他们当初预测黑莓手机可能占主导地位,然而不久之后,黑莓手机很快就在市场上消亡。他们认为,云计算可能也会如此,将由下一个新事物接管:边缘计算。

边缘计算将会带来一些令人惊奇的变化,但它是基于云计算的下一个合理的迭代,并且这个过程将花费数年才能完成。正是边缘计算与处在核心的云计算之间的紧密共生关系,使得人们错误地以赢家和输家的角度来思考。云计算是颠覆者(或者可能更好地描述为模式转变),它已经取得胜利,并且边缘计算将通过到达最终用户(无论他们身在何处)或支持应用程序的分散化而将事情提升到一个新的水平。云计算仍然是互联网基础设施生态系统的基础。

总体而言,不要期望边缘计算在2021年将会发生任何不同寻常的事情。人们将看到边缘计算部署的增长,新的市场将会有更多的基础设施,将建立更多的合作伙伴关系,并且现场客户将出现在边缘。总的来说,现在是一个由超大规模云计算驱动的市场。因此,不要相信谬误观点的宣传和炒作。

查看原文

赞 0 收藏 0 评论 0

妙蛙种子 发布了文章 · 2月1日

webpack体积怎么优化?有哪些方法?

1)去掉不必要的插件

开发环境和生产环境使用同一个webpack配置文件,导致生产环境打包的js文件包含很多没必要的插件(如:NoEmitOnErrorsPlugin)

2)提取第三方库

第三方库和源代码在一起打包体积会很大

CommonsChunkPlugin 提取代码中公共模块,然后将公共模块打包到一个独立的文件中,以便在其他的入口和模块中使用。

3)代码压缩

内置插件UglifyPlugin,加入这个插件编译速度会变慢,所以一般只在生产环境启用

4)代码分割(webpack的code split配合router)

·webpack的code spliting特性可以将代码库分割成按需加载的块(chunks)

·AMD/commmonJS指定不同的方法去做代码按需加载,他们支持代码分割并充当分割点

·不支持es6的模块系统

5)设置缓存

对于静态文件,第一次获取之后,文件内容没有改变的话直接读取缓存,但是如果缓存时间过长文件要更新的话可以打包后的文件名加入hash值。

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 1 次点赞
  • 获得 0 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 0 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2019-08-27
个人主页被 510 人浏览