你会查列车的信用吗?

今天在 V2EX 看到一篇帖子:坐火车 – 火车实时位置、行驶轨迹路线地图、历史准点率 ,大概是说发帖者开发了一个微信小程序,可以用来查看火车的实时位置、行驶轨迹线路地图、历史准点率,甚至在新版本中提供了列车评价、同行微信群、到站提醒,特别还有一个历史准点率功能,感觉很好很强大!

体验

体验的方式非常简单,微信扫吗即可体验:

wx3f33a780f1a0ce5da2636071d00f3721.jpg

使用方法也很简单,输入城市或是车次进入查询,可以查询到经停城市的列车,或是直接进入车次的信息。

ABF95989-BBD3-45F3-864C-8CF85A5E162Bcb5fa62ba7092c01.png

若是输入城市,就可以查询到出发或是到站经停城市的所有车次信息,如果是输入了车次,会直接进入车次的详情,包括各个经停站的时间、历史准点率等信息,还有到站提醒、同行群以及车次评论等功能。

0FA7E43D-C164-4E63-AB8A-9DF3457363ED296a89b53b422918.png

在首页还有一个按钮,可以直接进入全国车次实时运行情况,视觉效果可以说是很棒了。

83BC6C38-D4C5-4723-83D3-7F9B8335B87536ab98dc498c9bc4.png

原理

如果只是使用的话,这一部分就可以略过了,感兴趣的朋友可以来看一看。帖子原文作者提到自己是受到另一个帖子的启发:12306 车次停靠点地图 哪位 v 友有兴趣可以实现一下,上 github 后必 star ?

这一个帖子里给出了实现需求必要的接口,如查询列车编号、查询列车停靠站,再结合高德、百度、腾讯等地图的可视化及经纬度查询等功能,就可以实现列车停靠站点的查询及地图可视化了。

至于火车实时位置的实现,还需继续探索。

还有一点必须声明:程序数据仅供参考。

参考文献

华为鲲鹏服务器初探

起因

报名了华为云微认证 轻松玩转Kubernetes ,需要一台北京四区的华为云 ECS 做客户机进行实验,发现华为云的 云创校园 活动新推出了鲲鹏云服务器套餐,通用计算增强型云服务器,搭载自研华为鲲鹏920处理器及25GE智能高速网卡,提供强劲鲲鹏算力和高性能网络,购买指定配置服务可享受9元/月优惠,并赠送相同时长主机安全,遂买来测试+实验。

2020-02-04-15-58-00-7d672dd008b7ab1c.png

这时博主干了一件蠢事,下单的时候居然买成了普通的云服务器套餐,我是要体验华为鲲鹏的呀!于是将计就计,再买一台鲲鹏的,和华为自家弹性服务器做一下对比测试。

本次测试采用 UnixBench 脚本。

UnixBench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用与测试linux系统主机的性能。Unixbench的主要测试项目有:系统调用、读写、进程、图形化测试、2D、3D、管道、运算、C库等系统基准性能提供测试数据。

测试方法:

wget --no-check-certificate https://github.com/teddysun/across/raw/master/unixbench.sh
chmod +x unixbench.sh
./unixbench.sh

由于国内服务器访问 GitHub 有一定限制,测试时将脚本在本站资源站做了备份,直接从资源站调用。

wget --no-check-certificate https://res.frytea.com/Bash/unixbench.sh
chmod +x unixbench.sh
./unixbench.sh

测试结果

华为云 Ecs ecs-sn3_medium_2_linux

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: ecs-sn3-medium-2-linux-20200204152547: GNU/Linux
   OS: GNU/Linux -- 3.10.0-1062.1.1.el7.x86_64 -- #1 SMP Fri Sep 13 22:55:44 UTC 2019
   Machine: x86_64 (x86_64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Xeon(R) Gold 6161 CPU @ 2.20GHz (4400.0 bogomips)
          x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
   16:41:41 up  1:00,  1 user,  load average: 0.03, 0.03, 0.06; runlevel 3

------------------------------------------------------------------------
Benchmark Run: Tue Feb 04 2020 16:41:41 - 17:09:47
1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       33259701.9 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     3940.9 MWIPS (9.8 s, 7 samples)
Execl Throughput                               3746.7 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        771510.6 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          207548.2 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       2198798.7 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1156756.3 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 223226.3 lps   (10.0 s, 7 samples)
Process Creation                              14029.3 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   5686.2 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    763.8 lpm   (60.1 s, 2 samples)
System Call Overhead                        1000249.0 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   33259701.9   2850.0
Double-Precision Whetstone                       55.0       3940.9    716.5
Execl Throughput                                 43.0       3746.7    871.3
File Copy 1024 bufsize 2000 maxblocks          3960.0     771510.6   1948.3
File Copy 256 bufsize 500 maxblocks            1655.0     207548.2   1254.1
File Copy 4096 bufsize 8000 maxblocks          5800.0    2198798.7   3791.0
Pipe Throughput                               12440.0    1156756.3    929.9
Pipe-based Context Switching                   4000.0     223226.3    558.1
Process Creation                                126.0      14029.3   1113.4
Shell Scripts (1 concurrent)                     42.4       5686.2   1341.1
Shell Scripts (8 concurrent)                      6.0        763.8   1273.1
System Call Overhead                          15000.0    1000249.0    666.8
                                                                   ========
System Benchmarks Index Score                                        1219.7

======= Script description and score comparison completed! =======

2020-02-04-17-12-39-a3a2911508b42b6c.png

华为云鲲鹏 ecs-kc1_small_1_linux

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: ecs-kc1-small-1-linux-20200204152604: GNU/Linux
   OS: GNU/Linux -- 4.18.0-80.7.2.el7.aarch64 -- #1 SMP Thu Sep 12 16:13:20 UTC 2019
   Machine: aarch64 (aarch64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   16:44:32 up 59 min,  1 user,  load average: 0.16, 0.03, 0.02; runlevel 3

------------------------------------------------------------------------
Benchmark Run: Tue Feb 04 2020 16:44:32 - 17:12:41
0 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       23810689.9 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     3484.7 MWIPS (10.0 s, 7 samples)
Execl Throughput                               4757.1 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        513287.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          137669.4 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1644878.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1157950.1 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 248199.1 lps   (10.0 s, 7 samples)
Process Creation                               8687.8 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   6061.2 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    806.8 lpm   (60.0 s, 2 samples)
System Call Overhead                        1016165.6 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   23810689.9   2040.3
Double-Precision Whetstone                       55.0       3484.7    633.6
Execl Throughput                                 43.0       4757.1   1106.3
File Copy 1024 bufsize 2000 maxblocks          3960.0     513287.0   1296.2
File Copy 256 bufsize 500 maxblocks            1655.0     137669.4    831.8
File Copy 4096 bufsize 8000 maxblocks          5800.0    1644878.0   2836.0
Pipe Throughput                               12440.0    1157950.1    930.8
Pipe-based Context Switching                   4000.0     248199.1    620.5
Process Creation                                126.0       8687.8    689.5
Shell Scripts (1 concurrent)                     42.4       6061.2   1429.5
Shell Scripts (8 concurrent)                      6.0        806.8   1344.7
System Call Overhead                          15000.0    1016165.6    677.4
                                                                   ========
System Benchmarks Index Score                                        1070.6

======= Script description and score comparison completed! =======

2020-02-04-17-14-02-6524113d8c35a8c6.png

总结

测试前使用其他脚本对两台服务器做过测试,其中 i/o 性能鲲鹏略好,下载速度也是鲲鹏稍快,其他参数差别不大。但从配置来看普通服务器是 1C2GB 而鲲鹏是 1C1GB,使用 UnixBench 测试后发现二者整体评分差别在1200分中的200分左右,浮点速率,函数速率等几乎持平,但 intel 确实略胜于鲲鹏。

这款搭载了 华为鲲鹏920处理器 的弹性云服务器整体表现可以说是与 Intel(R) Xeon(R) Gold 6161 CPU @ 2.20GHz 几乎持平,但文章 鲲鹏云服务器实战:华为云鲲鹏KC1实例 vs. 阿里云G5实例 直接对 CPU 进行跑分后发现华为云鲲鹏920处理器是要优于目前主流处理器的。

鲲鹏920处理器是华为在2019年1月发布的数据中心高性能处理器,由华为自主研发和设计,旨在满足数据中心多样性计算、绿色计算的需求 。鲲鹏920处理器兼容ARM架构,采用7nm工艺制造,可以支持32/48/64个内核,主频可达2.6GHz,支持8通道DDR4、PCIe 4.0和100G RoCE网络。

时间有限,以后再研究对这款处理器进行跑分,但无论如何,这款鲲鹏920处理器都给国人一剂强心剂,国产技术需要我们每一个人共同的推动,一起加油吧!

参考文献

告别 Android 开发“Read timed out”

问题背景

困扰博主近一个月的问题,导致近一个月没办法进行 Android 开发的问题终于解决了!

问题错误特征

  • Could not run phased build action using Gradle distribution 'https://services.gradle.org/distributions/gradle-5.5.1-all.zip'
  • A problem occurred configuring root project 'PlanAssistant'.
  • Could not resolve all artifacts for configuration ':classpath'.
  • Could not resolve com.android.tools.build:gradle:3.5.3.
  • Could not get resource 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.5.3/gradle-3.5.3.pom'.
  • Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.5.3/gradle-3.5.3.pom'.
  • Read timed out

就是这一句 Read timed out,在过去的一个月里,我天天都看到这句报错,始终找不到比较好的解决方案。经过各种 Google,Baidu,bing,发现解决方案大致分为两种:

  1. 为 Gradle 配置 socks 代理
  2. 配置阿里云 maven 仓库源

问题解决

尝试了以上两种方法之后全都无法解决,依然是那一句可恶的 Read timed out.终于在今天我发现了自己存在的问题:全局Gradle代理配置错有问题

2020-02-01-14-46-44-cab165ae590fb026.png

当我为 Android Studio 配置了代理后,编译时询问是否要为 Gradle 也配置代理,年少无知的我果断选择了 配置 ,但事实证明,这样的方式配置的是 HTTP Proxy,但是我的 ssr 运行的是 socks 协议,这么一来就算我如何操作,都无法摆脱 Read timed out 的诅咒了。

2020-02-01-15-10-54-e54fe1e99737299e.png

解决方法很简单,找到 gradle 的位置,将其中 gradle.properties 文件中关于 HTTP Proxy 的部分全部注释:

## For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Mon Jan 27 12:42:16 CST 2020
#systemProp.https.nonProxyHosts=localhost, 127.0.0.0/8, \:\:1
#systemProp.http.proxyHost=127.0.0.1
#systemProp.https.proxyPort=1080
#systemProp.https.proxyHost=127.0.0.1
#systemProp.http.proxyPort=1080

这样一来,就可以通过重新配置 socks 代理或是改用阿里云 maven 库的方式解决问题。如果需要使用socks 代理,需要在文件中使用这一句:

org.gradle.jvmargs=-Xmx4536m -DsocksProxyHost\=127.0.0.1 -DsocksProxyPort\=1080

如果使用 HTTP 代理就是以上导致我出错的部分:

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=1080
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1080

代理总结

下面根据个人理解对 Androoid Studio 中的代理进行一下小结,代理分两种

  • Android Studio 自身
  • Gradle

配置代理时二者也是分开的,为 Android Studio 配置代理就可以在下载 SDK,IDE更新时走代理;而 Gradle 代理就是在进行编译时走代理,配置方法在上文已经详述了 Gradle 的配置,想为 Android Studio 配置代理只需在设置中配置即可(注意区分代理协议)。

2020-02-01-15-30-42-5cab0a4f79838b91.png

下面作一次搬运工,将阿里云官网给出的配置阿里云 maven 库 的方法在此一并叙述,方便需要的人。

配置国内 maven 库

在build.gradle文件中加入以下代码:

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public/' }
        mavenLocal()
        mavenCentral()
    }
}

ps: 仓库位置顺序有讲究,如果想要阿里云库优先就把它放在靠前的位置。更多信息见 阿里云文档/公共代理库

想要告别 Read timed out,本文介绍了两种方法,一种需要您会点魔法,第二种就是配置国内仓库源,方法在文中都有介绍,若本文有不严谨之处欢迎在我的博文下留言。

参考文献

基于 Ubuntu 平台安装 OS X 10.15 虚拟机

OS X 系统启动时会识别计算机主板,针对非苹果电脑拒绝启动,就算是虚拟机,也有天然的限制不可以随便安装 OS X 虚拟机,本文就介绍了在 Ubuntu 平台上使用 VMware Workstation 安装 OS X 10.15

资源清单

  • VMware Workstation Pro
  • Unlock
  • OS X 10.15 CDR镜像

本教程资源来源:

简单流程

第一步:安装 Vmware 并 使用 Unlock 破解 OS X 系统安装限制。

第二步:新建虚拟机,选择准备好的 *.cdr 系统镜像,选择 Apple OS X 10.15

第三步:安装系统

2020-01-30-20-05-22-16f67f7f0f139bec.png

注:进入 mac实用工具 后先进入磁盘工具,将刚刚分配好的虚拟磁盘抹掉格式化,结束后退出磁盘工具,再进入mac安装。其他步骤就很日常啦,有问题敬请留言!

详细步骤请参考:如何在Windows上VMware上安装macOS Catalina 10.15

2020-01-30-21-18-17-2c3f9246d05ac691.png

安装 VMware tools

安装 VMware tools 时可能会遇到一个问题:无法在更新服务器上找到组件。请联系 VMware 技术支持或您的系统管理员。

在此通过手动安装的方式获得 工具并安装到虚拟机中。

首先资源:在这里找最新版本的MacOSvmtool : <https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/ >

安装方法很简单,解压工具找到 drawin.iso使用 CD/DVD 的方式挂载进去安装即可!

详细步骤可参考:Windows下VMmare黑苹果macOS Catalina 10.15虚拟机安装VMware tools工具

参考文献

一个方便转存 Google Drive 分享文件的方法

用过 Google Drive (以下简称GD) 的朋友们应该都清楚,GD 分享的文件可以一键添加到自己的云盘中,速度很快,一度让我感觉 Google 好牛,但仔细一看会发现这并不是将文件转存到自己的 GD 中,以大神分享的爱情公寓5资源为例:

2020-01-30-11-22-39-eb6691c425cbb3e1.png

如上图所示,我已经将该资源通过 GD 提供的一键保存按钮将资源放在我的云盘,我已经可以在我的云盘看到,但是仔细看文件详情,目前我还是以分享的方式查看,文件所有者还是共享者。

方法一

为了解决这一问题,有多种方法,最直接的一种就是直接在文件上右键,制作一个拷贝,这样一来, GD 就为我们拷贝一份放在了我们的云盘。

2020-01-30-11-26-01-d8d4773485ac2507.png

这一方法很简单直接,但是问题也显而易见,就是对文件夹执行该操作。

除了这一方法,还有一种较为专业,操作起来也较为复杂,但是可以对任何文件进行转存,可以批量处理。

方法二

本方法基于 rclone ,需准备一台境外大带宽服务器,安装 rclone,绑定云盘,然后使用命令一键转存:

rclone copy gdvideo:/Movies/Grab/爱情公寓5 onedrivee5:/Public/Video/ -P

这样的方式可以在云盘内或是云盘间转存文件,灵活方便,功能强大,为问题在于门槛较高。

使用 Rclone 还可以 Linux 下使用 rclone 挂载网盘到本地

总结

本文介绍了两种转存 GD 分享文件到自己 GD 的方法,GD 普通用户使用方法三即可,高级用户可使用方法二,普通少文件方法一即可,此外还有其他方法欢迎一起探索!

全文完。

今天,你上云了吗?

注:本文部分内容摘自《中国公有云服务市场(2019上半年)跟踪》报告,若有侵权立即删除。作者根据行文逻辑穿插个人理解,若有不当指出还请不吝指出!

今天,你上云了吗?根据国际数据公司 (IDC)于北京时间2019年11月7日最新发布的《中国公有云服务市场(2019上半年)跟踪》报告显示,2019上半年中国公有云服务整体市场规模(IaaS/PaaS/SaaS)达到54.2亿美元,其中IaaS市场增速稳健,同比增长72.2%,PaaS市场增速有所回落,同比增长92.6%。以下是报告详情:

中国公有云服务市场(2019上半年)跟踪

报告显示,2019年上半年整体来看,中国公有云市场集中度进一步提升,无论是IaaS市场,还是IaaS+PaaS市场,排名前10的厂商目前已占据了超过90%的市场份额,呈现出群雄逐鹿的激烈竞争场面。

从IaaS市场来看,阿里、腾讯、中国电信、AWS、华为位居前五,占据总体75.3%的市场份额。阿里以其强大的客户、生态和运营能力,持续助力互联网行业业务系统上云,不断深耕零售、政府和金融三大行业云化转型。腾讯借助其在云游戏和云视频方面的优势,以及微信、小程序等强大的生态转化能力,积极拓展产业互联网的发展机遇。中国电信凭借其运营商的天然属性,助力政府及工业客户进行数字化转型,打造云、5G、边缘计算等典型场景。AWS凭借其国际市场的领先地位,继续保持在中国企业出海市场的领先优势。华为云驶入发展快车道,无论是从组织扩张、市场运营还是行业拓展上都表现突出。此外,金山云互联网业务持续稳步增长,在金融云、政企和传统企业得到了突破性进展。百度云正逐步融合百度集团的生态体系,在不断丰富云服务综合能力的同时,持续增强视频、金融等细分行业的精耕细作。

getfile.png

从IaaS+PaaS市场来看,阿里、腾讯、AWS、中国电信、华为共同占据74%的市场份额,持续保持领先优势。百度在PaaS市场表现仍然亮眼,其加速将AI底层技术和应用能力向云输入,刺激了百度云在该市场的长足增长。

getfile15bdf82664546d0d.png

从行业发展来看,互联网行业依然占据公有云市场半壁江山,但增速趋于平稳。各大云服务商纷纷将目光投向了非互联网行业,如政府、金融、制造、服务等。数字政府、政务便民、金融科技、金融渠道变革、工业互联网、工业质量和流程优化等日渐成为云服务商的业务重点。随着数字化转型概念的深入,越来越多非互联网行业加快上云步伐,云服务商纷纷加入新战场,一时硝烟四起。

IDC中国公有云服务研究经理诸葛兰表示: “云计算下半场开启,目前中国数字经济的发展正迈向新台阶。当前,新一代信息技术正朝着深度融合的方向发展,其中以云+AI+5G的组合最具代表性。云+5G可为企业智能累积战略性数据资源,AI的发展和普及亦需要云+5G搭桥铺路。云服务商可围绕如下几个关键点进行考量:云+AI+5G是重要引擎、政企上云正当时、开放共赢的云生态是关键。”

“云计算”是何物

根据《中国公有云服务市场(2019上半年)跟踪》报告已经不难看出,云服务市场正在壮大,而云计算究竟是何物?这一节就来细细探讨。

根据维基百科的说法,云计算(英语:cloud computing),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备,使用服务商提供的电脑基建作计算和资源。

而百度百科对于“云计算”是这么解释的:云服务是基于互联网的相关服务的增加、使用和交互模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。云是网络、互联网的一种比喻说法。过去在图中往往用云来表示电信网,后来也用来表示互联网和底层基础设施的抽象。云服务指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。它意味着计算能力也可作为一种商品通过互联网进行流通。

简单来说,云服务可以将企业所需的软硬件、资料都放到网络上,在任何时间、地点,使用不同的IT设备互相连接,实现数据存取、运算等目的。当前,常见的云服务有公共云(Public Cloud)与私有云(Private Cloud)两种。其中公共云是最基础的服务,多个客户可共享一个服务提供商的系统资源,他们毋须架设任何设备及配备管理人员,便可享有专业的IT服务,这对于一般创业者、中小企来说,无疑是一个降低成本的好方法。公共云还可细分为3个类别,包括Software-as-a-Service, SaaS(软件即服务)、Platform-as-a-Service, PaaS(平台即服务)及Infrastructure-as-a-Service, IaaS(基础设施即服务)。我们平日常用的Gmail、Hotmail、网上相册都属于SaaS的一种,主要以单一网络软件为主导;至于PaaS则以服务形式提供应用开发、部署平台,加快用户自行编写CRM(客户关系管理)、ERP(企业资源规划)等系统的功能,用户必须具备丰富的IT知识。

而另一种私有云,其运作形式,与公共云类似。然而,架设私有云却是一项重大投资,企业需自行设计数据中心、网络、存储设备,并且拥有专业的顾问团队。企业管理层必须充分考虑使用私有云的必要性,以及是否拥有足够资源来确保私有云正常运作。

使用云计算服务可以让企业开发、服务、运维更加容易,更能够专注于业务而将机房维护、网络等运维工作交给云提供商去完成,分工更加明确。上文提到的三种公有云类别即IaaS, SaaS, PaaS 又是何物呢?下面一一解释:

IaaS:基础设施即服务

IaaS(Infrastructure-as-a- Service):基础设施即服务。消费者通过Internet可以从完善的计算机基础设施获得服务。

SaaS:软件即服务

SaaS(Software-as-a- Service):软件即服务。它是一种通过Internet提供软件的模式,用户无需购买软件,而是向提供商租用基于Web的软件,来管理企业经营活动。

PaaS:平台即服务

PaaS(Platform-as-a- Service):平台即服务。PaaS实际上是指将软件研发的平台作为一种服务,以SaaS的模式提交给用户。因此,PaaS也是SaaS模式的一种应用。但是,PaaS的出现可以加快SaaS的发展,尤其是加快SaaS应用的开发速度。

除了上述概念,云计算还有一个很重要的特征即“按需计算”,按需计算本身并不是一个新概念,但它因云计算而获得新的生命。在过去的岁月里,按需计算由一台服务器通过某种分时方式而提供。因为按需计算,使得按需付费成为可能,也许总的来看价格比直接月付或年付要高,但是这最大程度避免了资源浪费,实际上为企业节约了成本。

说了这么多,云计算服务商都是如何为用户提供服务的呢?下面就以报告中市场占有率极高的阿里云为例探讨一下阿里云的体系结构吧!

云计算体系结构

博主在阿里云官网找到了一张图,从此图可以完全窥见阿里云产品体系:

TB1z4lbPXXXXXa7XVXXXXXXXXXX-1190-730ec2ece462bc9e621.png

透过这一体系,阿里云具有 EB(10亿GB)级的大数据存储和分析能力,具有10k(单集群1万台服务器)的任务分布式部署和监控能力,守护了中国40%的网站,经受了双11、12306春运购票等极限并发场景挑战,兼容大多数生态软件和硬件。本人能力有限没有这么多云产品经验,就以 CDN 服务为例,专注于 CDN 服务的又拍云加速后的网站,全国多节点测速大概是这样:

2020-01-23-11-10-48-.png

而阿里云这一综合云服务提供者提供的 CDN 服务表现甚至超过了专注于 CDN 服务的又拍云,分析原因大概有以下几方面原因,首先是全面的机房覆盖率,阿里云的超大规模数据中心遍布全球;另一方面就是其开放的服务合作体系,根据本人某一次 CDN 服务部署经验,阿里云和七牛云在 CDN 服务方面是战略合作伙伴关系,二者结合,一个是机房覆盖率广,用户数众多,一个是专注于 CDN 服务,二者技术互通定会获得意想不到的效果。

能够专注于一项已经很好,但阿里云却可以做到平台上的产品多数优于同行业产品,我想这就是阿里云取得今天成就的重要原因之一。

全球云计算市场

当前云计算市场海外市场上亚马逊的AWS云是第一,微软第二,而在国内市场上,阿里云第一,腾讯的云业务也在快速追赶。在新推出的“全球云基础设施即服务 (IaaS) 魔力象限”中,Gartner Research 将 AWS 定位在“领导者象限”中。云 IaaS 在此魔力象限的上下文中定义为“标准的、高度自动化的产品,由服务提供商所有并按需提供给客户,其中计算资源由存储和网络功能补充”。

G-MQ-AWS-20Final.1b6a383667eefaebe8adbfc9835bf6a750c6574fbc497d3e1fcbb882.jpg

通过 Gartner Research 的这份 Magic Quadrant for Cloud Infrastructure as a Service, Worldwide 报告不难看出亚马逊的 AWS 云在整个云计算市场中的领导地位,同样是做云计算服务,亚马逊的 AWS 介绍中只有这么几句话“最多的功能,最大的客户和合作伙伴社区,最安全,最快的创新速度,最成熟的运营专业能力”,但这几句话真不是随便就能说出来的,此时无声胜有声,卓越公司的产品总给人一种“卓越”的感觉。虽然在国内亚马逊云的业务开展遇到了重重阻力,但这并不妨碍其对于全球云计算市场起到的领导作用。从亚马逊的例子也不难看出,技术的领先就是各项业务先进性的体现,想要站稳脚跟就要做好技术革新,之后拓展业务。

结语

当前云计算市场已成为互联网公司必争之地,腾讯云在2019年Q3季度提前实现全年100亿元的营收目标。云计算产业的飞速发展让平民百姓都可以方便的使用到云计算服务,就比如博主的这个博客就使用到了云计算的云主机、CDN、域名注册还有 DNS 云解析服务,这些服务在此前都是需要多家公司配合实现,可现在已经可以线上操作,甚至一站式解决,大家要做的就是选择合适自己的服务,专注于自己的核心技术和业务,但要是想做大做强,还是必须考虑这些基础设施建设的。总之,当前云计算已经为人们带来很大便利,未来5G的发展定会和云计算擦出别样的火花,到那时任谁都能使用上的方便快捷简单的云服务定会彻彻底地的改变每一个人的生活,让我们拭目以待!

参考文献

这项技术解决了博客访问的大问题

由于一些原因,我的博客暂时托管在香港某家服务提供商的云主机之上,虽然商家已经尽权力为线路做了优化,但是到达大陆一些地域的访问速度还是不太理想,特别是在一些本人长期驻留的地域。

2020-01-23-10-36-39-.png

未来计划将网站迁回大陆,但还需时间,此外就算是大陆服务器,中国地大物博,无法保证到达任何一个区域的访问速度。因此就要用到一个叫 CDN 的技术了。

CDN

内容分发网络(英语:Content Delivery Network或Content Distribution Network,缩写:CDN)是指一种透过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、影片、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。(维基百科)

在国内使用 CDN 的话,除了各大综合性云服务商,就是较为专业的又拍云和七牛云了。使用又拍云测了一下速,可以发现上了 CDN 动态加速之后,博客访问速度有了较大的提升。

2020-01-23-11-10-48-.png

经过一段时间的使用,发现想要实现 动态加速 + HTTPS 访问的 CDN 加速,费用上还是需要考虑的。以某一天的访问数据为例( 2020-01-22),博客目前的访问量大概是这样子:

CDN 服务 日使用流量 HTTPS 加速 日请求次数 动态资源加速 日请求次数
0.176 GB 13186 次 12494 次

每日的使用水平大概是如此,就此可以大致推算出我目前所需的资源量,接下来我分别从 又拍云、七牛云和阿里云的官网找到了三家服务商的价格水平(2020-1-23),汇总如下:

CDN 费用对比

服务商 流量计费(流出,国内(元/GB)) 动态请求计费(元/万次) HTTPS 请求计费(元/万次)
又拍云 0.29 0.2 0.05
七牛云 0.28(0 ~ 100 TB,HTTPS 下载流量/动态加速) 0.19
阿里云 0.24(0GB-10TB(含)) 0.15(动态HTTPS请求)

套餐费用对比

服务商 流量包(100G/年) 动态请求流量包(100万次/年)
又拍云 ¥20
七牛云 ¥20
阿里云 ¥18 ¥12.60

宗上,根据个人的需要,打算采用阿里云提供的 CDN 全站动态加速服务。

阿里云

这时出现问题了。

2020-01-23-10-29-06-.png

我第一次使用阿里云的 CDN 服务,怎么可能域名已存在呢?于是提交工单,阿里云给的答复是有其他账号绑定了该域名。这是什么情况?过了两天还未处理完毕,这时快过年了,阿里云回了一个电话说出了实情 您这个情况是因为您在七牛云绑定了该域名。what?我在七牛云绑定了和阿里云有什么关系?好吧,他们就是合作伙伴关系。就此呼应一下标题 震惊!阿里云 CDN 居然和七牛云是一体的?

经过一系列的工单操作,还是需要在阿里云那边操作,最终终于将我的域名放在了阿里云加速,最终发现速度还是很理想的,最终选择了速度较快且价格较实惠的阿里云 CDN 全站动态加速。

2020-01-24-09-57-50-.png

参考文档

版本控制及代码托管平台综述

版本控制是协助软件开发的重要工具之一,根据维基百科中“版本控制”词条的描述,版本控制(英语:Version control)是维护工程蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程。此外,版本控制也是一种软件工程技巧,借此能在软件开发的过程中,确保由不同人所编辑的同一程序文件都得到同步。

在程式设计中,分散式版本控制(英语:distributed revision control 或 distributed version control,又译为分布式版本控制),又称去中心化版本控制(decentralized version control),是一种版本控制的方式,它允许软件开发者可以共同参与一个软件开发专案,但是不必在相同的网络系统下工作。以分散式版本控制方法,作出的软件版本控制系统,称为分散式版本控制系统(distributed revision control system,缩写为DRCS,或是distributed version control system,缩写为DVCS)。著名的分散式版本控制系统有MonotoneGit等。版本控制可辅助开发者精确记录自己对代码的每一次修改;若在团队开发中则辅助整个团队中的每一个人管理同一项目的每一个版本,保证整个团队共同开发的项目随时保持同步。

综上,版本控制是工程中常用做法,而在软件工程中常用分布式版本控制,在分布式版本控制系统中, Git 最早是根据 Monotone 改写,但通过 Git 进行版本控制的软件源代码托管服务平台 GitHub已经成为了世界上最大的代码存放网站和开源社区。目前许多大型项目和著名项目开源到 GitHub 且使用 Git 做版本控制,如 Linux 内核。因此团队进行软件开发使用分布式版本控制系统是很有必要的,而当前使用 Git 做分布式版本控制系统并搭建基于 Git 的代码仓库是很先进的。

相关背景

上文论证了使用 Git 做分布式版本控制系统的必要性和先进性,在这里介绍相关技术、产品的背景,内容主要来自维基百科。

Git

git(/ɡɪt/)是一个分布式版本控制软件,最初由林纳斯·托瓦兹创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。

git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。git最为出色的是它的合并追踪(merge tracing)能力。

GitHub

GitHub是通过Git进行版本控制的软件源代码托管服务平台,由GitHub公司(曾称Logical Awesome)的开发者Chris Wanstrath、PJ Hyett和Tom Preston-Werner使用Ruby on Rails编写而成。

GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开或私有的代码仓库,但付费用户支持更多功能。根据在2009年的Git用户调查,GitHub是最流行的Git访问站点。除了允许个人和组织创建和访问保管中的代码以外,它也提供了一些方便社会化共同软件开发的功能,即一般人口中的社群功能,包括允许用户追踪其他用户、组织、软件库的动态,对软件代码的改动和bug提出评论等。GitHub也提供了图表功能,用于概观显示开发者们怎样在代码库上工作以及软件的开发活跃程度。

截止到2015年,GitHub已经有超过两千八百万注册用户和5700万代码库。事实上已经成为了世界上最大的代码存放网站和开源社区。

2018年6月4日晚上,美国科技公司微软宣布以75亿美元的股票收购GitHub。

GitLab

GitLab是由GitLab Inc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。

GitLab 由乌克兰程序员 Dmitriy Zaporozhets 和 Valery Sizov 开发,它由 Ruby 写成。后来,一些部分用 Go 语言重写。截止 2018 年 5 月,该公司约有 290 名团队成员,以及 2000 多名开源贡献者。GitLab 被 IBM,Sony,Jülich Research Center,NASA,Alibaba,Invincea,O’Reilly Media,Leibniz-Rechenzentrum (LRZ),CERN,SpaceX 等组织使用。

总结

宗上,若公司内部搭建基于版本控制的代码存放网站,可使用私有服务器搭建 GitLab 实现代码托管及权限控制,在客户端使用 Git 进行代码版本控制及代码的拉取和提交。下面介绍搭建 GitLab 所需的软硬件环境。

GitLab 环境需求

硬件要求

  • CPU
    • 1 core supports up to 100 users
    • 2 cores is the recommended minimum number of cores and supports up to 100 users (推荐配置)
    • 4 cores supports up to 500 users
    • 8 cores supports up to 1,000 users
    • 32 cores supports up to 5,000 users
  • 内存
    • 4GB RAM + 4GB swap supports up to 100 users but it will be very slow
    • 8GB RAM is the recommended minimum memory size for all installations and supports up to 100 users(推荐配置)
    • 16GB RAM supports up to 500 users
    • 32GB RAM supports up to 1,000 users
    • 128GB RAM supports up to 5,000 users
  • 硬盘 >= 所有代码仓库所占空间 并为数据库预留 5-10 GB 存储空间

数据库要求

  • PostgreSQL >= 9.6

操作要求

GitLab 支持以下操作系统

  • Ubuntu
  • Debian
  • CentOS
  • openSUSE
  • Red Hat Enterprise Linux (please use the CentOS packages and instructions)
  • Scientific Linux (please use the CentOS packages and instructions)
  • Oracle Linux (please use the CentOS packages and instructions)

软件要求

  • Ruby >= 2.6
  • Go >= 1.12
  • Git >= 2.21.x
  • Node.js >= 8.10.0

总结

综上所述,GitLab 的推荐硬件配置为 2C8GB,接下来介绍 GitLab 的安装。

安装流程

本教程仅简单介绍 GitLab Omnibus package 方式在一台 安装 Ubuntu 操作系统的 服务器/弹性云服务器 上一键安装的方法,更多方法请移步官网文档安装部分https://docs.gitlab.com/ee/install/README.html

代码托管服务器配置(GitLab)

第一步、安装并配置必要的依赖项

$ sudo apt-get update
$ sudo apt-get install -y curl openssh-server ca-certificates

第二步、添加 GitLab 软件包存储库并安装软件包

$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash

接下来使用自己为 GitLab 准备的域名安装 GitLab

$ sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ee

注:若使用 https:// 访问需要验证域名,您也可以使用自己的证书或是使用 http://

也可不指定域名,若不指定安装完成后直接使用服务器 ip 地址 访问 GitLab

$ sudo apt-get install gitlab-ee

第三步、使用域名/IP访问并进行相关配置

第一次进入会要求输入密码,此时设置的密码为 root 账户的密码,此账户为本 GitLab 的最高权限管理员,请妥善管理账号密码。

注册后使用 root 登陆,即可进行添加用户、添加项目、仓库及各种权限管理操作。

本教程到此结束,更多详细内容请移步 GitLab 官方文档: https://docs.gitlab.com/。也可来到我的博客访问 GitLab 部分

客户端配置(Git)

在 Linux 上安装

如果你想在 Linux 上用二进制安装程序来安装 Git,可以使用发行版包含的基础软件包管理工具来安装。 如果以 Fedora 上为例,你可以使用 yum:

$ sudo yum install git

如果你在基于 Debian 的发行版上,请尝试用 apt-get:

  $ sudo apt-get install git

要了解更多选择,Git 官方网站上有在各种 Unix 风格的系统上安装步骤,网址为 http://git-scm.com/download/linux

在 Mac 上安装

在 Mac 上安装 Git 有多种方式。 最简单的方法是安装 Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 git 命令即可。 如果没有安装过命令行开发者工具,将会提示你安装。

如果你想安装更新的版本,可以使用二进制安装程序。 官方维护的 OSX Git 安装程序可以在 Git 官方网站下载,网址为 http://git-scm.com/download/mac

你也可以将它作为 GitHub for Mac 的一部分来安装。 它们的图形化 Git 工具有一个安装命令行工具的选项。 你可以从 GitHub for Mac 网站下载该工具,网址为 http://mac.github.com

在 Windows 上安装

在 Windows 上安装 Git 也有几种安装方法。 官方版本可以在 Git 官方网站下载。 打开 http://git-scm.com/download/win ,下载会自动开始。 要注意这是一个名为 Git for Windows 的项目(也叫做 msysGit),和 Git 是分别独立的项目;更多信息请访问 http://msysgit.github.io/

另一个简单的方法是安装 GitHub for Windows。 该安装程序包含图形化和命令行版本的 Git。 它也能支持 Powershell,提供了稳定的凭证缓存和健全的换行设置。 稍后我们会对这方面有更多了解,现在只要一句话就够了,这些都是你所需要的。 你可以在 GitHub for Windows 网站下载,网址为 http://windows.github.com

注:内容来自 git 官网教程:https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git

总结

至此,完整交代了 GitLab 及 Git 的安装配置流程,其中 Git 是版本控制工具,用于拉取、提交及对代码的版本控制;而 GitLab 则是远程的代码托管平台,管理员可对代码仓库进行权限控制保证代码安全。用户在需要的使用使用 Git 从 GitLab 拉取代码仓库的代码,并将编写好的代码通过 Git 提交到远程的 GitLab 代码仓库。使用这一组合可以完美实现代码的管理、版本控制、团队协作及代码仓库的权限管理。

参考文献/推荐阅读

为Linux发行版安装中文字体

前文提到博主为自己的 ThinkPad E450 安装了一款来自爱尔兰的 Linux/GNU 发行版 作为主力系统使用:这款来自爱尔兰的操作系统真的是爱了。近期需要进行文字处理工作,安装了WPS 2019 Linux 版 ,但是发现这款外来的 Linux/GNU 发行版 并没有自带一些常用的中文字体,如 宋体、仿宋、黑体 等字体,经过一番检索,博主使用从 Windows 10 家庭中文版中提取出中文字体导入,并在系统中刷新字体以使字体生效。下面就来讲讲详细步骤:

字体资源准备

  • 方案一:字体可以自行从windows系统下进入 C:\windows\Fonts 文件夹,挑选常用的中文字体拷贝到U盘。

  • 方案二:为方便需要的人,博主已从 windows 系统中提取了常用中文字体并打包,放进博主的资源站(https://res.frytea.com/)开放下载,需要的伙伴可以从下列地址进入下载(若地址实效请自行进入资源站寻找或联系博主):

  • 直链地址:https://res.frytea.com/Others/Fonts/win_cn_fonts.zip

  • 资源来源详情:

  • 系统版本:Windows 10 家庭中文版

  • 系统版本号:1903

  • 系统安装日期:2019/10/29

  • 操作系统版本:18362.535

  • 路径:C://windows/fonts

  • 中文:C://windows/fonts/中文简体部分

若从本站资源站下载请在下载完成后进入下载目录,执行下列命令:

$  unzip win_cn_fonts.zip

命令行操作

1、 移动字体库到linux系统下的字体库文件夹/usr/share/fonts/下:

$  sudo mv win_cn_fonts/ /usr/share/fonts/win_font/

2、让linux系统识别新的中文字体:

$ sudo fc-cache -fv

3、如需确认新的中文字体库是否已经安装,可在终端中输入:

$ fc-list :lang=zh-cn | sort

...
/usr/share/fonts/win_font/Dengb.ttf: 等线,DengXian:style=Bold
/usr/share/fonts/win_font/Dengl.ttf: 等线,DengXian,DengXian Light,等线 Light:style=Light,Regular
/usr/share/fonts/win_font/Deng.ttf: 等线,DengXian:style=Regular
/usr/share/fonts/win_font/FZLTCXHJW.ttf: 方正兰亭超细黑简体,FZLanTingHeiS\-UL\-GB:style=Regular
/usr/share/fonts/win_font/FZSTK.TTF: 方正舒体,FZShuTi:style=Regular
/usr/share/fonts/win_font/FZYTK.TTF: 方正姚体,FZYaoTi:style=Regular
/usr/share/fonts/win_font/msyhbd.ttc: 微软雅黑,Microsoft YaHei:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
/usr/share/fonts/win_font/msyhbd.ttc: Microsoft YaHei UI:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
/usr/share/fonts/win_font/msyhl.ttc: 微软雅黑,Microsoft YaHei,Microsoft YaHei Light,微软雅黑 Light:style=Light,Regular
/usr/share/fonts/win_font/msyhl.ttc: Microsoft YaHei UI,Microsoft YaHei UI Light:style=Light,Regular
/usr/share/fonts/win_font/msyh.ttc: 微软雅黑,Microsoft YaHei:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/win_font/msyh.ttc: Microsoft YaHei UI:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/win_font/simfang.ttf: 仿宋,FangSong:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/win_font/simhei.ttf: 黑体,SimHei:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/win_font/simkai.ttf: 楷体,KaiTi:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/win_font/SIMLI.TTF: 隶书,LiSu:style=Regular
/usr/share/fonts/win_font/simsun (2).ttc: 宋体,SimSun:style=常规,Regular
/usr/share/fonts/win_font/simsun (2).ttc: 新宋体,NSimSun:style=常规,Regular
/usr/share/fonts/win_font/simsun.ttc: 宋体,SimSun:style=常规,Regular
/usr/share/fonts/win_font/simsun.ttc: 新宋体,NSimSun:style=常规,Regular
/usr/share/fonts/win_font/SIMYOU.TTF: 幼圆,YouYuan:style=Regular
/usr/share/fonts/win_font/STCAIYUN.TTF: 华文彩云,STCaiyun:style=Regular
/usr/share/fonts/win_font/STFANGSO.TTF: 华文仿宋,STFangsong:style=Regular
/usr/share/fonts/win_font/STHUPO.TTF: 华文琥珀,STHupo:style=Regular
/usr/share/fonts/win_font/STKAITI.TTF: 华文楷体,STKaiti:style=Regular
/usr/share/fonts/win_font/STLITI.TTF: 华文隶书,STLiti:style=Regular
/usr/share/fonts/win_font/STSONG.TTF: 华文宋体,STSong:style=Regular
/usr/share/fonts/win_font/STXIHEI.TTF: 华文细黑,STXihei:style=Regular
/usr/share/fonts/win_font/STXINGKA.TTF: 华文行楷,STXingkai:style=Regular
/usr/share/fonts/win_font/STXINWEI.TTF: 华文新魏,STXinwei:style=Regular
/usr/share/fonts/win_font/STZHONGS.TTF: 华文中宋,STZhongsong:style=Regular

4、enjoy it.

参考文献

一种高兼容度的通用文档解决方案

你是否经常遇到这种情况:辛苦调好格式写好的 word 文档到其他人电脑上格式就莫名其妙的乱了;word 和 wps 处理的 docx 文档,不同的软件之间打开就是会出现一些很细微的差异。不得不说,就连微软自己将 office 系列软件的定位就是指一款 文字处理软件,在这样的软件之上可以完成几乎所有的格式调整工作,但并不保证不同的设备、软件之间可以互相通用;此外如果是记录笔记或是进行文字创作,等格式调整完毕或许创作热情早就燃烧殆尽,word 在此时就不是一个很好的选择了。

2020-01-09-14-02-53-.png

本人一直在寻找这样一种解决方案,可以让我记录下的文字保证最大限度的兼容性,不至于从一个平台到另外一个平台发布就需要进行繁琐的格式调整工作,此外最好能够有工具支持直接转换到我需要的格式(如docx,html)。

“众里寻她千百度,蓦然回首那人却在灯火阑珊处!”

经过许久的探索,终于发现了一种目前看来最完美的解决方案——Markdown.

Markdown是一种轻量级标记语言,创始人为约翰·格鲁伯(英语:John Gruber)。它允许人们“使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档”。这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。由于Markdown的轻量化、易读易写特性,并且对于图片,图表、数学式都有支持,当前许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。例如:GitHub、reddit、Diaspora、Stack Exchange、OpenStreetMap 、SourceForge等。甚至Markdown能被使用来撰写电子书。(来源:维基百科)

此前一直有使用 Markdown,如果你是一位程序员或是对此有一些了解,相信你对它就不会陌生,全球最大的代码托管平台 GitHub 默认使用 .md 格式的 README 文件做项目自述的,可以说 README.md 是开源项目必不可少的一份文件,GitHub 会将使用 Markdown 进行格式标记并命名为 README.md 的文件渲染后让在代码仓库首页,以便大家快速了解这个项目。

2020-01-09-14-34-26-.png

Markdown 快速入门

Markdown 的使用非常简单,可以让作者专心于内容本身而不需要过多的考虑格式,它将最经典常用的几种格式使用特定符号标注,在这里提供一个最简单的 Markdown 示例文本:

 # 一级标题
## 二级标题
### 三级标题

> 引用

`行内代码`

\```
多行代码(去掉'\')
\```

**强调**

*斜体*

~~删除线~~

- [ ] 清单

[超链接文本](https://frytea.com)
---

将以上代码复制进入一个新的 test.md 文件中,使用 Typora 打开,就可以看到渲染好的包括 分级标题、引用字块、行内代码、多行代码、超链接等效果了;或是在 GitHub 新建一个仓库在 README.md 文件中写入以上内容也可以看到效果。

使用这些格式就已经可以实现大部分的文档撰写需求了,更多的 Markdown 语法可以在 GitHub 的 younghz/Markdown 仓库中查看,除此之外扩展的语法还可以实现甘特图、数学公式等特殊格式,如果还不能满足需求还可以使用 html 原生地排版语法直接撰写,markdown 没有提供过多复杂的格式,使用这些有限的语法就可以给人一种简单愉悦的写作感受。

2020-01-09-15-03-52-.png

许多平台都是支持 Markdown 渲染的,市面上也有很多的可用于渲染 Markdown 的编辑器,搜索 Markdown 在线编辑 就可以找到许多可以实现 Markwown 渲染的工具,直接复制渲染好的内容就可以粘贴到富文本编辑器(如微信公众平台),一些博客平台例如 简书 都是支持 Markdown 编辑器的,自建博客大都是使用 Markdown 进行内容编辑及渲染,此外 bear、为之笔记、蚂蚁笔记、有道云笔记 等笔记本都是支持 Markdown 内容笔记的,另外语雀等知识库平台也是支持 Markdown 的。因此,使用 Markdown 撰写的内容是可以做到完全的格式兼容的,只要使用规范的语法撰写就不用的担心自己的格式会有多大的偏差。如果这些还是不能满足需求,Markdown 还能玩一个大变身。

MarkDown 变身

上文提到,Markdown 在任何支持其语法的平台都是可以做到格式兼容的,真正做到了一处撰写处处渲染,可是有时候写好的东西需要在特定的环境下以特定的格式提交,这时怎么处理呢?此时就要用到文档界的瑞士军刀——Pandoc了。

Pandoc是由John MacFarlane开发的标记语言转换工具,可实现不同标记语言间的格式转换,堪称该领域中的“瑞士军刀”。Pandoc使用Haskell语言编写,以命令行形式实现与用户的交互,可支持多种操作系统;Pandoc采用GNU GPL授权协议发布,属于自由软件。(来源:维基百科)

Pandoc 可以实现许多文档格式之间的互转,详细可以在 Pandoc 官网了解。今天主要使用 Pandoc 由 .md.docx 的功能将 Markdown 文件转换为 word 等软件可直接使用的文档格式。

pandoc-diagram.jpg

首先安装 Pandoc,这个不同的版本安装方法不同,烹茶室 使用的基于 Ubuntu 的 Linux 发行版只需要使用下列命令即可完成安装:

$ sudo apt-get install pandoc

至于 WindowsOS X 可以在这里下载对应的安装包安装:https://github.com/jgm/pandoc/releases/latest

安传完毕,打开命令行,就可以畅游这款神器,使用下列命令就可以将 Markdown 文档转换为 docx,还可以直接生成 html等格式:

$ pandoc test.md -o test.docx

$ pandoc test.md -o test.html

需要注意的是,使用 Pandoc 直接生成 PDF 文件时,需要安装 LaTeX。并且,Pandoc 自带的 PDF 引擎不支持中文,必须为中文配置额外的引擎和模板。因此中文的 markdown 文档是无法直接生成 pdf 的,但可以通过先生成 html 再通过系统自带的打印输出 pdf。

2020-01-09-16-13-32-.png

使用 markdown 作为种子,就可以生成多种文档格式,是不是还挺神奇的。

最后,本人一直在寻找一种比较好的记录笔记的方式,曾经是印象笔记的重度用户,但是由于印象笔记使用的是富文本编辑器,兼容性不好,和兼容性强大的 markdown 比起来就有些捉衿见肘。但不得不说的是,印象笔记的云端同步以及共享、跨平台还是很不错的。如果 markdown 来记录笔记,可以使用 github, coding, gitea,gitee 等作为托管平台,还附带版本控制,可以任意的回到任何版本的笔记,可保证笔记万无一失,再也不害怕误操作。

至此,本文主要介绍了一种高兼容性的文本标记语言 makrdown 及文档格式转换的瑞士军刀 pandoc,二者结合使用即实现一种高兼容度的通用文档解决方案,可以使用 markdown 完成大多数文档撰写工作,作为程序员更是在多数情况下都要使用 markdown 进行文档撰写,特别是在开源项目上。此外本文还提出可使用github等代码托管平台作markdown文档托管,并附带版本控制,提出一种几乎完美的笔记留存同步解决方案,本人一直在使用这种方案记录笔记,等时机成熟再撰文推荐。

使用markdown撰写源文档,可直接发布到博客平台,使用 pandoc 转换为docx格式就可以直接导入秀米进行排版,使用markdown甚至还可以直接撰写ppt(nodeppt),写代码也可以干得过写ppt的。本文若有疏漏或是不严谨之出敬请留言指出,若有好灵感好点子也欢迎留言交流,让我们共同发掘让工作生活更美好的方式。

拓展阅读