在网上找到这么一段 Excel 宏代码。
可以合并多个Excel Workbooks (即Excel文件) 合并成一个 Excel文件。
http://exceltips.vitalnews.com/Pages/T002409_Merging_Many_Workbooks.html
Merging Many Workbooks
Summary: Got a whole slew of workbooks that you need to merge together? You can do it manually, but it could take you all day. It’s ...
函数的副作用及其他
Pure Function、Impure Function、副作用、Referential Transparent
纯函数(Pure Function)是这样一种函数——输入输出数据流全是显式(Explicit)的。
显式(Explicit)的意思是,函数与外界交换数据只有一个唯一渠道——参数和返回值;函数从函数外部接受的所有输入信息都通过参数传递到该函数内部;函数输出到函数外部的所有信息都通过返回值传递到该函数外部。
如果一个函数通过隐式(Implicit)方式,从外界获取数据,或者向外部输出数据,那么,该函数就不是Pure Function,叫作Impure Func ...
本文是继前两篇文章之后的有一篇线程数据结构相关文章.
线程同步
http://www.javaeye.com/topic/164905
线程同步模型, 生产者/消费者, 读写同步,线程池,concurrent map
http://www.javaeye.com/topic/174591
我以前写过这个Fast Read Map 数据结构的文章.
但是那个时候, 理解得并不是那么透彻, 这里重新整理再发一遍.
-------------------------
Copy On Write Hash Map
我们在工作的过程中,经常遇到如下的需求:
用一个Map存放常用的Object ...
之前写了一篇线程同步的原理分析的文章.
线程同步
http://www.javaeye.com/topic/164905
看到大家的反馈,感到深受鼓励.
看来这种举例说明本质原理的浅显易懂的文章, 还是比较受欢迎的.
关于线程, 我以前也写过一些文章.只是写得不那么清楚易懂.
一是因为自己的理解也有限, 二是很难找到灵感,很难写出一个非常贴切的例子.
应一些坛友的意见. 我这里继续发一些线程相关的内容.
内容的条理性和连贯性可能有些欠缺.
------------------------------------------------------------------------- ...
线程同步
作者 : buaawhl
我们可以在计算机上运行各种计算机软件程序。每一个运行的程序可能包括多个独立运行的线程(Thread)。
线程(Thread)是一份独立运行的程序,有自己专用的运行栈。线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。
当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团。
同步这个词是从英文synchronize(使同时发生)翻译过来的。我也不明白为什么要用这个很容易引起误解的词。既然大家都这么用,咱们也就只好这么将就。
线程同步的真实意思和字面意思 ...
ErLang Map 函数的尾递归形式
循环语句需要计数器变量控制循环次数,而计数器变量需要多次改变数值。ErLang语言不支持可以重复赋值的变量,因而也不支持循环语句。
ErLang程序员只能用递归表示循环。有些服务程序需要运行在在一个无穷循环中。
while true
listen and respond to user request ….
这种情况下,ErLang程序也要写成无穷递归的形式。在ErLang中,无穷递归必须写成尾递归(Tail Recursion)的形式。因为ErLang是栈语言,如果是非尾递归的递归形式,无穷递归必然引起运行栈的无限膨胀。
下面我们来看一个非尾递 ...
Yield in Python/Ruby - Iterator/Visitor
首先,我们从Ruby的Iterator开始。Ruby程序员可以用yield关键字定义Iterator。例如,下面的abc()就是一个Iterator。
def abc()
yield “a”
yield “b”
yield “c”
end
abc Iterator的调用方法如下:
# block形式
abc do | ch |
print ch
end
或者
# closure形式
abc { | ch | print ch }
从这个调用方式,我们可以看出,实际上,Ruby Iterator并 ...
收到一封关于 pojo in action 图书的信。
------------------ editor said
我是营销编辑。为了更好的销售图书《POJOs IN ACTION》,我想做一个EJB VS POJOS专题,您一看专题就能明白,我想做一个轻量级与重量级比较。形式是:引出一个话题,吸引读者。目的是:
读者买这本书。但是我遇到了一个问题:我不太清楚如何引出一个比较的话题,让读者
购买这本书。我不好把握这个尺寸,我想请您指导
------------------ co translater said
hi, buaawhl
能否由你联络杜编辑,帮他策划一下 ...
ErLang语法提要
ErLang中的标点符号
ErLang语法中充满了一些约定。大写字母开头的名字(比如Address),表示一个变量,包括参数、局部变量等;小写字母开头的单词(比如ok),表示一个常量,叫做atom(原子的意思),包括常量名、函数名、模块名等。
ErLang的注释用%开头。ErLang用下划线“_”表示任意变量,类似于Java的switch语法里面的default选项。
ErLang脱胎于Prolog,不过,我觉得,ErLang语法和Haskell语法比较象,都是采用 -> 定义函数。
ErLang语句中的标点符号用法很象文章的标点符号。
整个函数定义结束用一个句号“.” ...
学如逆水行舟,不进则退。
半年多来,居无常所,没有稳定的上网环境,这次抽空上来一看,又有好多陌生的名词漫天飞舞了。
落伍退化得很厉害。不过,我还能温故而知新,炒炒冷饭,写写基本的内容AOP。怀旧一番。
AOP = Proxy Pattern + Method Reflection + Aspect DSL + 自动代码生成
Declarative Programming & DSL
Aspect Oriented Programming(面向方面编程,简称AOP)是一种Declarative Programming(声明式编程)。
Declarative Programming(声明式编 ...
楼上早。
同意T1。动态性就是带来了松耦合,把静态语言的dispatch by type强契约,变成了dispatch by name,甚至dispatch by pattern等弱契约。
到了最后,dispatch 干脆就弱化为 DSL,Message Protocal。到了Message Protocal,这就是SOA。动态性最终带来的就是DSL, SOA。
关于静态类型的更为臭名昭著的例子是Visitor Pattern的Type Dispatch。有两个选择,
或者使用 instanceof/Class.isAssignableFrom/Type Cast,或者引入visitable ...
ajoo牛 代码观感
刚开始接触JParsec的时候,我就对照着ajoo的calculator, mssql的等比较复杂深入的例子,向下挖掘,并随之构建一套类体系。遇到不懂的地方,就向ajoo询问。
ajoo给我的建议是从简单的步骤开始做起,这样更有信心。
我的回答是,简单的步骤并不能免除我今后应对复杂的地方。现在弄不懂的,后面还是不懂。我习惯于一开始尽量把所有障碍和难点思考清楚,提前拔除。
ajoo说,呵呵,随便你。只要你觉得能够有信心。
作大牛的跟随者,作ajoo牛的跟随者尤其难。
ajoo太敏捷了,步子迈得太快了。
讲解monad parser不久之后,JFun就问世了。JParse ...
Tail Recursion的一点经验
简单的不说了。只说复杂的,需要重用runtime stack上的计算结果的情况。
经验就是
tail recursion = continuation passing style。
可以看看 continuation passing style, CPS。
这个continuation其实就可以看作当前的运行栈。只是我们并不需要整个运行栈,所以,我们可以自己
把需要重用的计算结果,都包装在多出来的一个context(contiunation)参数里面,传递下去。
最复杂的情况,这个context也不过是一个stack数据结构。
比如....
写一 ...
from "JS is Best Language" article.
---------------------------
JavaScript Monads
(with aplogies to Shannon Behrens)
20
[code:1]
function MonadClass(value){
this.value = value || undefined;
}
MonadClass.prototype.pass = function(value, cb, scope){
if(typeof value[”value”] == “undefined”){
return n ...
人心思动的年代,还有人学习静态范型(static generic type),令人欣慰。
网上流传的Java范型学习资料,基本上都是些入门用法的知识。
我在这里试图解释一下原理。
Java Generic 采用的实现方案是Type Erasure;
C# Generic采用的实现方案是Reification。
Java Generic -- Type Erasure
Java Generic的目的是编译期类型检查。
编译结果里面不保留具体generic type信息,运行期不进行generic type检查,也无法用Reflection获取generic type信息。
支持wildc ...
http://jrc.dev.java.net
ajoo项目批准了。
想参与的去java.net上申请一个账号吧。告诉ajoo,可以把你加进去。
cvs:
host: cvs.dev.java.net
repository: /cvs
module: /jrc
项目的缘起可以看这里。
http://forum.javaeye.com/viewtopic.php?p=132021#132021
项目总共分3部分。
1. jrc的组合子部分,可以生成AST。
checked out code。看到这部分ajoo已经做了。Relation,
这部分就是SQL的语法元素组合子。ajoo称之为 ...
Javaeye2.0 社区的版面,感觉很不错。
我也在做一个数据关联结构的开源内容系统。
现在把核心数据结构写在这里,供参考,抛砖引玉。
文中的例子和说明,是和femto讨论的过程中加上的。
-----------------------------------------
我正在做一个内容组织整理的开源作品。
主要功能是:
能够让用户自由指定homepage (或者其他任何属于自己的page)上显示什么内容,可以任意组织整理。
功能上相当于 CMS + 具有FTP功能的个人空间。
要达到这个目的,需要一个非常灵活的数据结构。all in one, cover all content ...
Functor组合, 参数集合, Curry
Ajoo曾经写过面向组合子编程系列。我也帮着助威。
面向组合子编程和并不是简单意义上的Composite Pattern。Composite Pattern只是一个简单的基本Pattern。
面向组合子编程只是用到了Composite Pattern,面向组合子编程本身的内容复杂许多,以至于复杂到这样的程度,数据和行为必须分开,形成Visitor Pattern。
而一般意义上的Compositor Pattern都是数据和行为在一起的对象的组合。
用于面向组合子编程中,一般是指只有行为没有数据的Functor对象进行组合。
基本的模型是这样。 ...
也是和程序员朋友聊天。
说到了SEDA。关于请求分类合并,批量处理。
谈到一个问题,就是thread个数问题。
目前的servlet container的thread策略是一个request,一个thread。
如果换成如下的方式,就可能减少thread个数。
request进来,不启动一个thread。
而是产生一个listner task,进入task queue。
有一个task picker把task queue里面的task进行分拣和分类,合并成批量处理的任务。然后根据这些批量任务产生thread。
执行完毕,通知task listner,结果返回用户。
朋友的深入考虑的意见:
...
Log4J 和 JDK Logging 属于经典的过度设计的例子。非常复杂,非常难用。
:D just kidding. Logger体系是非常灵活强大的。
Logger体系也可以看作是MVC结构。
其中的View做的最好,Formatter, Outputer,都可以任意组合。
Controller部分也不错,能够很好地支持Logger层次结构的控制。
Model部分比较简单,就是让用户提供String。
这里就有一个问题,为什么不接受Object呢?
这不仅是使用方便的问题,也是处于性能的考虑。
我们知道,生产环境中,为了性能,Log能够被关掉。
但是,Model提供部分,却不能 ...
根据BirdGu的指导。我搜索了Demeter。发现和以前看到的Adaptive Programming有密切联系。
先解释一下名词:
AP -- Adaptive Programming
Demeter J -- Demeter Java
DJ -- Dynamic Adaptive Programming in Java
这些和AOP同样有紧密的联系。
Demeter是一个原则。law。
大意就是只能调用member, parameter的第一级方法, 不能a.getA().getB()这样的连锁调用。
当然,它的正式定义没有我写的这么直白。
Demeter Java呢,就是帮助程 ...
java语法如此多娇,引无数英雄竞折腰。
java语法细抠起来,极其诡异,充满了陷阱。
尤其是java语法里面的继承问题。
论坛里面关于java语法里面的继承问题的讨论,
可以说是长篇累牍,罄竹难书。
长江后浪推前浪,江上代有才人出。
前仆后继,香火不绝。
我只是希望下面的内容,
a. 一劳永逸地阐述清楚关于java继承的相关问题。
能够帮助一些年轻朋友节省宝贵的时间. 并且
b. 不必把java语法当作OO语法宝典来理解。java语法也在不断地变化。其变化理由也非常理可以度之。
1. override vs overload
首先来看诡异度最低的 override, overload. ...
Hard Code Logic -> Static Type -> Dynamic Type Data
在一篇介绍Design Pattern的文章中,我写过这样的看法:Design Pattern的目标就是分离代码中的 变化部分 和 不变部分,我们尽量把 变化部分 单独抽取出来,以便达到 不变部分 的 最大限度的重用。
最大限度的重用,也是软件开发技术追求的目标。
下面通过一个典型的例子,来分析软件开发技术在这个方向上的发展。
假设我们有这样一段代码:
do a lot of things before…
switch ( type ){
case A:
do someth ...
静态 vs 动态,编译 vs 解释,类型 vs 数据,定义 vs 操作
关于静态类型、动态类型、编译语言、解释语言等,有过不少讨论。其间的界限越来越不明显。
本文试图提出这样一种判断基准:在程序运行的时候,如果类型定义能够当作(元)数据来操作,那么就是动态的,解释的;反之就是静态的,编译的。
(注:这只是一种观察角度和判断标准,而不是定论!这个世界上总有一些打歪靶爱好者,迫使我加上这类的注明。不过这类人几乎从来不看文章的。估计这次也看不到这段注明。)
首先,我们来看一个动态扩展数据库表属性的例子。
假设user table有id, name, email等3个字段。我们需要动态添加某些属性 ...
Domain Pollution Resolution
域污染解除
0. Domain 名词解释
首先说明一下 Domain 在本文中的意思。
<<Domain Driven Design>> 一书,令 Domain 这个词很火。引起了广泛争论:哪些Logic 应该放在 Business Service Layer, 哪些应该放在 Domain Object里面。这类争论纷纷扬扬,最后通常都上升到哲学高度,世界观高度,认知心理学高度。如果不幸发展到极端情况,双方很可能开始相互质疑对方的智商和对世界的基本理解能力。
这个层次的Domain 纷争,不是本文所关心的话题。
我一向认为, ...
OOP/AD basic
本文是为了配合庄子的论文,做一些OO的基础知识普及工作。
当然,即使是OO基础知识,我也不一定有足够的资格来普及,主要目的还是为了相互学习,共同进步。因此,为了便于读者找出漏洞,进行批评和抨击,帮助我进步,我尽量使用朴实无华,简单易懂的语言。用咱老百姓自己的话,讲述老百姓自己的故事。
为了突出重点,加强效果,文中不免矫枉过正,提出一些片面极端的看法。
为了方便起见,我也把Procedure Oriented称为PO。
1.代码重用
评价一门语言的重要标准之一,就是代码重用程度。PO的代码重用主要有两种方式:(1) 模块重用 Module Reuse (2) 模板重用 ...
Design Pattern Practice
1.序
本文从一个简单的多列排序的例子入手,由浅入深地讲解Design Pattern(设计模式)的目的、分析和实践。
文中的例子用到Compositor Pattern和Proxy Pattern。
同时,文中的例子也提供了一类问题(条件组合问题)的解决方案。
2.问题的引入
Design Pattern(设计模式)的目标是,把共通问题中的不变部分和变化部分分离出来。不变的部分,就构成了Design Pattern(设计模式)。这一点和Framework(框架)有些象。
下面举个排序的例子,说明如何抽取问题中的不变部分。
假设一个Java类R ...
本来我尽量避免关于方法论方面的主义之争,但一些话如骨鲠在喉,不吐不快。
软件领域方法论大师的著作发人深省,通常代表着软件开发的未来模式。当然,我们在读大师之后,掩卷沉思之余,最好也保持自己的独立意见。
希望本文能够唤起一些对基本概念和基本功的重视(追逐新潮概念之余,同时也固本培源 :D)。
1. Domain Object的重新提出的背景
Domain Object并不是一个全新的概念,而是继承以前的纯面向对象开发的思路。
由于当前O/R Mapping, DAO开发结构的层次划分,导致出现了大量的纯粹数据对象。这些数据对象只带有getter, setter属性,而不具有属于自己的方法,起 ...
- 浏览: 585645 次
- 性别:

- 来自: china

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
网上银行的安全操作设计探 ...
有道理,不知道建设银行的UKey有啥用?
-- by sjz209 -
网上银行的安全操作设计探 ...
有道理,不知道建设银行的UKey有啥用?
-- by sjz209 -
网上银行的安全操作设计探 ...
1、据了解,动态口令采用的就是楼主说的第2种机制,所以动态口令发生器会有一个容错 ...
-- by jxb8901 -
谁说搞技术的没有幽默感?
yyliuliang 写道部门老大宣布放一年长假,大伙欢呼雀跃,连作三个俯卧撑表 ...
-- by hongfei3 -
谁说搞技术的没有幽默感?
幸存者 写道为什么我觉得不好笑?是因为我没有幽默感么? bingoo
-- by roger






评论排行榜