为用户生成有趣的头像

用户注册后需要为其生成头像,大部分站点都是生成这样风格的: 感觉有点单调乏味啊。所幸 Gravatar 可以为我们生成更好玩风格,比如: 只需 HTTP 请求 http://www.gravatar.com/avatar/{hash}?s=256&d=identicon,其中: hash:生成一个随机数填充s:尺寸,像素为单位d:风格,目前可选 identicon、monsterid、wavatar、retro、robohash 等 具体可参考 Gravatar 文档 Image Request。

More...

以太坊相关中文资料整理

文档 区块链技术指南精通比特币以太坊白皮书中文版以太坊官网文档中文版Solidity 语言Truffle 框架 钱包 Mist:以太坊官方出品imToken:移动端轻钱包,中国团队出品Parity:功能强大,需要同步区块数据MyEtherWallet:Web 版钱包,无需同步区块数据MetaMask:浏览器插件,简单好用 区块浏览 Etherscan:功能丰富,有 APIetherchain.org:功能还比较少,可作为 Etherscan 的备用 网络状态 节点统计网络统计 博客与社区 汪晓明对区块链、以太坊的思考:永远的黄家驹深入浅出区块链区块链技术博客以太坊爱好者社区区块链技术中文社区黑客派:编程大杂烩 欢迎大家加入 B3 币圈 QQ 群: 618817478

More...

2017 成为报废程序员的前一年

工作 离开房星 2017 年春节后我便匆匆离开了房星,刚拿完年终奖金就撤了实在有愧。不过现在也只能在这里说说罢了,希望以后还有机会能够和房星的伙伴们合作。 长假 2 月份我和 V 放了个长假,爬了座雪山、重游黄山和杭州,还有和网友 R 见面。还好 V 把这些经历都记录下来了,不然现在没得吹了: 时隔十年再游轿子雪山黄山 - 杭州五日游记 加入国资商城 3 月份加入了国资商城,参与 Java RPC 框架的开发,这是一个基于 Facebook Swift 以及 Netflix Ribbon 的 RPC 框架,主要优势是通过 Thrift/Netty 获得跨平台、高性能以及少侵入。我做的这边是胶水代码,将 Spring、Swift 和 Ribbon 进行整合,干货是 C# 端,并且我老大已经将其完全开源。 6 月后开始投入到云平台的实现中,陆续接触了 EMC ScaleIO、GusterFS 以及 SeaweedFS,虽然基于它们做了一些开发,但是始终是入门后皆浅尝辄止。 技术架构师的未来 对技术方面的追求一直没有变,不过今年产生了一个“奇怪”的想法:技术架构师以后会越来越少,因为需求的....

More...

IPFS 入门笔记

IPFS 是什么 IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。 内容可寻址:通过文件内容生成唯一哈希值来标识文件,而不是通过文件保存位置来标识。相同内容的文件在系统中只会存在一份,节约存储空间版本化:可追溯文件修改历史点对点超媒体:P2P 保存各种各样类型的数据 可以把 IPFS 想象成所有文件数据是在同一个 BitTorrent 群并且通过同一个 Git 仓库存取。 总之,它集一些成功系统(分布式哈希表、BitTorrent、Git、自认证文件系统)的优势于一身,是一套很厉害的文件存取系统。 IPFS 使用场景 IPFS 的发明者 Juan Benet(juan@benet.ai)在 IPFS 技术白皮书中假设了一些使用场景: 在 /ipfs 和 /ipns 下挂载全球文件系统挂载的个人同步文件夹,拥有版本功能文件加密,数据共享系统可用于所有软件的带版本的包管理器(已经实现了:https://github.com/whyrusleeping/gx)可以作....

More...

Solo 2.3.0 升级 2.4.0 问题与解决

如果你的 Solo 在 2.3.0 升级 2.4.0 后不能正常打开,请参考如下步骤进行问题确认与解决。 停止 Solo 进程查看 page 表结构是否存在 pageIcon 字段,如果没有请手动添加 pageIcon varchar(255)查看 option 表数据,是否存在 oId 列为 statistic 开头的 5 行如下数据,如果不存在就插入 5 行(optionCategory 列表全部使用 statistic),数据来自 statistic 表 查看 option 表数据 oId 为 version 的行 optionValue 值是否为 2.4.0,如果不是则改为 2.4.0确认以上步骤,无误的话删除 statistic 表重新启动 Solo 进程 该问题主要会发生在使用 MySQL 某些版本的 Solo 上,给大家带来的不便之处请大家多多包涵,原谅原谅。

More...

Solo 的 golang 版计划

Solo.go Solo 经过多年众多用户的使用、反馈和开发迭代,目前从功能上和实现上都比较稳定了,我和 @Vanessa 都觉得是时候将 Solo 推入维护阶段了,后续只做必要的缺陷修复。 另外,我们打算用 golang 实现一个 Solo.go(代号),并在 Solo v2.5.0 中提供 JSON 格式的数据导出功能,以便 Solo.go 进行导入。如果你一直是 Solo 用户,那么以后可以考虑通过跑 Solo.go 来节省服务器内存用量。 系统分析 前端管理后台使用 Vue.js,前台皮肤使用 golang 原生的模板在 Solo.go 初期版本中以下功能暂不实现 插件机制(技术待研究)邮件发送(鸡肋功能)草稿夹(鸡肋功能) Solo v2.5.0 提供 JSON 导出功能 多租户 这里的“多租户”指的是在 Solo.go 上可以创建多个独立博客,每个独立博客有自己的管理员,自己的皮肤,和其他博客在功能上完全隔离。 每个独立博客是一个团队博客,团队使用同一个后台,同一个前端皮肤。 所有用户账号都必须是黑客派社区的账号初始化时的用户是平台管理员,并且初始化一个博客,使用 /{....

More...

开源经验谈

Bootstrap 古话说得好:“万事开头难”。 开头在本质上是解决 “Bootstrapping”,人们一直使用这个比喻来描述解决启动问题的方法,即一个人试图用自己的鞋带将自己拉起来。比如按下电脑开机按钮后初始化系统被广泛称作自举引导(简称 booting)。 想做好一个开源项目,就先得规划一个好的启动方式。 GitHub 10 多年前做开源项目托管的话基本只有一个选择,那就是 SourceForge。期间也有过一些其他大厂的项目托管服务,比如 Google Code,Sun/Oracle 的 Project Kenai,现在都停服了。目前 GitHub 已然是全球最大的开源项目托管服务商了,促成这样现状的最大原因有这几个方面吧: git 版本控制系统的流行,并做了一些更简单的工作流,比如 Pull Request更好、更现代化的用户体验,比如 issue comments 的实时推送 API 开放平台,构建第三方应用的生态系统持续不断的改进,GitHub 隔三差五会有一些细节改进,并且桌面客户端工具也在不断演进 目前 GitHub 是开源项目托管的不二之选。国内也有类 GitHu....

More...

理解 Eureka 的 P2P 通讯

Eureka 客户端会和在同一个可用区(Zone)的服务端进行通讯,如果通讯失败或者服务端没有和客户端在一个可用区,则客户端将进行失效转移:对其他可用区的服务端发起通讯。 服务端接收到客户端信息后,会进行一些列操作将信息同步给其他服务端节点。如果某步操作失败,信息将在下一次心跳时同步给其他服务端节点。 当一个 Eureka 服务端节点启动后,它将向其他服务端节点获取所有实例的注册信息。服务端获取到实例列表后将根据信息创建续约(renew)相关数据并准备接收来自客户端的续约请求。如果在某个时刻客户端续约失败(15 分钟内低于 85%),服务端将停止实例过期防止该实例注册信息丢失。 在 Netflix 内部,上述过程称作自我保护模式,是 Eureka 客户端和服务端通讯时发生断网的一个保护机制。在这个场景下,服务端将尝试保存住已有的注册信息。此时客户端获取的实例列表中有可能有的实例已经不能正常服务了,客户端需要自己保证 Eureka 服务端返回的实例在不存在或不响应情况下是弹性的,最好的处理方式就是对该实例的调用设置较短超时并尝试其他服务器。 当服务端没法从其他节点获取注册信息时,....

More...

Solo 支持 Hexo/Jekyll 数据导入

自 Solo 2.2.0 开始将支持对 Hexo/Jekyll 两款静态博客系统的文章导入,具体使用方法如下: 在 Solo 根目录下放置 markdowns 目录,里面放置待导入的一些 md 文件(可新建目录,方便标识,比如可将 Hexo 的 _posts 文件夹直接拷贝进来) 重启 Solo,启动后将逐篇进行自动导入,可通过日志查看导入情况 导入结束后原 md 文件将被重命名为 .md.{时间毫秒} 这样的格式,如不需要,可将这类后缀的文件删除 导入失败的 md 文件不会被重命名,可将日志和 md 文件反馈给我们,以帮助我们继续改进 :heartbeat: 另外,目前仅支持已发布的 post,不支持 draft、page 等。 Some technical details 每个 md 文件都会按照 Hexo/Jekyll 定义的头部进行解析,已确定标题、标签等: Hexo 头 Jekyll 头 支持头信息中使用 description、summary、abstract 作为文章摘要,如果没有的话将自动截取正文部分 如果没有定义头信息,或者解析失败,则以文件名作为标题、Not....

More...

模板引擎实现(一)词法分析

如果你想实现模版引擎、编译器前端、文本解析器(比如 Markdown )或想要了解它们的实现原理,请一定不要错过本系列的文章 :grin: 模板引擎实现(一)词法分析 另外,* 本系列的文章面向的是撸起袖子就开干的朋友,所以不会介绍基础理论,比如 DFA/NFA,算法复杂度等(确切的说是没法介绍理论,因为作者能力有限 :joy:)* 在使用到的术语/定义方面作者是认真查过资料并再三斟酌的,不会出现胡编乱造,请放心理解和使用 :white_check_mark:* 本系列文章的对应项目是 freemarker.go(FreeMarker 的 golang 实现),欢迎大家关注点赞 :star2: 本文介绍了词法分析的基本概念,主要参考 golang 的 text/template/parse 包源码进行解析。 词法分析 将面向源码的字符流转成 token 流的过程是词法分析。用“流”来描述主要说明了处理过程是有序连续的。比如读取源码文件时是一个字符一个字符读取的,生成的 token 也是一个接一个的。 当我们在源码中看到 scanner、lex/le....

More...

Solo 用户指南

简介 Solo 是一款一个命令就能搭建好的 Java 开源博客系统,并内置了 15+ 套精心制作的皮肤。除此之外,Solo 还有着非常活跃的社区,文章分享到社区后可以让很多人看到,产生丰富的交流互动。 Solo 的第一个版本发布于 2010 年,至今已经非常成熟稳定,请放心使用 :smirk_cat: 安装 安装前先准备好 Java 环境,请使用 JDK8 或以上版本。Solo 提供了两种部署模式,分别是独立模式和容器模式。数据库默认是使用内嵌的 H2 数据库,也支持 MySQL,稍后会详细介绍。 对于系统内存要求,最低 512M,推荐 1G。 独立模式 独立模式使用内嵌的 Jetty 容器进行部署,解压 war 包后仅需要一个命令就能启动: Windows: java -cp WEB-INF/lib/;WEB-INF/classes org.b3log.solo.Starter Unix-like: java -cp WEB-INF/lib/:WEB-INF/classes org.b3log.solo.Starter 启动正常的话打开浏览器访问 http://lo....

More...

ScaleIO 2.0 基础及安装纪要

ScaleIO 基础概念 ScaleIO 是一套由 EMC 提供的软件定义存储的解决方案,用于实现虚拟化 SAN。它主要的优势是 不局限于平台:可以融合异构系统,比如可以同时使用 VMware、Windows、Linux 来构建存储池并使用 优秀的横向扩展能力:存储提供可以扩展到上千节点 动态扩容能力:动态增减节点非常容易 MDM Meta Data Manager,即元数据管理器。至少由 3 个节点组成一个集群: Primary MDM:主管理器 Secondary MDM:从管理器 Tie Breaker:决策器 SDS ScaleIO Data Server,即数据服务器。将主机上的磁盘通过网络抽象为存储池。 SDC ScaleIO Data Client,即数据客户端。创建卷后在安装了 SDC 的系统上可以看见卷被暴露为标准块设备,格式化后就能直接用了。 GW Gateway,即网关。是一个 Web 服务,提供了 ScaleIO 的 RESTFul API。 GUI 管理客户端,UI 很酷炫并且简单易用。可以直观看到容量、IO 情况,创建池、卷等。 vSphere ....

More...

Java 开源博客 Solo 2.0.0 发布 - 聚合分类

在 Solo 2.0.0 中我们实现了一个重要特性:聚合分类。 Solo 是一款一个命令就能搭建好的 Java 开源博客系统,并内置了 15+ 套精心制作的皮肤。除此之外,Solo 还有着非常活跃的社区,文章分享到社区后可以让很多人看到,产生丰富的交流互动。 信息架构 已有的很多博客系统在文章的信息架构上面都是自顶向下的: 一篇文章只能属于一个分类 分类在发布文章时就已固定 这会带来几个问题: 有的文章很难决定属于某个分类 随着文章越来越多,想要修改文章分类非常困难 分类可能具有时效性,固定分类没法与时俱进 而聚合分类就是来解决这些问题的,并且向前兼容: 一个分类包含多个标签,分类和标签是多对多 浏览分类时根据标签动态聚合出文章列表 设置分类可以随时灵活调整 安装与升级 下载安装包 解压后执行 java -cp WEB-INF/lib/*;WEB-INF/classes org.b3log.solo.Starter 1.9.0 到 2.0.0 升级只需将已有的配置拷贝覆盖即可,启动后会自动升级。 项目地址 GitHub:https://github.c....

More...

GitHub Windows 安装器

GitHub 已经提供了完整安装包,所以这个项目可以退休了 :smile: GitHub Windows 安装器,简称 GWI。项目地址:https://github.com/b3log/github-windows-installer 项目背景 GitHub Windows 是在线安装的,需要连接亚马逊云。因为你懂的原因,使得安装 GitHub Windows 成了一个问题 :sob: 解决方案 本库是一个 GitHub Windows 安装器的 golang 实现,在 网络条件好的地方 运行就可以制作安装包啦! 网络条件好的地方:国外服务器。比如阿里云按量付费的 ECS,选硅谷节点最低配置。 使用步骤 在国外服务器上部署 gwi(下载或自行构建) 运行 gwi,将在当前工作目录生成 github-windows.zip 安装包 下载安装包到本地后运行 GitHub.application 安装完成! 原理 下载应用元数据文件 下载包描述文件 解析所需包/资源文件下载路径 并发下载 具体请看代码 :smirk:

More...

Java 开源博客 Solo 1.9.0 发布 - 新皮肤

这个版本主要是改进了评论模版机制,让大家更方便皮肤制作,并发布了一款新皮肤:9IPHP。 Solo 是一款一个命令就能搭建好的 Java 开源博客系统,并内置了 15+ 套精心制作的皮肤。除此之外,Solo 还有着非常活跃的社区,文章分享到社区后可以让很多人看到,产生丰富的交流互动。 项目地址: GitHub:https://github.com/b3log/solo 码云:https://git.oschina.net/dl88250/solo

More...

使用 NGINX 流控和 fail2ban 防止 CC 攻击

More...

Java 开源博客 Solo 1.8.0 发布 - 改进文件上传

本次发布主要是更新了编辑器,使其更好地支持文件上传。(1.8.0 版本变更记录请看这里) 我们的 Markdown 编辑器: 另外,我们对 HTTPS 的支持也更完善了,欢迎大家试用! 简介 Solo 是一款一个命令就能搭建好的 Java 开源博客系统,并内置了 15+ 套精心制作的皮肤。除此之外,Solo 还有着非常活跃的社区,文章分享到社区后可以让很多人看到,产生丰富的交流互动。 功能 Solo 沉淀至今的每一个功能你应该都会用到。我们不会将只有“20%”用户使用的功能添加进来,只有这样才能保持博客系统本该有的纯净,足够轻量才能带来简约的使用体验。 Markdown / TinyMCE / KindEditor 自定义导航(页面、链接) 草稿夹 评论/回复邮件提醒 随机文章 / 相关文章 / 置顶 / 更新提醒 自定义文章永久链接 自定义站点 SEO 参数 自定义公告 / 页脚 多个签名档 代码高亮 多皮肤,多端适配 / 社区皮肤 多语言 / 国际化 上传七牛云 友情链接管理 多用户写作,团队博客 SQL 文件导出 插件系统 Atom / RSS 订阅 Si....

More...

疯狂的想法 C:书籍共享计划

文档状态:基本完成开发状态:尚未开始更新时间:2017-01-01 共享机制 书籍以一个自贴二维码(共享码)作为标识,捐书的人通过微信小程序登录社区后扫描书籍 ISBN 将生成这个共享码,然后自己打印出来贴到书籍封面上就开始该书的共享了! (必须)共享:当前的书籍持有者看完后必须将这本书寄出给需求的人 (必须)免费:当前的书籍持有者必须包邮 (必须)接收:收到书籍后必须确认,让其他人可以知道书在你这里 (可选)注解:当前的书籍持有者可在书页任何地方写上阅读注解 (可选)落款:当前的书籍持有者可在书籍封底页写上自己的 ID 和日期,表示读过/经手过该书 细节 收到书籍的确认是通过小程序扫码完成 是否存在”有需求的人“可以通过社区通知系统(站内通知+邮件)得知。如果当前没有需求的人,则请妥善保管好该书,随时等待它地下一个主人 注解请尽量整洁,请勿乱涂乱画(另外,字难看的请自重 :trollface: ) 特例情况 如果有人捐了已经在共享的书(ISBN 相同),则也会单独开一个贴来进行 如果共享码被其他人误扫并做了接收确认 TBD 多个需求者问题 TBD 概要设计 发起共享 用户....

More...

2016 一个想做架构师的码农

工作 今年在房星主要负责了几个项目的技术设计和实现: Protyle:敏感数据存取CC:呼叫中心Shotgun:房源群发Spider:房源爬取Auto:项目自动部署平台StarChart:户型图测绘,以链家作为对标SymX:企业内网论坛Petal:配置中心,才开的新坑 技术架构方面服务化的 Java 技术栈基本铺好路了,接力棒开始交给了其他伙伴。 房源群发和爬取这个看上去有内容可做,不过泼冷水的是 58 已经上线了集客家,也是做房客源推荐、群发的,然而就在前不久我已经向老板请缨明年去专职做这一块了,怎么办 :joy: 三十而立 hi,你们想过当你40岁以后你能做什么吗? 能力与价值 今年开始奔四了,但我才刚意识到一个现实:我的能力不足以支撑我的生活。据说人最痛苦的事情之一就是实力不足以支撑其野心。 在工作上,公司给了我一个较自由的定位,我也一直在问自己,到底能为公司创造什么价值?目前除了上面那堆破代码,我没能创造出什么价值,而一年过去了。无论是对公司还是个人来说,时间都是非常宝贵的,“天下武功,无坚不摧,唯快不破”。 我不希望过几年以后会变成依靠资历经验的 PPT 架构师,但我希望写....

More...

星图 —— 一种户型图测绘方式

简介 星图(StarChart)是一套绘图方法论和工具集的统称,可用于 精确 绘制直线型图形的二维轮廓,对于不规则的曲线型图形也能较直观地进行描述并绘制。目前主要的应用场景是房屋平面户型图的 边测边绘 。 动机 星图的出发点是解决户型图绘制的一些难点。 传统绘制方式是先进行仪器测量、记录数据,然后通过纸笔进行绘制,这种方式的缺点如下: 需要绘图者具有较高的专业水平 精度很可能在绘图时丢失 纸笔绘制的图纸转换为计算机模型时难度很高甚至不可能 目前一些在线户型图绘制工具可以解决部分传统问题: 通过改善交互体验来提升绘制效率:比如复用多种直观的绘图元素,提供拖拽绘制墙面,方便的转角,元素吸附、缩放效果等 不存在模型变换,但仍存在精度丢失:真实世界到计算机世界的变换在绘制过程中由绘图者完成,变换过程人工完成容易出现精度问题甚至是错误 由此,我们可以看出:由人直接进行户型图绘制的方式 很可能 在模型变换时出现问题,其根本原因在于交互 状态不足够简单 ,绘图者需要识别拖拽、放置、选择等等操作。 如果能将绘图方式变简单,绘图者只需要进行非常少的状态指令即可进行绘制,这样将大大减少出错概率,....

More...