Web开发利器:介绍一款快速开发套件 (Node, Grunt, Bower和Yeoman)

最近看到javacodegeeks上的一篇文章Node, Grunt, Bower and Yeoman – A Modern web dev’s Toolkit, 文章介绍了一个web开发的工具集。 正好我今年以来也在使用这套工具集开发Web应用程序,也一直想写一篇文章总结一下这套开发套件的用法,借此机会,参考这篇文章,总结一下我使用这套工具的经验。
在的文章中,作者使用angular 框架开发,而我,遵循公司的选择,使用Ember.js作为我的开发框架。同时使用Compass进行SCSS的编译。这些地方会有所不同。

像Node.js, 已经不算新鲜的玩意了。Node.js第一个版本于2009年发布,现在有很多的公司也采用Node作为后端开发工具。 至于Node.js是否代表先进的开发方向, 目前还有很大的争论。但是基于Node.js的生态圈已经形成,一大波的优秀的的Node.js 模块已经涌现。但是像Grunt, Bower等工具,也有不少的朋友并不了解。所以这篇文章特别介绍一下它们。

阅读全文

Javacodegeeks网站上关注度最高的几篇文章

Javacodegeeks 网站提供了一系列优秀的关于Java语言的论文。 本文整理罗列了关注度比较高的几篇文章。很多优秀的文章已经被翻译成了中文,读者可以对照着阅读。

  • 115 Java Interview Questions and Answers – The ULTIMATE List 由Sotirios-Efstathios Maneas发表于2014年4月。 文章列出了常见的Java面试题,但是我觉得关于Swing/AWT的问题可以删除了,还有多少现代的公司使用这种技术? 倒是可以将泛型,反射等技术的问题加上。 很遗憾的是这篇文章并没有设计并发编程的问题。

中文翻译请参考: 115个Java面试题和答案(上), 115个Java面试题和答案(下)
importnew还翻译了DZone网站的另外一篇Java面试题相关的文章: Java面试参考指南(一)Java面试参考指南(二)

中文翻译请参考: Java 8新特性终极指南

中文翻译请参考: 关于Spring的69个面试问答——终极列表

CSS的几个属性display,float,clear,overflow,visibility

整理了几个CSS常用的属性。

display属性:block/inline/none

display:block(作用是把行属性标签显示成块属性标签,可以设置宽高) ;
display:inline(作用是把块属性标签显示成行属性标签,这时块属性标签就不能设置宽高啦);
display:none(作用是使所控制的标签不显示)
visibility:hidden(是设置元素的框的不可见,但是在布局中的位置是不变的)
它和display:none的区别就在于后者不会占用那个位置,下一个元素会直接覆盖它,而前者是会占用那个布局,只是不显示内容,是 一片空白;并且下载的时候对于display:none就不会把不显示的元素给下载下来,而visibility:hidden则会把不显示的元素给下 载下来;

阅读全文

Sass基础

翻译自Sass官方文档: Sass Basics.

在使用Sass之前, 你需要在你的项目中设置一下。 如果你只是想浏览本页内容,没问题,继续。 但是还是强烈建议你首先安装Sass。 看这里的文档你可以了解怎么设置Sass。

预处理

Css自己本身很有趣,但是样式单变得越来越大,越来越复杂, 变得很难维护。 这真是预处理器要做的。 Sass让你使用CSS不存在的特性,比如变量,嵌套,混合(mixin), 继承等其它90个好的玩意来让CSS编写变得更有趣。

一旦你开始使用Sass, 它会预处理你的Saa文件, 把它存为一个正常的CSS文件, 用在你的网站上。

阅读全文

Java序列化框架性能比较

jvm-serializers提供了一个很好的比较各种Java序列化的的测试套件。 它罗列了各种序列化框架, 可以自动生成测试报告。
我在AWS c3.xlarge机器上进行了测试,一下是测试报告与解析。

关键的测试数据的统计代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public double runWithTimeMeasurement(int timeMillis, TestCase tc, int iterations) throws Exception
{
long start = System.currentTimeMillis();
double sumTime = 0;
int count = 0;
System.err.println("test-time "+timeMillis+" iteration "+iterations);
while ( System.currentTimeMillis()-start < timeMillis )
{
double time = tc.run(transformer, serializer, value, iterations);
sumTime += time;
measurementVals[count] = time;
count++;
}
double avg = sumTime / count;
Arrays.sort(measurementVals,0,count);
System.err.println("-----------------------------------------------------------------------------");
System.err.println(serializer.getName());
System.err.println("min:" + measurementVals[0]);
System.err.println("1/4:"+measurementVals[count/4]);
System.err.println("1/2:"+measurementVals[count/2]);
System.err.println("3/4:"+measurementVals[count/4*3]);
System.err.println("max:"+measurementVals[count-1]);
System.err.println("average:"+ avg +" deviation:"+(avg-measurementVals[count/2]));
System.err.println("-----------------------------------------------------------------------------");
return avg;
}

测试时序列化和反序列化会迭代多次,默认2000次。 测试会有一个限定时间,一轮测试完成后时间还有的话还会继续新的一轮的测试。 因此, 由于不同的框架花费的时间不同, 测试的轮数也不一样。

阅读全文

一些开源项目的性能基准Benchmark

项目中使用了好些的开源项目。对于它们的性能, 只有官方的一些性能报告和一些第三方的性能分析。 做性能估计的时候只是根据以往的经验做估算。 随着软件的不断升级,以及服务器硬件配置的升级, 这些开源项目的性能也有了变化。以前的性能数据可能不太准确了。
所以这篇文章记录了当前(2014年秋)我在AWS机器上做的一些性能数据,期望在做软件架构的时候有所帮助。
当前测试的软件包括:

  • Tomcat
  • Jetty
  • Vert.x
  • Memcached
  • MongoDB
  • Java serializers
  • CXF
  • Spring MVC

这篇文章会不断更新, 将我最新的测试列出来。

阅读全文

npm使用镜像网站

基于众所周知的原因,在国内使用npm下载资源的时候非常缓慢,甚至失败。使用一个靠谱的国内代理镜像是较好地解决方案。

  1. 命令行临时指定
    可以临时指定npm镜像
1
npm --registry https://registry.npm.taobao.org info underscore
  1. 通过config配置
1
npm config set registry https://registry.npm.taobao.org
  1. 编辑配置文件~/.npmrc
1
registry = https://registry.npm.taobao.org

阅读全文

MathJax 快速参考

MathJax是一个JavaScript引擎,用来显示网络上的数学公式。它支持大部分的主流的浏览器,对大部分用户而言它不需要安装,既没有插件需要下载也没有软件需要安装。MathJax使用网络字体(大部分浏览器都支持)去产生高质量的排版,使其在所有分辨率都可缩放和显示,这远比使用包含公式的图片要有效得多。使用MathJax显示数学公式是基于文本的,而非图片。它可以被搜索引擎使用,这意味着方程式和页面上的文字一样是可以被搜索的。 MathJax允许页面作者使用TeX、LaTeX符号和 MathML 或者 AsciiMath 去书写公式。 MathJax甚至可以将Tex格式转化为MathML格式,使其可以被原生支持MathML格式的浏览器更多的渲染。转化为MathML格式后你可以复制粘贴它们到其他程序中。

MathJax是模块化的,所以它仅仅在需要时才加载它的组件,同时也可以被扩展以实现更多功能。 MathJax同时也是高度可配置的,允许作者作出更适宜网站自身的自定义。 如果你需要,MathJax的API甚至可以让你在你的网页上动态的创建公式。

本网站上的数学公式都用LaTex格式写的。

喜欢中文的朋友可以参考MathJax 中文文档
\(E=MC^2\)

MathJax有三种安装方式:最简单的方法就是使用分布式网络服务中的MathJax的副本,它位于 cdn.mathjax.org ,但是你也可以下载并安装一个MathJax的副本到你的服务器,或者使用在你本地硬盘的副本(这样是不需要使用网络)。 官方文档里有详细的描述。

你可以配置MathJax,以便支持各种公式格式和输出。你还可以配置内联数学公式的时候采用的标记符号。如:

1
2
3
4
5
6
7
8
9
10
11
12
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX", "output/HTML-CSS"],
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true
},
"HTML-CSS": { availableFonts: ["TeX"] }
});
</script>

stackexchange网站上有一个很好的帖子, 收集了大家认为比较常用的公式写法。

阅读全文

最流行的android组件大全

最后更新
2016-02-16 最近几个月忙于写书,终于将新年的第一次整理完成。新加的项目在文章最后。
2015-11-24 增加 更多的开源项目。实现项目图片延时加载,提高页面显示速度。
2015-10-26 增加 更多的开源项目。
2015-09-15 增加 更多的开源项目。
2015-08-21 增加 awssome android XXXXX,在文章的前面。
2015-08-12 增加 很大一堆开源UI库等,在文章最后。
2015-06-05 增加 FlyRefresh......等一堆新的项目。以后新增加的项目放在文章最后
2015-04-20 增加 CircleProgress, MultiImageSelector, ArcLayout, richeditor-android

Android 是目前最流行的移动操作系统之一。 随着新版本的不断发布, Android的功能也日益强大, 涌现了很多流行的应用程序, 也催生了一大批的优秀的组件。
本文试图将目前流行的组件收集起来以供参考, 如果你发现本文还没有列出的组件,欢迎在评论中贴出来,我会定期的更新本文。

部分图片需要翻墙才能显示

以下是我收集和精选的Android开源项目。

阅读全文

<翻译> 如何利用Bloom Filter在Java中构建大规模基于内存的缓存

原文地址: http://www.javacodegeeks.com/2014/07/how-to-use-bloom-filter-to-build-a-large-in-memory-cache-in-java.html

缓存(Cache)是用来解决当下软件性能问题时需要考虑的一个很重要的手段。 你的程序可能有密集的CPU操作,而你却不想一遍又一遍的折磨CPU。 相反, 你会将结果抽取出来并缓存到内存中。 有时候系统的瓶颈也可能是IO操作, 比如你不想重复执行数据库的查询,而是把查询结果缓存起来, 只是在数据库的数据改变的时候才去更新缓存。

类似地还有一些其它需要cache的情况如处理收到的request时我们需要执行一个快速的查询。例如, 你需要判断一个URL是否指向了一个恶意网站。 可能有非常多的(恶意网站的)URL, 如果我们将所有的恶意网址都缓存起来, 需要很大的空间。 又比如我们需要识别用户输入的字符串中是否包含美国的一个地方。 比如用户输入华盛顿的博物馆, 这个字符串中华盛顿是美国的一个地名。 我们要把美国所有的地名缓存起来以供查找? 缓存会变得多大?没有数据库支持的这样做是否有效?
这就是我们淘汰map数据结构而去宣召一个更先进数据结构-boomfilter。 你可以把blommfilter看作类似java collection中的类。 可以把数据项放到它里面,可以检查某个数据项是否已经存在。 如果Bloomfilter说数据项不存在, 那数据项的确不存在, 不必怀疑。 但是如果它说数据项存在, 可能是误报, 有可能数据项真的不存在。 如果我们考虑周全, 就能减少误报的可能。

阅读全文