本站已启用新域名 yanbin.blog

本站已启用新域名 yanbin.blog, 博客链接已更新为 https://yanbin.blog,  完全脱离了主流域名后缀了。其实也是不得已而为之,毕竟  unmi.cc 相伴多年。在接下来的一个多月里新老域名都同时有效,已作 301 重定向,希望搜索引擎能尽快切换过来。届时 unmi.cc 将会失效,也许是一个月,也许是永远,又将为互联网创建不少死链接。

本站自 2010 年独立创建以来,一直用的就是 unmi.cc 这个域名,从 bloghost.cn 上购买的。由于后来域名都是在 GoDaddy 管理的,所以想着域名 unmi.cc 转到一块进行管理。同时也是为了防备着国内互联网公司不光在主机服务上设限制,也可能会在域名上作起文章来。

于是试图联系 bloghost.cn, 于是便是中国特色了,假若要从 bloghost.cn 买新服务,他们还算和气,但想从他们那儿转出域名,没门。看他们的网站还号称专业

别一不小心反而给他们做了个广告,其实是真不值得信赖的。他们网站上的联系方式只有 E-mail 和几个 IM 聊天号,没有电话 阅读全文 >>

类别: Uncategorized. 标签: . 阅读(41). 评论(2) »

unmi.cc 博客大事记

写下此篇流水纯粹是为了重拾那些零星的记忆,只能建立起一个模糊的脉络,找不回具体的时间点了,现在也是试着能否从某些日志里寻回些线索来。本篇日志最早创建于 2014 年 2 月份,中间偶有修改,却一直在草稿箱里静静的躺着。终于又时隔多年首次放出一篇非技术文出来。

1. 开始的开始,2001 年工作起,进入一个几乎完全陌生的程序世界。为了奋力从大海洋中汲取营养,大跃进的方式学习,并坚持在笔记本上面现在看来像是抄写一样的记笔记,不觉几年功夫,工工整整,满满的记载了四五本笔记本。还有看到那些好的东西也爱打印下来,其实打印出来的东西与它在网络上是一回事,没完整看的还是没看完,写下来了可不一样。这样记笔记的习惯其实也是工作之后的事情,上学期间最爱在课本上记东西。

2. 到后来是网络的盛行,也是信息量的爆炸的时代,再系统再全的书籍也无法与 Google 相比了。所以大概是 2005 年想到了在 QQ 空间里记了三五篇,一块娱乐之地上记录这些东西格调十分不搭。

3. 找到了第一个真正意义上的 BSP,那就是 blogcn.com,它现在完全变样了。QQ 上的几篇只需要复制到编辑框保存就行,那应该是  2006 年的事情。blogcn 是个综合性的 BSP,不好玩,代码高亮用工具保存成的带样式的 HTML 代码,好像也只在这里折腾了一年多时光,到  2007 吧,继续寻租。 阅读全文 >>

类别: Uncategorized. 标签: . 阅读(118). 评论(4) »

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

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

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

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

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

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

类别: Uncategorized. 标签: . 阅读(95). 评论(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. 标签: . 阅读(34). 评论(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. 标签: . 阅读(953). 评论(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. 标签: , , , . 阅读(604). 评论(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. 阅读(48). 评论(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. 阅读(1,698). 评论(0) »

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

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

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

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

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

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