Author: Hendry

伏案的夜

晨夏,风吹着身旁的窗户,嗒嗒作响。
我伏案而息,回想着昨夜的梦 —— 那个人,到哪里了?

风会拂去我的疲倦与困怠,一点点地,也会拂去我的年轮和腐败。
这一切都是无声的。

我看见了湖边在春日下嬉戏的孩子,柳叶飘荡。
风从山坡吹向湖边,我们背对城市广厦,只见眼前光景。

我希望风能让我变得清澈,
我希望能变成那个追风者 —— 投入你在夏的怀抱。

2017.4.27 晨

一个报了 加班 却又无心 加班 的八点三十

以前,生活充满色彩。
那时候的它就像铺满花瓣的画板,
我只是静下心,留出一抹空白,
然后随心书写那CSS的自由。

后来,他们都离去了。
我就是孤独的堂吉诃德。
保卫着身旁的幻想,
守护着四望的断壁残垣。
而生活,就像Down掉的Timer,
时间依然流逝,
可逻辑却无法执行。

我看着他,
仿佛他也看到了我一样。
他高呼理解万岁,然后独自悲伤。

生活永远不能带给我们可以备份的明天,
也无法带来能够重放的过去。
这世界无论是同步的还是异步的,
它们都已发生,唯有能做的,
就是感谢有你。

我走开,然后继续加班。

2016.6.2 一个报了加班却又无心加班的八点三十

(整理) 需求层次

整理自:http://www.cnblogs.com/zhuweisky 及 其它资料。

需求层次 理论(Maslow’s hierarchy of needs)由美国犹太裔人本主义心理学家亚伯拉罕·马斯洛(Abraham Maslow)1943年提出,是研究组织激励(motivation)时应用最广泛的理论。

马斯洛的需求金字塔分为以下几个层次。
自我实现
尊重
爱和归属感
安全需求
生理需求
Continue reading

推荐9本无码好书

向各位程序猿 推荐9本无码好书 (基本上没有代码),既可以修炼内功又可以打发时间,都非常值得阅读。

1. 《全球通史》
“欲知大道,必先为史”,这本书分为上下两册,是很多学校历史系新生的初级读物,读后发现,本书真的不枯燥,绝不是简单的历史教材,里边有很多对于具体历史问题的比对和思考,文字很生动,很耐读。

2. 《程序员修炼之道》
这本书其实很多内容在《代码大全》中都有提及,不过个人感觉算是初级讲道理读物中比较容易阅读,且容易产生共鸣的。很适合大三、大四的同学在工作、实习前阅读下,也能初窥下未来的职业发展道路。不过这种书都是最好多读几遍的,隔段时间重现再翻看下,一定会有新的收获和感悟。

3. 《编程珠玑》
这本书特别适合大二、大三同学的纠结各种算法阶段最适合的读物了,可以很好的树立初期的编程思维。这类书籍还是比较多的,另外推荐一本当年Google研究院吴军编写的《数学之美与浪潮之巅》,也算是计算机同学的必读书面了。

4. 《写给大家看的设计书》
如果你是一个前端开发(或者你是全栈开发者)想搞点艺术,那么这门就是最好的入门读物了,阅读后,你将开始重视自己代码或产品逻辑与配色、视图与用户体验的关系。
Continue reading

通过 Excel 使用 VBA 计算协方差

作为一名执著的 C# 程序员,当一位学经济的老友从国外找来,让我帮他写完 VBA 作业的时候,一开始,其实我是拒绝的。
各路VB大神,不要嘲笑在下啊,我可是足足用了一个小时才在 Excel 里到了编写 VB 代码的地方 (默认 Office 2013 的那个开发者选项是隐藏的…)
我把一夜写的代码在这里Mark一下,万一以后再有类似的VB任务也不至于抓瞎,哈哈,我是一晚上没睡觉活活憋出来的,以下代码在Excel里计算协方差。
不过话说话来,感觉各种语言都是相同的,学会一种,换成另一种也不会太恐怖。

下载这个 Excel VBA 文件:Spreadsheeting assi
Continue reading

(转载) 《火星救援》中你应该知道的5个 高可用系统故障恢复 原则

原文: http://timyang.net/architecture/martian-failure-recovery-rules/

《火星救援》是最近一部受到广泛关注的片子,讲述在一次人类登陆火星的任务中,宇航员马克·沃特尼经历了一场恶劣的风暴后,与他的机组成员失联,所有人都认为他在这次任务中丧生。然而,马克却幸运地活了下来,然而他发现自己孤单地置身于异星球。面对贫乏的生命补给,马克必须用他的聪明才智和顽强的精神存活下来,并如何寻求求救的故事。

大部分互联网系统也面临各种临时突发的故障,技术负责人及相关工程师需要及时响应故障,采取合适的手段来解决问题。因此火星救援中体现的很多原则,做法和高可用系统故障恢复是同理。

1. 故障信息的透明性原则

martian-1
Continue reading

苹果

苹果,
还剩下那被牙齿肢解后的
半个。
可能是太酸了,所以
她被人遗弃。

慢慢地,
白色果肉开始泛黄,
那黄色竟不如枯叶,
没有纹理,只有斑驳。

果皮依旧是那鲜艳的红,
可它曾包裹着的是那诱人的果香,
如今,那味道变得腐朽,
谁还愿靠近?

我不知道她今天会去哪,
但是,她的核依旧在那。
她对我说,
既然我是果实,那我一定是为了
等待下一次的新生。

An apple

2015 年度总结

时光荏苒,如果从大三时候在北京开始实习算起,这已经是我作为一个程序员的第四个年头了。重读加入现在公司以来的年终总结,感受自己的变化还是挺大的。在这里晒晒自己的心路历程,欢迎吐槽。

这是我入职第三年(刚刚过去这年的)总结(2015,有删节),2016我会更努力的成长。

 

2015 年度总结

2016年1月6日

 

从加入公司到今天,刚好是两年零五个月,时间过的很快但很充实。相比往年年终对于一年一年逝去的感慨,今年倒是更多了些平静。在一个较短的时间内,回顾这一年所发生的过往,在回忆转化为文字的过程中加以简单思考,就是下文的目的。

今年上半年,我主要在迭代和客户问题这两个方向上同时学习和工作。8月,脱离迭代开发后,专职从事客户问题和POC的处理工作。12月中旬开始,全职参加GG 2.0的初期准备工作。这一年,也尽力为Team培训了几位新人,ZZ、HH、GG、YY和SS,简单地协助其他同事辅导了TT等新人。

Continue reading

2014 年度总结

时光荏苒,如果从大三时候在北京开始实习算起,这已经是我作为一个程序员的第四个年头了。重读加入现在公司以来的年终总结,感受自己的变化还是挺大的。在这里晒晒自己的心路历程,欢迎吐槽。

这是入职第二个年头的总结(2014)。

 

2014 年度总结

201515

站在2014的年尾,回望这一年所经历过的一切,可以说,还是对得起毕业后的第一年的。这一年是我真正进入工作状态的第一年,这一年我学到了很多,无论是开发技术上、业务逻辑上,还是对工作、对自己的理解和认识上。在此,我对2014年所经历过的一些事情和感触做下总结,为的是重拾那些已经遗忘了的经历与过错,并更多的期待2015这个新的开始,这份总结写给别人,更是写给自己。

Continue reading

2013 年度总结

时光荏苒,如果从大三时候在北京开始实习算起,这已经是我作为一个程序员的第四个年头了。重读加入现在公司以来的年终总结,感受自己的变化还是挺大的。在这里晒晒自己的心路历程,欢迎吐槽。

这是刚毕业那年刚来公司时候的总结(2013)。

 

2013 年度总结

20131231

1 回首往事

2013年就要过去了,对于我来说这可能是到目前为止经历过的最波折、最重要,也是最精彩的一年。这一年充满了迷茫与抉择,但它也给我留下了希望和回忆。从选择放弃以前的工作到返回大连,从学校毕业到待业,从海投简历到加入XX。回首过去,我希望能从中学到一些东西,发现一些问题和遗忘了的目标,然后为明天努力。

一年前的今天,当我坐在办公室的电脑前准备2012年的年终总结时,我在想,这究竟是不是一份我所热爱的工作。在那里,我感觉缺少了一些可以为之奋斗并点燃自己热情的东西,我感觉不到动力。我总在想那缺少的东西究竟是什么,那可能是自由,可能是激励,可能是希望,也可能是那里太过拥挤。那时候,我需要的也许就是一个理由,有了这个理由,我就会选择离开。

在那之后,我一边实习,一边开始学习JavaScript、MongoDB和C#,我为我的毕业设计选择了这些技术。我希望能做好我的毕设,让人生最美好的四年有个好点的结局。同时,我也真的为这些技术感到着迷。我觉得技术也是可以代表思想的,走不同的技术路线其实也是在践行自己的理想。虽然那时候我的工作是基于C++的开发,但是与C++的死气沉沉相比,我感觉到的是它们的活力,我觉得用它们可以实现自己的想法,而不是被令人厌烦的礼法所约束。所以,在那个时候,我希望有机会能找一份与之相关的工作。

再后来,到了7月,我毕业了。我的女朋友跟我一样,也不希望再回到北京。于是,我终于得到了那个理由,我离开了以前的公司,回到大连,然后从毕业陷入失业。我开始在网上选工作,但是没有任何回音。那可能是因为我不会日语,也可能是因为我毕业的学校不够响亮。总之,那段时间我体会到了因为找不到工作而天天在家过周末的绝望。但这也真的算是对我的当头棒喝,让我回到了现实,就像新闻里分析就业难的原因一样,是我自己的要求和期望太高了,我应该做的是沉下心,老实点。我开始海投简历,然后开始天天祈求上天能给我一个机会,我跟自己说,我没有白白浪费那四年,可为什么会穷途末路到连工作都没有的程度呢。直到一个月以后,XX给我打来了笔试电话。我非常努力的准备笔试,虽然我所准备的东西全都没考。一周后,我加入了公司,开始了全新的旅程。感谢上天,在这儿我不光得到了工作,还有我曾经期待的一切。

Continue reading

LISP的本质 (THE NATURE OF LISP)

作者 Slava Akhmechet
译者 Alec Jang
出处: http://www.defmacro.org/ramblings/lisp.html
简介

最初在web的某些角落偶然看到有人赞美Lisp时, 我那时已经是一个颇有经验的程序员。
在我的履历上, 掌握的语言范围相当广泛, 象C++, Java, C#主流语言等等都不在话下,
我觉得我差不多知道所有的有关编程语言的事情。对待编程语言的问题上, 我觉得自己不
太会遇到什么大问题。其实我大错特错了。

我试着学了一下Lisp, 结果马上就撞了墙。我被那些范例代码吓坏了。我想很多初次接触
Lisp语言的人, 一定也有过类似的感受。Lisp的语法太次了。一个语言的发明人, 居然不
肯用心弄出一套漂亮的语法, 那谁还会愿意学它。反正, 我是确确实实被那些难看的无数
的括号搞蒙了。

Continue reading

C#: 一个方法执行超时 timeout 检查的实现

我们经常有这样的需求:如果一个方法的执行,超过了一个设定时间(timeout)就需要立即返回不再继续,这里我利用 C# 异步委托的 AsyncWaitHandle 来尽量简便的实现这一需求。

具体实现如下。注意,这里需要被调用的方法遵守 delegate TR TimeOutDelegate(T param); 形式的方法签名,如有其他需要,可以自行定制也很方便。

namespace TimeOutHelper
{
    #region using directives

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Linq;
    using System.Threading;

    #endregion using directives

    internal class Program
    {
        public delegate TR TimeOutDelegate<in T, out TR>(T param);

        private static void Main()
        {
            Dictionary<Guid, string> result;
            Console.WriteLine(TimeoutFunction.Execute(Test, "Hello, World!", out result, TimeSpan.FromSeconds(3)));
            Console.WriteLine("Hello, World!");
            Console.ReadKey();
        }

        public static Dictionary<Guid, string> Test(string sourceString)
        {
            var result = sourceString.ToDictionary(
                character => Guid.NewGuid(),
                character => character.ToString(CultureInfo.InvariantCulture));
            Thread.Sleep(4000);
            return result;
        }

        public static class TimeoutFunction
        {
            /// <summary>
            ///     Execute a method with timeout check
            /// </summary>
            /// <typeparam name="T">Target method parameter type</typeparam>
            /// <typeparam name="TR">The result type of execution</typeparam>
            /// <param name="timeoutMethod">Target method</param>
            /// <param name="param">Target method parameter</param>
            /// <param name="result">The result of execution</param>
            /// <param name="timeout">Set timeout length</param>
            /// <returns>Is timeout</returns>
            public static Boolean Execute<T, TR>(
                TimeOutDelegate<T, TR> timeoutMethod, T param, out TR result, TimeSpan timeout)
            {
                var asyncResult = timeoutMethod.BeginInvoke(param, null, null);
                if (!asyncResult.AsyncWaitHandle.WaitOne(timeout, false))
                {
                    result = default(TR);
                    return true;
                }
                result = timeoutMethod.EndInvoke(asyncResult);
                return false;
            }
        }
    }
}

IE 无法正常打开,刚启动就关闭

如果你的电脑出现了 IE 无法正常启动,总是刚一点击就自动关闭的情形。那么你可以通过以下步骤进行修改,开始 -> 运行 -> regedit ,进入注册表,在其中找到:

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer

的 Main 主键,右键单击Main主键,选择“权限”,在弹出的权限设置对话框里点“高级”按钮,在高级窗口里点击下面的“启用继承”按钮,即可。

PowerShell: 隐藏明文密码

本文描述如何加密 PowerShell 中的敏感信息,从而避免敏感信息(诸如密码)在代码中被显式的展现出来。这里我们使用 ConvertFrom-SecureString 命令来完成加密操作,需要注意的是,如果我们没有指定Key,那么,将采用基于 Windows 内置的 DPAPI 进行数据的加密。这种情况下,原文的加密和解密必须在同一台机器上,且基于同一个User去进行。

ConvertFrom-SecureString [-SecureString] <SecureString> [[-SecureKey] <SecureString> ] [ <CommonParameters>]

你可以从这里了解该命令的更多信息。

* If no key is specified, the Windows Data Protection API (DPAPI) is used to encrypt the standard string representation.
Your secret was automatically encrypted by the built-in Windows data protection API (DPAPI), using your identity and your machine as encryption key. So only you (or any process that runs on your behalf) can decipher the secret again, and only on the machine where it was encrypted.
Continue reading

Memo: 关于 Windows 10 使用的几个小提示

前几个月把单位和家里的电脑都升级到了 Windows 10 ,升级很顺利,使用起来也非常流畅。这里有几个小提示大家可以参考下:
(个人十分建议执行全新安装,通过近2个月的使用,升级版的 Windows 10 还是会出现一些奇葩问题的,比如过了一段时间 Windows Explorer 和 Microsoft Edge 经常性的自动重启,Skype、百度输入法莫名卡死等问题,但是全新安装的版本,并没有出现过这一类的问题)

1 如果是从Windows 7/8 升级至 Windows 10 ,希望删除系统盘中旧版本Windows的文件(Windows.old),可以执行如下操作:
(1) 打开“这台计算机(This PC)”, 在C:盘上点击右键,选择属性
(2) 在常规页下,点击“磁盘清理(Disk Cleanup)”,稍等片刻后,点击新页面中的”清理系统文件(Clean up system files)”按钮
(3) 勾选中“以前版本的Windows安装(Previous Windows installation(s))”,点击确认,即可。

2 在使用Windows 10的过程中,如果希望快速切换多任务桌面,可以使用快捷键
Ctrl + Win + ←/→
也可以通过
Ctrl + Win + D 来新建 多任务桌面
或者使用
Ctrl + Win + F4 来关闭 多任务桌面
Continue reading

PowerShell: 远程调用

通过本地程序调用 PowerShell 自定义脚本,我们可以有周期、计划性的执行一些扩展的操作,这在一定程度上提高了本地程序自身逻辑的扩展性。而在编写一段 PowerShell 脚本的过程中,也难免会遇到需要一段脚本在另一台计算机上远程执行的情形。例如,我们在执行一段 PowerShell 脚本时,需要向某个 AD Group 中添加一个 AD User,而这一操作需要在域控机器上才能执行,而此时,我们就会用到 PowerShell 远程调用执行代码。

在调用之前,我们需要保证 PowerShell 的远程调用设置是开启的。
1 启用远端计算机的 Windows Remote Management (WS-Management) service.
(1) 通过 services.msc 启动服务管理器
(2) 在其中找到 Windows Remote Management (WS-Management) 这一项
(3) 确定该项服务正处于运行状态,并且启动类型被设置为 Automatic

2 设定本地组策略.
(1) 通过 gpedit.msc 开启本地组策略编辑器
(2) 找到 Computer Configuration > Administrative Templates > Windows Components > Windows Remote Management (WinRM) > WinRM
Service
(3) 在右侧的项目中,双击 “Allow remote server management through WinRM”
(4) 在新弹出的窗口中,选择Enabled,从而启用策略,然后再Options的设置区域,位IPv4和IPv6 filter添加规则”*”,从而使所有IP都不受到过滤器的限制。当然,这里也可以根据具体的环境进行配置,相关配置可参考下图。
Continue reading

C#: 字符串连接 (+=) 与 StringBuilder 效率分析

在 C# 或 Java 中,我们可以使用诸如 StringBuilder, StringBuffer 等方式对大量字符串进行拼接操作。当然,我们也可以直接使用 字符串连接 (+=) 的方式进行拼接操作。但是,两种主要方式在效率上有何区别呢?我们是否需要针对这两类方式进行区别场景的使用呢?针对于此,我做了如下测试,以证明两种不同方式连接字符串的效率临界值。(关于Java中StringBuilder和StringBuffer的区别,可以参阅这篇文章

测试方法是:重复连接字符串 “Hello World!” 1次到40次,在每次连接的过程中都分别采用 String Connection (+=) 和 StringBuilder 的 Append()方法进行1000次,并分别计算出两种方法在这1000次运算过程中的获胜比率。通过多次试验,得到如下统计:

第一次:
StringBuilder Efficiency Test 1
Continue reading

SQL Server: 删除 XML 字段的某个节点

针对于 SQL Server 中的 XML 列,如何删除其中的一个 XML 节点呢?这里有两种方法。

方法1 直接通过SQL语句将目标节点设置为 null即可,直截了当,非常容易。

方法2 如下,查询后进行修改(相关操作我封装成了一个存储过程来演示,如下存储过程会从不同位置读取数据,并通过游标寻找并处理由 Guid 格式标明的目标数据)
Continue reading

ADFS 概念与基本开发介绍 (1)

(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系 me@nap7.com

ADFS 相关开发技术的中文资料相对匮乏,之前再弄这个东西的时候搞的比较辛苦,因此总结此文档,以解后人之忧。

本文会首先介绍与联合身份验证有关的概念及相关的系统设计意图,随后会对 ADFS 联合身份验证的配置过程、结构及处理流程进行阐述。然后会基于已有的系统提出一个支持多 ADFS 联合身份验证的改进实例,并对其结构及处理流程进行阐述。最后会对开发过程中所遭遇的一些问题进行介绍。真诚希望本文能够帮助读者较快地了解联合身份验证的相关知识。

一 ADFS 基本概念与设计意图

1 基本概念阐述

1.1 联合身份验证

联合身份验证(Federated Identity)是一种用户身份的验证方式,这种验证方式通过把用户身份的验证过程与被该用户访问的服务提供商(SP,Service Provider,如我们自己的站点)进行逻辑分离,在保证用户身份信息被隔离在用户所属系统的内部的同时,为受信任的服务提供商提供所需要的用户信息。
当服务提供商需要对用户的身份进行验证时,会将相关的验证过程转交给身份验证提供方(IdP,Identity Provider,如AvePoint域的 AD FS 验证服务),当用户经由身份验证提供方成功登录后,身份验证提供方会将用户的身份验证凭据和用户相关的信息返还给服务提供商,从而实现服务提供商对于用户身份的验证,以及对于用户信息获取。
常见的联合身份验证的实现有SAML、OAuth、OpenID等方式,本文主要介绍的是基于Claims和SAML 2.0的 AD FS 联合身份验证。在基于Claims的联合身份验证的过程中,当身份验证提供方完成对于用户身份的验证,返还用户的相关信息时,其数据信息实体被称之为令牌(Token),其中的相关信息字段被称为声明(Claims)。令牌保证了用户身份的真实性,并包含了实用信息,其结构如下图所示。

ADFS_Claims
Continue reading