自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (4)
  • 收藏
  • 关注

原创 左右摆练习的一点感悟

先声明,这个感悟没有和田老师确认过。只是自己突然想到的。也许不正确,欢迎批评。一直寻找左右摆中的空的那个点和发放的结合时机。究竟空在哪里?假定双脚开立,身体重心落在两脚中间,身体挺直。现在1.身体向左微转2.此时松腰,曲膝,形成左侧身体的空。注意,动作幅度很小。3.两个手臂自然也开始向左翻转。4.由于2的松空,左腿和身体就像被压扁的弹簧,蓄劲阶段自然完成。发放就很简单了,左腿蹬直,腰向右转,手臂向

2012-12-31 00:20:39 3372

原创 用Clojure编写REST service 四 读取配置文件

最好的配置文件写法是采用clj文件,下面先把前面的a.xml文件改成a.clj文件,内容如下:{:mongodb "localhost" :listen_port 7777 :login_timeout 200 :check_timeout 200}这里定义了一个map。注意,localhost是字符串,必须用双引号。这里用空格分开每个key/value组成的pair.在test.clj文件中添加

2012-12-30 21:29:18 3326

原创 用Clojure编写REST service 三 返回JSON

前面的REST API还要继续改进,因为Ajax调用通常都需要JSON格式的响应,所以修改test.clj文件如下:(ns my-website.rest.test (:require [noir.response :as response]) (:use [noir.core :only [defpage]]))(defpage "/rest/:id" {:keys [id]} (r

2012-12-29 21:09:24 3395

原创 用Clojure编写REST service 二 Noir创建Rest API

前面一节介绍了Noir如何非常方便的创建一个web app,但是我的实际一个项目的需求中只需要REST API开发,页面部分都交给了html和Javascript,并不需要Noir在后台渲染网页。同样无需重新启动程序,在src目录下创建rest目录,里面有一个test.clj文件:$ tree.├── models├── rest│   └── test.clj├── server.cl

2012-12-29 20:05:52 3653

原创 用Clojure编写REST service 一 Noir创建web app

写一个真正的互联网应用,才可以观察Clojure的威力。本文使用Noir框架,参考官方站点:http://www.webnoir.org/执行三行命令:lein new noir my-websitecd my-websitelein run也可以在lein run命令前运行lein deps命令。国内网络下载依赖比较痛苦,还好用了proxy,试了好多次,web应用的所有java依赖才下载完成

2012-12-29 18:14:19 3908

原创 Clojure语言九:for循环

宏for可以支持循环下面继续前面的xml的例子,演示如何用for遍历xml-seq返回的sequence.user=> (for [x r] (println "^" x))(^ {:tag :service, :attrs nil, :content [{:tag :mongodb, :attrs nil, :content [{:tag :uri, :attrs nil, :content

2012-12-28 18:28:21 4375

原创 Clojure语言八:Sequence

sequence定义sequence不是一般的list,实际上实现了ISeq接口,ISeq接口定义如下:package clojure.lang;/** * A persistent, functional, sequence interface * * ISeqs are immutable values, i.e. neither first(), nor rest() chang

2012-12-28 12:38:43 2836

原创 Clojure语言七:I/O

对应stdin, stdout和stderr, Clojure默认提供了*in*, *out*和*err* 三个symbols与之对应。可以使用binding宏进行重定向。比如下面的例子将*out* 重定向到文件中:user=> (binding [*out* (java.io.FileWriter. "/home/chenshu/tt")] (println "Write to tt.") (f

2012-12-28 10:50:42 3400

原创 Clojure语言六:def & var

Clojure提供了一种函数和宏之外的操作形式,special form. 数量有限,并且不是Clojure语言本身实现的。主要是下面几个:catch,def, do, dot ('.'), finally, fn, if, let, loop, monitor-enter, monitor-exit, new, quote, recur, set!, throw, try 和 var.完整文档请

2012-12-28 09:55:43 4669

原创 Clojure语言五:StructMap

参考官方文档:http://clojure.org/data_structures很多自定义的map拥有部分或者全部相同的keys,将这些相同的keys抽出来定义成StructMap类型,可以提升性能,节省内存。下面这篇中文文档写的非常好,推荐,我的例子来自于它:http://xumingming.sinaapp.com/302/clojure-functional-programming-for

2012-12-27 20:32:53 3196

原创 Clojure语言四:解析XML

现在假定有一个xml文件内容如下: localhost 7777 200 200 Clojure提供了clojure.xml来解析xml文件。启动REPL会话,lein repl输入下面的命令:user=> (require 'clojure.xml)niluser=> (clojure.xml/parse "/home/che

2012-12-27 16:31:55 4152

原创 Clojure语言三:容器

map{:a 1 :b 2}用{ } 括起来,key都由:开头,每对key/value中间用空格分开,也可以用,分开, ,被认为等价于一个空格vector用[ ] 括起来的,比如:[1 2 3]数组中的每个元素之间用空格分开set也使用{ }括起来,但是前面多一个#符号#{:a :b :c}同时没有key,只有value,而且形如:valuelist还有一个最常见的list,( )括起来。LISP

2012-12-27 16:23:16 2680

原创 Clojure语言二:Literal

Literal中文可能应该是字面常量。字符串如果要表示字符串的话,应该用双引号括起来,比如"hello,world", 允许跨多行,并且可以使用Java的escape characters. 参考:http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.6nilnil相当于Java中的null,代表没有值,如果用在条

2012-12-27 10:13:57 2879

原创 Clojure语言一:Symbol

Symbol书写方式:1.开头不能是数字2.之后可以是文字或数字和 *, +, !, -, _, ?3./ 是特殊字符,在Symbol中只能出现一次,通常/左边是namespace。比如:my-namespace/foo。4. . 也是特殊字符,可以出现在Symbol中多次。比如:java.util.BitSet。5. : 可以用在Symbol中多次,但是不能连续6. .开头或者结尾的Symbol

2012-12-27 09:51:39 3633

原创 Emacs 配置Clojure开发环境一 clojure-mode

发现Clojure太晚了,遗憾的是我是个很不错的Java程序员,同时还擅长Emacs, 对于lisp比较熟悉。居然不知道Clojure? 错过了多少青春年华。亡羊补牢,为时未晚。现在开始吧。clojure-mode提供了基本的语法高亮和缩进,很基本,但是必不可少。首先下载clojure-mode.el文件,下载地址:https://raw.github.com/technomancy/clojur

2012-12-26 18:25:50 5921 4

原创 用Leiningen创建第一个Clojure工程四

这节介绍如何将Clojure程序打包成一个可以执行的standalone Java程序。也就是所有的依赖都已经在jar包中,并且Main-Class manifest 也被正确设置。首先修改代码core.clj:(ns project1.core (:gen-class))(defn -main "I don't do a whole lot." [& args] (printl

2012-12-26 18:22:59 3465

原创 用Leiningen创建第一个Clojure工程三

现在来看一下前面译文中碰到的代码:第一个是nil, 和Java的null值相同,和false一样可以表达条件判断不为true的情况。下面是解释:nilnil is a possible value of any data type in Clojure. nil has the same value as Java null. The Clojure conditional system is

2012-12-26 17:15:47 2955

原创 用Leiningen创建第一个Clojure工程二

在project1工程文件中添加一个clj-http依赖:(defproject project1 "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "Eclipse Public License" :u

2012-12-26 15:50:31 4009

原创 用Leiningen创建第一个Clojure工程一

本文内容来自:https://github.com/technomancy/leiningen/blob/preview/doc/TUTORIAL.md不过只描述最简单的部分,不会冗长而让人知难而退。运行下面的命令,就可创建第一个工程$ lein new project1Generating a project called project1 based on the 'default' tem

2012-12-25 21:02:22 5473

原创 Leiningen 安装

Leiningen是一个Clojure项目管理工具。安装过程如下:1. 下载lein脚本https://raw.github.com/technomancy/leiningen/preview/bin/lein2. 复制到/usr/bin目录下,并允许执行mv lein /usr/bin/root@chenshu-yangzhou-home:~/Downloads# chmod +x /usr/

2012-12-25 17:19:29 13194

原创 Clojure编程环境安装

不管是用什么开发环境,先要熟悉基本的命令行的使用方式。本文参考自官方站点:http://clojure.org/downloads首先确保已经安装了JDK5以上版本。然后下载Clojure1.4版本的release包: http://repo1.maven.org/maven2/org/clojure/clojure/1.4.0/clojure-1.4.0.zip解压后,进入clojure-1.4

2012-12-25 14:49:06 4936

转载 深入理解按位异或运算符

http://kapok.blog.51cto.com/517862/129941

2012-12-24 15:11:14 2750

原创 Ubuntu终端使用的proxy的设置

在你的当前用户下的配置文件,比如~/.bashrc中添加几行:export http_proxy=http://proxy.yourcompany.com:8081/export ftp_proxy=http://proxy.yourcompany.com:8081/export https_proxy=http://proxy.yourcompany.com:8081/source ~/.b

2012-12-19 13:08:39 20677 1

原创 用RequireJS编写JavaScript模块

模块化编写JavaScript,在web前端程序不断扩大的时候,是一个很好的重构技术。下面的例子有两个模块,artDialog模块依赖jquery和jquery.artDialog库,提供了弹出错误对话框的功能。require.config({ paths: { "jquery": "../thirdParty/jquery-1.8.0.min", "jquery.artDialog":

2012-12-17 22:01:14 3840 3

原创 复用jquery的ajax调用模块

每次都写一堆.ajax,真的很麻烦。因此封装在一个模块中比较好。第一,ajax调用出错时,自动弹出错误对话框,对话框使用的artDialog。第二,提供基本的post,get简单调用方式。参数有限,适合就好。第三,支持中英文。下面是我的代码,大家可以自己扩充:(function (window, document, undefined) { "use strict"; window.ajaxC

2012-12-15 19:04:08 5011

原创 RequireJS管理js文件依赖示例

在使用RequireJS管理依赖之前,需要在html页面上手动引入一堆js文件,要注意依赖顺序。这倒没什么,最关键的是我认为html文件中搞这么多东西显得凌乱不堪,而且会影响web美工的工作。现在看看RequireJS带来的整洁的特点:下面有个html页面: configuration 最有一个script语句引入了require.js文件,并且在d

2012-12-13 16:02:47 6065

原创 enable_share_from_this功能介绍

这个类很有意思,让一个被shared_ptr管理生命周期的类能够在自己的成员函数内部访问shared_ptr。有点绕。举个例子,下面的代码在函数f内部通过this构造了shared_ptr对象,然后打印x_的值。class B {public: B(): x_(4) { cout << "B::B()" << endl; } ~B() {

2012-12-11 15:07:35 8912

原创 weak_ptr解除循环引用

先看一下shared_ptr的正确用法:class A {public: A() { cout << "A::A()" << endl; } ~A() { cout << "A::~A()" << endl; } shared_ptr b;};class B {public: B() {

2012-12-11 10:14:09 4372

原创 weak_ptr的构造函数

weak_ptr是用来解决shared_ptr的循环引用问题的。先看看如何构造weak_ptr:int main(int argc, char** argv) { shared_ptr p(new int(5)); weak_ptr q(p); weak_ptr x; weak_ptr y(new int(6));最后一个创建语句编译报错,因为w

2012-12-10 22:45:54 4713

原创 如果喜欢我的文章就请点击里面的链接, 投我一票!

http://vote.blog.csdn.net/item/blogstar/sheismylife感谢支持!

2012-12-10 21:48:45 2476

原创 scoped_ptr

先看一个简单的例子:#include using namespace std;#include using namespace boost;class A {public: A() { cout << "A::A()" << endl; } ~A() { cout << "A::~A()" << endl; }

2012-12-10 15:19:26 3288

原创 checked_delete提升安全性

boost提供了一个安全的用于delete模板函数,在文件checked_delete.hpp中:template inline void checked_delete(T * x){ // intentionally complex - simplification causes regressions typedef char type_must_be_complete[ s

2012-12-10 15:09:35 4994

原创 noncopyable

如果自己设计的一个类,不想支持复制操作,一般需要将copy constructor和copy assignment声明为private.例子:#include #include using namespace std;class A {public: A(int x = 0): x_(x) { } int X() const

2012-12-09 20:36:29 6119 1

原创 function object研究之十九 bind

终于到了最后一篇(至少目前我认为是最后一篇) vector::iterator itor = std::find_if(v.begin(), v.end(), boost::bind(Foo, _1));上面的代码find_if的第三个参数是bind的返回值,看一下bind定义:template _bi::bind_t::type> BOOST_BIND(F

2012-12-08 20:53:22 2592

原创 function object研究之十八 bind_t

bind_t模板定义在bind.hpp中:#ifndef BOOST_NO_VOID_RETURNStemplate class bind_t{public: typedef bind_t this_type; bind_t(F f, L const & l): f_(f), l_(l) {}#define BOOST_BIND_RETURN return#inc

2012-12-08 20:42:49 2875 1

原创 function object研究之十七 list_av_N

已经走了好远好远,现在开始回到我们的目标list_av_N模板:template struct list_av_1{ typedef typename add_value::type B1; typedef list1 type;};template struct list_av_2{ typedef typename add_value::type B1;

2012-12-08 16:01:19 2408

原创 function object研究之十六 listN分析

list2 通过继承storage2来包含两个成员a1_和a2_struct logical_and;struct logical_or;template class list2: private storage2{private: typedef storage2 base_type;public: list2( A1 a1, A2 a2 ): base_typ

2012-12-08 15:50:11 2357

原创 function object研究之十五 list1分析

首先看一下bind.hpp中的list0模板定义:class list0{public: list0() {} template T & operator[] (_bi::value & v) const { return v.get(); } template T const & operator[] (_bi::value const & v) const {

2012-12-08 15:44:18 2589 1

原创 function object研究之十四 unwrap

template struct unwrapper{ static inline F & unwrap( F & f, long ) { return f; } template static inline F2 & unwrap( reference_wrapper rf, int ) { return rf.get()

2012-12-08 14:52:47 3020

原创 function object研究之十三 result_traits

result_traits模板定义在bind.hpp中,属于_bi namespace中。// result_traitstemplate struct result_traits{ typedef R type;};#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCT

2012-12-08 14:45:24 2822

JSF2自定义组件编程系列 第五部分 源代码

package composite component into jar maven3 jsf2 UBuntu glassfishv3.0.1 Emacs JDEE

2011-01-06

JSF2 example project

一个我自己用的JSF2的模板工程,使用maven-glassfish-plugin,mybatis,logback。

2011-01-03

用UBuntu开发OpenGL程序8

摄像头360度旋转示例 开发平台,UBuntu,NetBeans6.8

2010-02-24

用UBuntu开发OpenGL程序6 源代码

文章附带源代码,NetBeans6.8工程,UBuntu系统

2010-02-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除