想像中理想编程语言的几个特征

代码写多了, 总希望能从繁琐的代码中挣脱出来, 编程语言的设计应为快速解决问题为目的. 不断重复的表达式应有相应的语法糖加以简化.

函数式语言设计之初不被人重视, 进入到多核化之后我也渐渐从面向对象转入到了函数式的阵营.

学习设计模式时 Java Swing 堪称各种模式的典范, 但是设计的后用起来顺手又能如何, 不过 Java Swing 的性能更是硬伤, 所以有了 SWT 那种更接近于本地化的组件库.

编程语言有两种哲学: 条条大路通罗马 与 一条大路罗马. 前者可以让语言更灵活, 但却容易走上一条不归路, 譬如 Scala; 后者让你专注于解决实际的问题, 像 Python 的语法非常简单.

填满了博客中文章概要显示中的内容, 可以说一说我希望中的语言的几个特征, 主要关注语法: 阅读全文 >>

类别: Uncategorized. 标签: . 阅读(82). 评论(0) »

如何轻松理解排序函数

这是我自最早接触 Javascript 的排序之日起一直萦绕在脑海中的问题。比如一个简单的 Javascript 数组排序

[3, 2, 4, 6, 5].sort(function(e1, e2) {
    return e1 - e2;
});

当然我那时候还不会用 JSON 和无名函数来写上面的代码。 反正经常是搞不清楚想要升序或降序时,是应该 return e1 - e2 还是 return e2 - e1 ?,没把握就试一下,总是二选一。

现在许多语言对集合排序都是使用排序函数的方式,总不想每次都琢磨不定,每次都去试。需要 TDD 时测试用例必须覆盖排序用例,但还是希望以后书写排序函数时心里有个底。当然,比如在 Java 中对集合进行排序我们可以深入到源代码来理解排序函数是如何影响元素顺序的。

简单通俗点,是否有一种浅显的方式来理解排序函数呢?待我把答案慢慢叙来,就我个人理解就两个原则: 阅读全文 >>

类别: Uncategorized. 标签: . 阅读(32). 评论(1) »

优秀程序设计的18大原则

好的编程原则跟好的系统设计原则和技术实施原则有着密切的联系。下面的这些编程原则在过去的这些年里让我成为了一名优秀的程序员,我相信,这些原则对任何一个开发人员来说,都能让他的编程能力大幅度的提高,能让他开发出可维护性更强、缺陷更少的程序。

1. 不要自我重复(DRY - Don't repeat yourself)

这也许是在编程开发这最最基本的一个信条,就是要告诉你不要出现重复的代码。我们很多的编程结构之所以存在,就是为了帮助我们消除重复(例如,循环语句,函数,类,等等)。一旦程序里开始有重复现象的出现(例如很长的表达式、一大堆的语句,但都是为了表达相同的概念),你就需要对代码进行一次新的提炼,抽象。

2. 提炼原则(Abstraction Principle)

跟“不要自我重复原则”相关,这一原则是说“程序中任何一段具有功能性的代码在源代码文件中应该唯一的存在。”

3. 保持简单(KISS - Keep it simple, stupid!)

简单化(避免复杂)永远都应该是你的头等目标。简单的程序让你写起来容易,产生的bug更少,更容易维护修改。

4. 不要开发你目前用不到的功能(Avoid Creating a YAGNI - You aren't going to need it)

除非你真正需要用到它,否则不要轻易加上那些乱七八糟用不到的功能。 阅读全文 >>

类别: Uncategorized. 标签: . 阅读(937). 评论(0) »

Mac OS X 下吾所倾爱的三个程序员编辑器

作为编程,讲救效率自然是用各种 IDE,诸如 Idea, Eclipse, NetBeans 等。但平时总也离不开一款趁手的纯文本编辑器,如阅读各种语言的代码,简单编辑。我就经常会用 Sublime 这类工具的列编辑功能,奇怪于为何 IDE 们鲜有提供列编辑的特性的。

在 Mac 下的 TextEdit 其实是一款富文本编辑器,且未给编程带来任何便利。根据本人从开始扑向 Mac OS X 平台起到现在,选择过三款程序编辑器,它们分别是 TextMate, Sublime 和 Atom,前两为付费的,最后一个是免费的。

1. TextMate

最早听说很多人喜欢用它写 Ruby 程序,也不知是不是真的. TextMate 以其卓越的 Bundle 们驰行于天下。只是最近几年来它却裹足不前了,似乎失去了前进的方向,一直稳定在 1.5.11 版本上,2.0 已经 alpha 很久了. 其间好像思考过开源,出现在了 GitHub 上 https://github.com/textmate/textmate,少有维护。 阅读全文 >>

类别: Uncategorized. 标签: , , , . 阅读(544). 评论(0) »

XLST 与 Namespace, for-each 和 apply-templates

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:msfn="http://www.footnotedpro.com/rss" exclude-result-prefixes="msxsl msfn">

    <msxsl:script implements-prefix="msfn" language="C#">
    <![CDATA[
        public string Now()
        {
           System.Globalization.CultureInfo usCulture = new System.Globalization.CultureInfo("en-US");
           return DateTime.Now.ToString();
        }
    ]]>
    </msxsl:script>
   
    <xsl:output method="xml" indent="yes"/>
    <xsl:param name="rows" select="5"/>
    <xsl:param name="linkPrefix">http://www.footnotedpro.com/assets/documents/protected/DL.aspx?fn=</xsl:param>
   
    <xsl:template match="/rss/channel">
        <rss version='2.0'
            xmlns:content='http://purl.org/rss/1.0/modules/content/'
            xmlns:dc='http://purl.org/dc/elements/1.1/'
            xmlns:atom='http://www.w3.org/2005/Atom'
            xmlns:sy='http://purl.org/rss/1.0/modules/syndication/'>
            <channel>
                <title>footnotedpro.com &#187; FootnotedPro</title>
                <atom:link href='http://www.footnotedpro.com/rss' rel='self' type='application/rss+xml' />
                <link>http://www.footnotedpro.com</link>
                <description>Michelle Leder&#039;s guide to what&#039;s hiding in SEC filings</description>
                <lastBuildDate>
                    <xsl:value-of select='msfn:Now()'/>
                </lastBuildDate>
                <generator>http://www.footnotedpro.com</generator>
                <language>en</language>
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <xsl:for-each select="item">
                    <xsl:if test="position() &lt;= $rows">
                        <item>
                            <title>
                                <xsl:value-of select="title"/>
                            </title>
                            <link>
                                <xsl:value-of select="concat($linkPrefix,PDFfile)"/>
                            </link>
                            <pubDate>
                                <xsl:value-of select="pubDate"/>
                            </pubDate>
                            <dc:creator>Michelle Leder</dc:creator>
                            <description>
                                <xsl:value-of select="description"/>
                            </description>
                            <content:encoded>
                                <xsl:value-of select="content"/>
                            </content:encoded>
                        </item>
                    </xsl:if>                     
                </xsl:for-each>
            </channel>
        </rss>
    </xsl:template>
</xsl:stylesheet>  

变为

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:msfn="http://www.footnotedpro.com/rss" exclude-result-prefixes="msxsl msfn"
    xmlns:content='http://purl.org/rss/1.0/modules/content/'
    xmlns:dc='http://purl.org/dc/elements/1.1/'
    xmlns:atom='http://www.w3.org/2005/Atom'
    xmlns:sy='http://purl.org/rss/1.0/modules/syndication/'>

    <msxsl:script implements-prefix="msfn" language="C#">
    <![CDATA[
        public string Now()
        {
           System.Globalization.CultureInfo usCulture = new System.Globalization.CultureInfo("en-US");
           return DateTime.Now.ToString();
        }
    ]]>
    </msxsl:script>
   
    <xsl:output method="xml" indent="yes"/>
    <xsl:param name="rows" select="5"/>
    <xsl:param name="linkPrefix">http://www.footnotedpro.com/assets/documents/protected/DL.aspx?fn=</xsl:param>
   
    <xsl:template match="/rss/channel">
        <rss version='2.0'>
            <channel>
                <title>footnotedpro.com &#187; FootnotedPro</title>
                <atom:link href='http://www.footnotedpro.com/rss' rel='self' type='application/rss+xml' />
                <link>http://www.footnotedpro.com</link>
                <description>Michelle Leder&#039;s guide to what&#039;s hiding in SEC filings</description>
                <lastBuildDate>
                    <xsl:value-of select='msfn:Now()'/>
                </lastBuildDate>
                <generator>http://www.footnotedpro.com</generator>
                <language>en</language>
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <xsl:apply-templates select='item'/>
            </channel>
        </rss>
    </xsl:template>
    <xsl:template match="item">
        <xsl:if test="position() &lt;= $rows">
            <item>
                <title>
                    <xsl:value-of select="title"/>
                </title>
                <link>
                    <xsl:value-of select="concat($linkPrefix,PDFfile)"/>
                </link>
                <pubDate>
                    <xsl:value-of select="pubDate"/>
                </pubDate>
                <dc:creator>Michelle Leder</dc:creator>
                <description>
                    <xsl:value-of select="description"/>
                </description>
                <content:encoded>
                    <xsl:value-of select="content"/>
                </content:encoded>
            </item>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>  

类别: Uncategorized. 阅读(44). 评论(0) »

phpLDAPadmin 安装配置讲解,通过 Web 端来管理您的 LDAP 服务器

做企业应用的也不时要与 LDAP 打交道的,例如组织架构、人员的管理,权限的分级控制等。以前管理 LDAP 都是用客户端工具 LDAP Browser 什么的,有时不甚方便。幸运的是,网上有一个现成的、功能完备的 LDAP Web 管理工具,那就是赫赫有名的 phpMyAdmin 的姊妹 phpLDAPadmin。

Web 方式的 phpLDAPadmin 利于发布,随处使用,基本上它有 LDAP Browser 客户端工具的所有功能,诸如条目管理、属性管理、导入导出、条件搜索等。还有比 LDAP Browser 所没有的 Schema 信息明细展示功能。

phpLDAPadmin 的界面截图请见:http://phpldapadmin.sourceforge.net/screenshots.php
您也可以进到 phpLDAPadmin 的 Demo 站点:http://thesmithfam.org/phpldapadmin-demo/htdocs/index.php 先睹为快。 阅读全文 >>

类别: Uncategorized. 阅读(934). 评论(0) »

用 securityfilter 实现仿容器管理的安全性

可用 HttpServletRequest.getRemoteUser() and HttpRequest.isUserInRole()

类别: Uncategorized. 阅读(51). 评论(0) »

品味 Struts2 标签中反璞归真的栈操作之美

分绍一些标签对 StackConext 的堆栈操作

类别: Uncategorized. 阅读(25). 评论(0) »

美国《独立宣言》(THE DECLARATION OF INDEPENDENCE) 原文--太伟大了

由托玛斯·杰弗逊起草,1776年7月4日美洲大陆会议上,北美原十三个英属殖民地一致通过的《独立宣言》原文:

在有关人类事务的发展过程中,当一个民族必须解除其和另一个民族之间的政治联系,并在世界各国之间依照自然法则和上帝的意旨,接受独立和平等的地位时,出于人类舆论的尊重,必须把他们不得不独立的原因予以宣布。

我们认为下面这些真理是不言而喻的:人人生而平等,造物者赋予他们若干不可剥夺的权利,其中包括生命权、自由权和追求幸福的权利。为了保障这些权利,人类才在他们之间建立政府,而政府之正当权力,是经被治理者的同意而产生的。当任何形式的政府对这些目标具破坏作用时,人民便有权力改变或废除它,以建立一个新的政府; 阅读全文 >>

类别: Uncategorized. 阅读(66). 评论(0) »

TestExecutorService 怎么终止正在执行的任务

import java.util.concurrent.*;

public class TestExecutorService {

 /**
  * @param args
  */
 public static void main(String[] args) {
  ExecutorService executorService =  Executors.newFixedThreadPool(1);
  executorService.submit(new Runnable(){
   int s = 0;
   public void run(){
    while(true){
     System.out.println("你还运行,次数:"+(s++));    
     for (int i = 0; i < 999999999; i++) {
      //延时
     }
    }
   }
  });
  
  System.out.println("关掉 executorService");
  executorService.shutdownNow();
  System.out.println(executorService.isShutdown()); //这行输出 true
  System.out.println(executorService.isTerminated());//这行却是输出 false

  //但是上面还在打印啊
 }
}


 

类别: Uncategorized. 阅读(108). 评论(0) »
Page 1 of 41234