主页

Android 源码分析之 RefBase & sp & wp

一﹑RefBase类 简介   RefBase类引入了计数概念,当类的引用计数为0的时候会自动释放类对象.该方式代替传统手动释放类对象 示例 类定义 class LocalRefBase : public RefBase{ public: LocalRefBase() { printf("LocalRefBase create\n"); } virtual ~LocalRefBase() { printf("LocalRefBase destory\n"); } void printfString() { printf("LocalRefBase printfString\n"); } protected: virtual void onFirstRe...

阅读更多

Linux 知识之socketpair

简介   socketpair会创建一对无名套接字的描述符,具有全双工通信特性(描述符可读也可写),他的域只能为AF_UNIX(本地). 应用场景   socketpair主要用于C/S模式的进程间通讯.由于binder通信具有透传fd的特性,使得socketpair不再受限于亲缘关系进程 函数原型 SYNOPSIS #include <sys/types.h> #include <sys/socket.h> int socketpair(int domain, int type, int protocol, int sv[2]); DESCRIPTION TYPE 说明 ...

阅读更多

使用 Draft.js 来构建一个现代化的编辑器

在前端,编辑器是一个非常重要的 Web 组件,任何需要编辑的地方都需要纯文本或富文本的编辑器。目前,纯文本编辑器主要依靠 HTML 的 textarea 标签来实现,而所见即所得的富文本编辑器由于增加了粗体、斜体等样式以及标题级别、图片视频等多媒体功能,一般通过设置 HTML 元素的 contentEditable 属性来实现。 本文中的主角 Draft.js 是 Facebook 发布的一个用于构建富文本编辑器的 JavaScript 框架,它基于 React 进行开发。需要注意的是,Draft.js 不是一个开箱即可用的编辑器,开发者需要对它进行进一步的编码才能使用。 本文便是介绍如何一步一步地构建一个功能丰富的编辑器,并对其原理和 API 进行相关介绍。 一、安装基本模块 ...

阅读更多

实时协同编辑和 OT 算法

随着工作任务的规模和复杂度日益增大,团队中的协同成为工作中的常态。 1984 年,MIT 的科学家提出了计算机支持的协同工作(Computer Supported Cooperative Work,缩写为 CSCW),使得人们可以借助计算机和互联网去完成协同工作。比如利用用于文档编辑的 Wikis 和用于编程的版本控制系统,小组成员可以在世界任意角落去共同编写大型的百科全书或软件系统。 一、实时协同编辑的概念和原理 实时协同编辑,通俗来讲,是指多人同时在线编辑一个文档,且当一个参与者编辑文档的某处时,这个修改会立即同步到其他参与者的计算机上。归纳起来,需要下面几个步骤: 计算出当前参与者对文档做出的修改,并发送到服务器 在服务器端,对所有参与者的修改进行合并以及冲突处...

阅读更多

Git 命令清单

从 2011 年开始接触 Git 到现在,我的使用时间不算太短,但是却只限于 add、commit、push 这几个简单命令。最近因为工作需要,我将 Pro Git 通读一遍,故有此篇。 前言 Git 是一个分布式的版本控制系统,是指 Git 的远程仓库(Remote)和本地仓库(Repository)具有同等的地位,保存了代码的所有历史记录。上面的图来自阮一峰的博客,表示在 Git 的各个状态间相互切换的命令。 创建代码仓库 有两种方法来建立 Git 代码仓库。第一种是在现有目录下直接生成: git init 另外一种是从服务器上直接克隆一个远程的仓库,比如: git clone https://github.com/sanyusily 注:如果想要用 ...

阅读更多

压缩 Jekyll 中的 HTML 和 CSS 1代码

几年前,@mdo 开发了 Jekyll,如今已经成为最流行的静态博客网站生成器。我从 2012 年开始使用 GitHub Pages 和 Jekyll 搭建博客,最近在修改主题的时候,计划对网页代码进行优化。所以有了此文记录。 一、压缩 HTML 代码 jekyll-compress-html 是一个使用 Jekyll layout 进行代码压缩的工具,意味着使用者不需要安装任何插件即可将站点部署到 GitHub Pages 上。 使用起来也很方便:下载 compress.html 文件并保存到 _layouts,然后修改顶层 layout 文件(比如 _layouts/default.html),把它引用进去: --- layout: compress --- 最后,在 ...

阅读更多

如何开发一个 Chrome App

2008 年,Google 开发一款全新的基于 WebKit 内核的网络浏览器 Chrome,如今已经占有全球 58% 的市场份额。而运行于 Chrome 浏览器之上的 Chrome App,是一个由 HTML、CSS 和 JavaScript 构成的应用程序,使用起来与操作系统的本地应用程序并无二致。本文通过编写一个简单的时钟应用,来讲解如何开发一个 Chrome App。 第一步、创建 manifest 文件 首先,需要在项目目录中新建一个 manifest.json 文件。manifest 文件用来告诉 Chrome 关于 App 的一些信息,比如名称、图标、如何运行以及需要的权限等。下面是一段代码示例: { "name": "My clock", "ver...

阅读更多

像黑客一样写博客

我也梦想有一个自己的博客,来记录自己成长和心路历程。最早是从 CSDN、博客园等网站开通博客,到后来开始用 Wordpress 自己搭建。 这其间,我在寻求一种写博客的最佳体验。我厌倦了复杂的博客系统,只需要一个容易维护的博客程序,而能够专注于写作。就在一个月前,我了解到 Jekyll,于是打算重新设计我的博客。而今天,这个博客终于问世了。 Jekyll 是用 Ruby 开发的一个静态站点生成器,它会根据网页源码生成静态文件。它提供了模板、变量、插件等功能,所以实际上可以用来编写整个网站。只需要使用下面的几行命令,就可以在本地生成一个博客: [ybm@localhost ~]$ gem install jekyll [ybm@localhost ~]$ jekyll new my...

阅读更多