不蒜子

!!!!2018年9月 - 重要提示 !!!!
大家好,因七牛强制过期原有的『dn-lbstatics.qbox.me』域名(预计2018年10月初),与客服沟通数次无果,即使我提出为此付费也不行,只能更换域名到『busuanzi.ibruce.info』!因我是最早的一批七牛用户,为七牛至少带来了数百个邀请用户,很痛心,很无奈!
各位继续使用不蒜子提供的服务,只需把原有的:
<script async src="//dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script>
域名改一下即可:
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
只需要修改该js域名,其他均未改变。若有疑问,可以加入不蒜子交流QQ群:`419260983`,对您带来的不便,非常抱歉!!!还是那句话,不蒜子不会中断服务!!!!

静态网站建站现在有很多快速的技术和平台,但静态是优点也有缺点,由于是静态的,一些动态的内容如评论、计数等等模块就需要借助外来平台,评论有“多说”,计数有“不蒜”(多说即将关闭,不蒜子还活着涅,这是程序员对程序员的承诺。)

“不蒜子”与百度统计谷歌分析等有区别:“不蒜子”可直接将访问次数显示在您在网页上(也可不显示);对于已经上线一段时间的网站,“不蒜子”允许您初始化首次数据。。

普通用户只需两步走:一行脚本+一行标签,搞定一切。追求极致的用户可以进行任意DIY。

mongoDB 3.0 安全权限访问控制

MongoDB3.0权限,啥都不说了,谷歌百度出来的全是错的。先安装好盲沟,简单的没法说。

首先,不使用 –auth 参数,启动 mongoDB:

mongodb-linux-i686-3.0.0/bin/mongod -f mongodb-linux-i686-3.0.0/mongodb.conf

此时你 show dbs 会看到只有一个local数据库,那个所谓的admin是不存在的。

mongoDB 没有炒鸡无敌用户root,只有能管理用户的用户 userAdminAnyDatabase

打开 mongo shell

mongodb-linux-i686-3.0.0/bin/mongo

添加管理用户:

use admin
db.createUser(
{
user: "buru",
pwd: "12345678",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

ZooKeeper 简介

系统越来越大后切分出的模块越来越多,一些模块还部署了双机。配置文件混乱,更新部署极易出错,准备上 zookeeper

下载当前稳定版的 zookeeper,解压并拷贝 conf/zoo_sample.cfg 为 zoo.cfg,配置所需要的项目。最少配是只指定其中的 dataDir 项,其他项则使用默认值。

tickTime=2000        # 心跳基本时间单位,毫秒级,zk基本上所有时间都是这个时间的整数倍
clientPort=2181 # 监听客户端连接的端口
dataDir=/zookeeper/server0/data # 内存数据库快照存放地址
dataLogDir=/zookeeper/server0/dataLog # 事务日志存放地址,未指定则同dataDir项,建议分开

Akka 快速入门

Akka的优点太多,高性能、高可靠、高并发、分布式、可容错、可扩展、事件驱动,不一一叙述。不同版本的API差异很大,本文代码运行在 Scala 2.10.3Akka 2.3.2 之上。

<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.10</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.10.3</version>
</dependency>

定义

定义Actor很简单,继承 akka.actor.Actor ,实现receive方法即可。

class Hello extends Actor {
def receive = {
case msg: String => println("hello " + msg)
case _ => println("unexpected message.")
}
}

对接口设计的一个小看法

与另一产品线的同事们讨论对接接口,对一些领导和架构师的某观点十分不认可。内容如下:

  • 接口中的数据类型全部是String,不要出现Int等其他类型,理由是统一好处理。
  • 接口中Array类型请用String替代,值用逗号分割,理由是接口中不应该出现数据结构。

我强烈反对上述观点。我粗浅的认为设计的基本原则是世界是什么样子,你的设计就是什么样子,这是好设计的前提。设计原本很简单,就是对真实世界的合理抽象,不是人为扭曲。

通过 Spray 创建简单的 Restful Http Server

好久没写文章,实在太忙。最近我在项目中,搭建了很多小的零散的 Restful 服务,各个服务之间通过rest接口调用,相互协作。

Java出身的码农,动辄就是Tomcat、Spring,RestEasy、Hibernate、JPA、Jackson、HttpClient… 这些巨无霸非常臃肿,其实我的项目就是一个简简单单的Rest服务,请求Json参数 → 调用资源接口 → 返回Json数据,还好有Spray!

使用Scala系的工具,无论是体重上(包的大小)还是身高上(代码的长度),都能极大的减负,同时提升逼格和优雅度。下面介绍一个简单的Restful Http Server的开发示例。

首先安装 SBT(简单理解为scala下的maven),安装方法参考 sbt documentation - setup

win7环境下,直接下载 0.13.1-zip包 解压到c:\sbt,配置SBT_HOME到path,cmd中敲入sbt检查有无成功,%SBT_HOME%\conf\sbtconfig.txt中可以配置启动参数。

# Set the java args to high
-Xmx1024M
-XX:MaxPermSize=512m
-XX:ReservedCodeCacheSize=256m

# Set the extra SBT options
-Dsbt.log.format=true
-Dfile.encoding=ISO-8859-1
-Dsbt.boot.directory=H:/sbt/boot/
-Dsbt.ivy.home=H:/sbt/

转折点

二月的最后一天,新的三月,重要转折点之一。离开落后愚昧,大踏步,走向互联网的节奏。

简单美观的文字标签云组件

经常在微博或微信的文章中看到漂亮的分析图。我认为在大数据的时代,目前最关键的就是如何让非专业人员轻松的进行数据分析,比如可以象使用office一样制作信息图(infographic),而不是用专业的制图工具。这一步跨过去,看到的将是欣欣向荣的真正大数据时代。

而这之前,首先缺少的就是,可以让普通开发人员使用的大数据时代的可视化图表组件,比如标签云图,所幸,业界已经有EChartsWordCloud这两大利器,本文只介绍后者。

中文

Fork me on GitHub