主页

Ubuntu20.04 编译Android源码(AOSP)

前言: 一直想要编译一下Android 源码,之前去google 看,下载要下载repo。 当时很懵逼,repo 是个什么?(repo 是一个python 脚本,因为Android 源码git 仓库太多,帮助管理git 仓库的,你不需要知道里面什么实现。会用就行。) 然后往下看,看到网上说,编译Android AOSP 只能用Ubuntu,当时自己的心也哇哇凉啊。 自己只有一个工作的电脑,自己的电脑配置太低。 看网上说,还要200G 的空间。(有一个拦路虎) 之前自己给自己的windos 安装过双系统,但是好像一直启动不了。现在想想,应该是因为当时没有设置引导盘的顺序吧。现在我用一个usb 连接了一个1T的硬盘,里面安装了Ubentu . 如果我插了这个硬盘,启动的就是ubunt...

阅读更多

什么是响应式编程和 RxJS

在计算机领域,响应式编程(英文:Reactive Programming)是一种面向数据流和变更传播的异步编程范式1。就像一个简单的 Click 事件,我们可以通过监听它来做出相应的行为,响应式编程将所有的变量、用户输入、异步接口请求等均看作是可观察的(Observable)数据流,并通过监听这个流来做出响应。 响应式编程 学习响应式编程最困难的一点在于要用响应式编程的方式去思考。这也意味着我们要摒弃已有的编程思维,强迫大脑以一种新的方式去思考。下面,我将使用一个真实而简单的例子来展示如何用响应式编程的思维来工作。 假设我们的程序需要监听一个用户列表上 Double clicks 事件,以便可以弹出一个用于编辑用户信息的对话框。 首先我们将用户的 Click 事件当作是一个具有...

阅读更多

中国传统建筑:曲面屋顶和斗栱

很久之前我就开始对建筑,尤其是中国建筑感兴趣了。近日,拾闲暇时间读罢梁思成先生的《营造法式注释》和《图像中国建筑史》两书,颇有启示,故撰此文以记之。 中国古代传统建筑以木构为主,曲面屋顶和斗栱是它的两大基本特征。以下的立面图展示了中国传统建筑的主要部件名称: 一、曲面屋顶 中国传统建筑最引人注目的外形,就是那外檐挑出的曲面屋顶。屋顶由立在高起的台基上的木构架支撑。屋顶的形式,由高到低分为以下五类(其中前三类又会有重檐的情况): 庑殿顶:四坡屋顶,多用于殿堂式建筑。比如故宫太和殿为重檐庑殿顶。 歇山顶:由上半部硬山或悬山,下半部庑殿所组成,基本上只准官署使用。该形制的建筑也称九脊殿1,天安门为重檐歇山顶。 攒尖顶:包括圆攒尖、四角攒尖、八角攒尖等。比如天坛祈年殿...

阅读更多

介绍我的 dotfiles

对于常年在 Linux 或 macOS 上写代码的程序员来说,总避免不了要使用 Vim、Git、tmux 等命令行工具。同时为了让工具更加适合自己,程序员们通常会根据自己的喜好和习惯给这些工具定义一些快捷键、默认配置等。而 dotfiles 正是用来保存这些配置文件(通常是以点开头的隐藏文件,位于用户家目录 ~ 中),这样便可以在新的环境上快速还原程序员的开发环境。 本文将主要介绍我已经使用了多年的 dotfiles。欢迎大家使用,如果你有什么好的建议,可以在项目中提 Issue。 安装 dotfiles 在类 Unix 系统上,我推荐使用 zsh 来代替默认的 bash,并且使用 Oh My Zsh 来初始化你的 zsh 环境。 首先,需要运行下面的命令来安装 dotfile...

阅读更多

OpenLDAP 的备份与恢复

本文将主要介绍如何备份 OpenLDAP 的配置目录和数据目录,并将其恢复到另一个 OpenLDAP 服务中。如果你还不熟悉什么是 OpenLDAP,请查看 CentOS 7 环境下 OpenLDAP 的安装与配置。 一、OpenLDAP 的备份 OpenLDAP 的备份可以通过服务端的 slapcat 命令或客户端的 ldapsearch 命令两种方式进行。下面展示了如何在 OpenLDAP 服务端使用 slapcat 对配置目录和数据目录进行导出。 $ slapcat -n 0 -l ./config.`date '+%Y-%m-%d'`.ldif $ slapcat -n 2 -l ./data.`date '+%Y-%m-%d'`.ldif 其中,-n 表示要导出的 ...

阅读更多

数据结构中的栈和队列

这篇文章浅显的介绍了在数据结构中如何定义栈和队列的抽象数据类型(Abstract Data Type),以及基于这种抽象数据类型的一些操作:入栈,出栈,取栈顶元素,入队,出队,取队首元素和队尾元素等。 一、引言 栈和队列是计算机科学领域中经常使用的两个概念,从操作系统的事务管理机制到一个小的递归程序,都离不开这两个概念。 栈因为它的后进先出(LIFO)而给人们留下了深刻的认识。假如你把一连串的数据插入到栈之中,然后再把他们取出,那么你会得到一个和你输入相反的结果。比如输入的数据是 {20, 15,10, 5},那么你从栈中取得的数据将是 {5, 10, 15, 20}。 队列却有着和上面描述截然相反的特征。当你向队列中输入 {20, 15, 10, 5} 时,你得到的结果依然是...

阅读更多

如何启用 OpenLDAP 的 memberOf 特性

之前的文章中,我们已经安装部署了 OpenLDAP 服务。所以本文将主要介绍如何启用 OpenLDAP 中非常有用的 memberOf 特性。 很多场景下,我们需要快速的查询某一个用户是属于哪一个或多个组的(member of)。memberOf 正是提供了这样的一个功能:如果某个组中通过 member 属性新增了一个用户,OpenLDAP 便会自动在该用户上创建一个 memberOf 属性,其值为该组的 dn。 遗憾的是,OpenLDAP 默认并不启用这个特性,因此我们需要通过相关的配置开启它。 一、配置 OpenLDAP Backend 为了启用 OpenLDAP 的 memberOf 特性,我们首先需要在 OpenLDAP 服务器上创建如下两个文件: # backend...

阅读更多

苹果:迷宫的故事

本文作者是诺贝尔经济学奖得主、人工智能之父赫伯特·西蒙。原文被收录在西蒙的自传《我生活的种种模式》第 11 章。 从前有个人叫雨果,他住在一个有无数房间的城堡里。这些房间都没有窗,他一出生就住在那里,因此,城堡就是他所知道的唯一世界。他母亲在他很年轻时就去世了。她曾告诉他另一个“外面的”世界,由一个单独的大灯照亮,灯每隔 10 或 12 小时开或关。她本人也没有见过那个世界,但关于它的故事世代相传。雨果从不确切知道他的祖父是否真的住在那个世界或看过那个世界,这些故事会不会是很久以前编造出来给城堡的孩子们娱乐的呢。不管怎样,他只是通过他母亲的故事知道外面的世界。 城堡的房间是正方形的,而且非常长——雨果以轻快的步伐从这头走到那头要 10 分钟。每个房间尽头的墙上有四五扇门。这些门上...

阅读更多