I'm Kcat

Fancy life, fancy mind

快速上手 Kubernetes

快速上手 Kubernetes

什么是 Kubernetes? Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化 Kubernetes 源于希腊语,意为 舵手 或 飞行员。Google 在 2014 年开源了 Kubernetes 项目 为什么需要 Kubernetes? 部署方式的演变 让我们回到过去,下图是部署方式的一个演变过程 传统部署时代: 早期,组织在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,结果可能导致其他应用程序的性能下降。一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,并且组织维护许多物理服务器的成本很高。 虚拟化部署时代: 作为解决方案,引入了虚拟化功能,它允许您在单个物理服务器的 CPU 上运行多个虚拟机(VM)。虚拟化功能允许应用程序在 VM 之间隔离,并提供安全级别,因为一个应用程序的信息不能被另一应用程序自由地访问。 因为虚拟化可以轻松地添加或更新应用程序、降低硬件成本等等,

World Creator 2 和 Unreal Engine 4

World Creator 2 和 Unreal Engine 4

World Creator 2 是个非常强大的 Landscape 制作工具,而且在 GUI 和可视化方面还是要比 World Machine 要现代化太多了(虽然 World Machine 也有 GeoGlyph),再加上对 Game Engine 的友好度,就是它了 基础 Unreal 的 Landscape 有两个基本要素,Component 和 Section Component Landscape 由若干个 Component 组成,Component 作为虚幻中 Landscape 的基本渲染单元、可视性计算单元和碰撞单元 Section 一个 Component 可以由 1(1 * 1) 或 4(2

GraphQL 标准概览
GraphQL

GraphQL 标准概览

本篇基于 2018 六月份 发布的版本 简介 Overview GraphQL 来自于 Facebook,Facebook 从 2012 年开始构思,在 2015 年正式发布开源 GraphQL 由两部分组成: (GraphQL) Query Language 和 (GraphQL) Engine,就如 SQL 和 Database 一样的关系,只不过 GraphQL 在 API 架构上表达了这种设计模式 客户端方一样需要发送请求至后端方,方式可以是 HTTP 亦或 WebSocket,只不过请求体本身的介质是 Query Language 后端方定义了整个 Engine 的所有类型和数据操作方式,而这个整体的表达称为 Schema 类型系统 Type System

Flutter Widget - SafeArea
Flutter

Flutter Widget - SafeArea

SafeArea[1] 是用于适配不规则尺寸设备的一个 Widget,如 iPhone X 这类设备 我们就在默认 Flutter 项目 - 计数器,在 iPhone Xs 基础上测试 SafeArea 这是未修改前的布局代码部分: @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'You have pushed the button this

在 Ubuntu 下快速安装 Nvidia 驱动
随笔小记

在 Ubuntu 下快速安装 Nvidia 驱动

在 Ubuntu 下,如果下载了 Nvidia 官方的驱动,然后按照 Nvidia 官方繁琐的 安装方法 安装真的是一种折磨,而且在其中也会遇到非常多的问题 有没有一键安装的方法? 答案是有的! 多谢 Graphics Drivers 团队的辛勤付出,把繁琐的安装过程进行封装,只需 apt 安装即可 我们只需要添加此 PPA[1] 仓库地址然后进行安装即可: sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update 更新仓库后,我们可以搜索一下: sudo apt search nvidia 此 Blog 搜索时最新可用的版本是 nvidia-390,遂直接进行安装即可: sudo apt install nvidia-390 等待安装完成之后,

Phabricator 解锁 Restricted Project
随笔小记

Phabricator 解锁 Restricted Project

这是一个很无奈的问题,项目变成这样的状态:无法查询到项目,也无法编辑或者进入项目,解决了许久,最后其实发现自己只是想复杂了... 问题重现 当项目只有自己的时候 离开这个项目 接着项目就变成了 Restricted Project 的状态 解决方案 其实只需要知道项目的 PHID 即可,但是通过 Phabricator 的 Web 端是无法查询到的,但是其实很简单,只需要进入 Phabricator 的数据库便可以查询到,一般为 MySQL,这里以它为例 进入 MySQL 选择 phabricator_project 数据库 查询 project 表 便可以通过 name 找到对应名字的项目数据列,phid 列便是它的 PHID,一般形式为 PHID-PROJ-xxxxxxxxxxxxxxxxxxxx 退出 MySQL 进入 Phabricator

Insomnia
开发工具推荐

Insomnia

Insomnia 是一款支持 GraphQL 的 REST API 调试工具,促使我使用它的最大原因也是它对于 GraphQL 有着良好的支持,当然也让我慢慢舍弃了 Postman Insomnia 官网 上描述的特性有一个大列表,如下: GraphQL editor 我当然就不一个一个叙说了,最需要重点说的就是 GraphQL editor,使用它可以编写你的 GraphQL Query Language,它有着和 GraphiQL 一样的代码提示,比 GraphiQL 更方便的是它也和 Postman 一样可以自定 HTTP 请求,例如 Header 等 免费开源 Insomnia 在 GitHub 开源并且完全免费

Swift & C
Swift

Swift & C

因为 Swift 是建立在 LLVM 之上的,所以 Swift 是支持与 C 交互的。但是在 Swift 中,让其与 C 混编是一件说起来有点麻烦又不太麻烦的事儿,麻烦就是要实现混编可能需要一些零碎的步骤,不麻烦就是 Swift 也提供了和 C 对应的等价类型来进行转换使用 让 Swift 可调用 C 创建 Module Map 文件 Swift 是建立在 LLVM[1] 之上的,并且两者都是 Chris Lattner 的杰作,所以当然也就支持 LLVM 的 Module[2] 模块,而我们需要使用的是此模块中的 Module Map Language[3]

使用 API Blueprint 来编写 RESTful API 文档
API Blueprint

使用 API Blueprint 来编写 RESTful API 文档

可能在很多地方,编写文档或许是非常敷衍或潦草的事情,一个可能连排版都没有的 Word 文档可能就充当了文档的重要地位,但是这对于开发协作和后期的未知问题,仅仅只是时间的问题。在开发 RESTful API 中,随着时间的增长,API 的数量越来越多,查阅维护整理也就变得更加需要,文档需求的地位就越来越高。而编写 RESTful API 文档的方式有很多,例如:RAML、Swagger、apiDoc... 而我选择的是 API Blueprint,为啥呢?因为是用 Markdown 来进行编写,而且能够利用一些工具通过语法渲染成文档网页,何乐而不为呢? I. 语法 之前我们讲了,API Blueprint 虽然是以 Markdown 为基础语法,但后缀名规范保存为 .apib 而不是 .md ,想入坑也是要记住一些 API Blueprint 规范的指定语法的,语法方面我认为只需要讲比较重要的要点而不需要详细来讲,

2017 秋季 Apple Special Event 回顾
Apple Special Event

2017 秋季 Apple Special Event 回顾

一年一度Apple的秋季新品发布会首次在 史蒂夫∙乔布斯剧院 于北京时间 2017年9月13日凌晨1:00 举行。Apple在发布会上发布了五款新品:iPhone X、iPhone 8、iPhone 8 Plus、Apple Watch Series 3 和 Apple TV 4K 下面我们就来回顾一下每款新品的新特性 iPhone X iPhone X 是本次发布会的最大亮点,X 为罗马数字 10 的含义[1],致敬着自从乔帮主发布第一代 iPhone 到现在已经过了十年 全面屏 iPhone X 使用了一块 5.8 英寸 OLED 的全面屏幕,支持 Super Retian Display[

Logic Pro X 中使用 AUPitch 做高质的自动化曲线
Logic Pro

Logic Pro X 中使用 AUPitch 做高质的自动化曲线

我想可能许多人都会使用到 Pitch Shifter 或者 Vocal Transformer 这两个效果器来处理音高效果 Pitch Shifter Pitch Shifter 提供了一种结合音高转换后版本的信号与原始信号的简单方法。使用音调移动获得最佳结果。 Vocal Transformer Vocal Transformer 可用来移调声乐线的音高,增加或减少旋律的范围,或甚至将其减少到单个音符,以映射旋律的音高。无论您怎么改变旋律的音高,信号(共振峰)的组成部分都保持不变 自动化曲线的问题 但是当处理自动化曲线音高效果的时候,可能上面两个使用上就会出现一些问题,我们一起来看一下 Pitch Shifter Pitch Shifter 需要调整的属性为 Semi Tones,但是由于单位量级的问题,就会出现下面这样的自动化曲线(已经不能称为曲线了,哈哈): Vocal Transformer Vocal Transformer 需要调整的属性为 Pitch,而且是可以画出两个目标音高之间的自动化曲线: 但是,问题就在当 Mix

使用 Flask-Migrate 来迁移数据库
Python

使用 Flask-Migrate 来迁移数据库

使用 Flask-SQLAlchemy[1] 的童靴,可能会经常改动某些数据模型的属性,当然有更好的选择,那就是 Flask-Migrate[2] 安装 安装我觉得其实可以忽略这一步;),肯定用 pip 啦 pip install Flask-Migrate 使用 有两个方式可以使用 Flask-Migrate ,我一一介绍 使用 Flask 下面是官方例子 from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' db

解决 macOS 上 Docker.qcow2 文件无限增长大小的问题
Docker

解决 macOS 上 Docker.qcow2 文件无限增长大小的问题

在 macOS 上使用 Docker 会发现一个问题,尤其是少于 256G SSD 的 MacBook Pro,这个问题可能会更加明显,那就是发现磁盘的可用空间会随着使用 Docker 而越来越少,当你去删除所有的 image 或者 container ,发现磁盘可用大小基本没什么变化,所以想要急切恢复可用的空间的童靴,就用下面的办法来解决 Docker.qcow2 磁盘可用空间越来越少的罪魁祸首就是这个 Docker.qcow2 文件,这个文件 Docker 使用的一个 qcow[1] 格式的镜像文件,它会随着使用而增长 解决方法 在网上有许多解决方法,使用脚本或者 qemu-img 命令来解决,我推荐使用Docker自带的清理办法 打开 Docker 的 Preferences 偏好设置 点击 Reset 标签 点击

在 UINavigationController 的 Push 过渡动画中 Title 的错误位移
Bugs report

在 UINavigationController 的 Push 过渡动画中 Title 的错误位移

Bug 描述 在 UINavigationController 处理 Push 方式的过渡动画中,父级 UIViewController 的 Title 在少于 3个英文字符 或 2个中文字符 的时候,会出现过渡的偏差 Bug 复现步骤 需要两个 UIViewController 并且被一个 UINavigationController 管理 父级 UIViewController 的 Title 必须少于 3个英文字符 或 2个中文字符 Push 到下一级 UIViewController 在屏幕左侧拖拉当前 UIViewController Bug 截图 字符数量 截图 表现情况 一个英文字符 偏差最大 两个英文字符 略有偏差 三个英文字符 基本正常 Bug 处理

在 Logic Pro X 中使用 Take 管理来录制多个音频汇整
录制音频

在 Logic Pro X 中使用 Take 管理来录制多个音频汇整

在许多 DAW 中录制同一节音频的时候,可能会录制许多遍,大部分人会使用以下两种方法: 反复折磨对应小节的单条录制音轨,不满意就删掉重录一遍 已经记不住有多少条对应小节的录制音轨,反正就是录了很多条轨 而在 Logic Pro X 中,这个问题就不会再有了 Take 管理是什么? 我记得不太清楚了,这个功能刚出来时候貌似是命名为 Quick Swipe Comping,但是目前在 Logic Pro X 官方界面被介绍为 Take管理 Take 管理怎么用 首先需要有一条录制音轨,然后可以录制一段音频,这里就不再说怎么录制了 接下来就是重点啦,无需切换轨道,再次录制同样的部分一遍,你便会发现这样的结果,这便是 Logic 的 multi-take 的录音方式,两个音轨被包含在一个Take包中 如果你在灰色的音轨上鼠标拖动,你会发现灰色会变成激活的颜色,也就是说,在同一个 Take 包中,可以自定义混合音轨来达到自己满意的结果

在 macOS 和 Windows 平台上安装 Minecraft
Minecraft

在 macOS 和 Windows 平台上安装 Minecraft

由于我的一个朋友想出个安装 Minecraft 的图文教程,正好顺便就帮他写了这边图文教程,内容面向不清楚如何安装 Minecraft 的童靴 我买了正版的Minecraft 入手正版的童靴,在 Minecraft官方网站[1] 即可下载,这篇 Blog 就不具体描述如何下载安装了 准备工作 下载并安装以下必需组件: JRE[2]:Windows / macOS HMCL 是什么? HMCL 又名 Hello Minecraft! Launcher (以下都简写为HMCL),是一款强大的 Minecraft 启动器,开发作者是 huanghongxun[3],并以 GPL v3 协议下开源在 Github[4] HMCL 拥有 Mod 管理、自定义游戏配置、自动安装(Forge, LiteLoader

Atom 在国内无法安装 Package 的解决方案
Atom

Atom 在国内无法安装 Package 的解决方案

由于被墙的原因,在国内使用 Atom 的 Package(包)面板来安装 Package 基本都无法正常安装,有些时候 VPN 也不好使,那么怎么才能完美的安装 Package 呢?我们用 npm[1] 来解决 安装 npm 并且替换内置源为国内淘宝源 npm 一般在已经安装了 Node.js 的运行环境中就已默认安装,此篇便不过多介绍 Node.js 了,Node.js 是一个基于 Chrome's V8 JavaScript引擎 的 JavaScript 运行环境 安装 npm 可以访问 Node.js 的 官网 下载安装,安装后打开 Terminal,

firewalld 的基本用法
firewall-cmd

firewalld 的基本用法

在 RHEL 7 和 CentOS 7 之后,都使用了 firewalld 来作为防火墙管理工具,只不过底层实现还是 iptables,并且主要使用 firewall-cmd 来配置 防火墙配置 防火墙主要有两种配置:运行时和永久 运行时:在运行时下的配置修改都不是永久生效的,都会在重新加载后,加载永久下的配置为运行时的配置 永久:修改永久下的配置,在重新加载后,都会覆盖运行时的配置,并且永久生效 可选参数说明 [--permanent]:加上此参数代表的是修改永久下的配置,不带则是运行时的配置 [--zone=xx]:加载此参数代表指定区域,例如 public 区域(Zone) 防火墙中可配置多种区域,并且也可激活指定的区域为当前区域 #!/bin/bash firewall-cmd --get-zones // 获取所有的区域 firewall-cmd --get-active-zones // 获取当前激活的区域 服务(Service)

CentOS 下 PostgreSQL 的快速安装和配置
CentOS

CentOS 下 PostgreSQL 的快速安装和配置

此篇博客面向新手,所以比较通俗易懂,如有不够严谨的地方请指出,不接受撕逼 ;) 安装 PostgreSQL 环境 新装环境 首先如果是新安装 CentOS 的时候,可以从已选环境的附加选项中勾选 PostgreSQL 数据库服务器选项以便默认安装,减少配置步骤 已装环境 当然,如果是已有 CentOS 环境,那么可以通过以下命令安装PostgreSQL 数据库服务器 #!/bin/bash sudo yum install postgresql sudo yum install postgresql-server 配置 PostgreSQL 更改系统用户 postgres 密码 安装过后,系统用户会增加一个名为 postgres 的用户,默认没有密码,那么便更改它的系统用户密码 #!/bin/bash sudo passwd postgres 创建一个数据库集群[1]

使用 OpenSSL 生成 RSA 私匙和公匙
genrsa

使用 OpenSSL 生成 RSA 私匙和公匙

What's OpenSSL OpenSSL 是一个开源的面向安全传输层(TLS)和安全套接层(SSL)的工具集 genrsa 命令 主要用于生成 RSA 私匙 genrsa 的命令格式如下: openssl genrsa [-help] [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits] 主要参数 -out: 输出的文件名,如无此参数则会输出内容至命令行中 numbits: 生成私匙的位数,默认为 2048

pip 的基本用法
Python

pip 的基本用法

在 virtualenv 中,我们可以很方便的将当前 virtualenv 环境下所有所需的包清单至一个指定文件中,同时也可以很轻松的使用这个文件来批量安装所有所需的包 进入 virtualenv 目录并且激活环境 打开命令行 #!/bin/bash cd [virtualenv-path] // 首先进入指定的virtualenv目录 source ./bin/activate // 激活环境 生成 requirements.txt 包清单文件 #!/bin/bash pip freeze > requirements.txt 这句代码将会生成一个 requirements.txt 文件至 virtualenv根目录,requirements.txt 文件名是可选的,无所谓什么名字,requirements.txt 只是一个被规范成大家使用的名称而已 生成的 requirements.txt 文件格式如下: Flask==0.12