javascript 回文字符串判断

function isReverseString(str){
return str != null && str == str.split('').reverse().join('');
}

Linux I/O Redirection

第一种方式最常见,就是直接的重定向
ls > lsout.txt 或者ls 1>lsout.txt
如果知道lsout.txt的fd值比如fd=5, ls >&5和ls 1>&5是一样的效果
需要注意的是重定向的顺序,比如我们想把stdout和stderr都重定向到/dev/null,我们必须
ls >/dev/null 2>&1
如果我们写成
ls 2&>1 >/dev/null
那么只有stdout会被重定向到/dev/null,stderr仍然重定向到console屏幕输出
或者简单的写做ls &>/dev/null, 这种写法是从bash 4后支持,同时重定向stdout和stderr到/dev/null
整个程序保持silient,一般用于某种cron的服务,它有自己的log文件去记录执行过程。

第二种方式用exec命令,exec命令就算是生个一个数字的文件描述符并把它与某个要用的文件关联起来。
exec >out.txt 或者exec 1>out.txt
当用这种方式的时候,一般完成任务后要回复默认,所以常见的脚本是下面这样子,
exec 5>&1 // 用fd=5的文件保存原来stdout的fd
exec >out.txt
ls -al
exec 1>&5 5>&- //恢复stdout,然后释放临时的fd

Kerberos协议

1. 用户发一个 请求到Kerberos Domain Controller,windows的Domain Controller是支持Kerberos协议的, 一般是username@domain.com

2. KDC收到后,产生一个ticket,这个ticket已经被加密了,只有KDC知道怎么解密

3. 然后KDC再把这个ticket用用户的密码去加密

4. KDC把加过密的ticket发还给client

5. client用输入的密码尝试去解密加过密的ticket,如果密码是对的,就会得到一个有效的ticket

6. 以后每一次,这个被解密以后的ticket都会被发到KDC去验证,只有KDC知道如何去解释这个ticket,因为这个ticket本身在第2步已经被加密了

很赞的24节气图片

中国24节气

投到HP Technical Conference的一篇论文

离开学校太久了,一篇水paper写了这么久。A new Approach to UI Automation based on Optical Character Recognition

HBase的物理模型

上一篇讲了HBase的逻辑模型,这一篇准备从大体上讲一下HBase的物理模型,首先简单来说,HBase由一个Master server和多个Region server组成,在所有的region server中有一个server被称为Root Region Server,它的地址一般保存在一个zookeeper集群上,Master将通过读取zookeeper来获得这个地址,Root Server上保存着region信息都是关于Meta table的,逻辑上像一个内存的Map,从另一个角度上讲他也是一个普通的HBase表,

Map<.meta.,table name,created timestamp, region server address>

当从上一步得到region的信息后,可以进一步的访问得到的region sever,这些server也被称为Meta Region Server,这些server上保存的类似下面的结构,

Map<table name,start key,created timestamp, region server address>

到了这一步,我们才真正找到了给定一个table和一个key,这个数据究竟在哪个region server上。

HBase的逻辑模型

Map<table,SortedMap<key,Map<ColumnFamily,SortedMap<column,SortedList>>>>

HBase中每一个table可以看成一个有序的Key-Vlaue Map,第一个SortedMap描述这样的结构,每一个key值对应着一个Map,Map里的每一个key代表着一个Column Family,value是一个SortedMap按照Column名字的binary compare排序,Value就是一个SortedList按照Timestamp排序,最后更新的排在最前面。HBase Definitive Guid p20把第二个Map抽象成List,似乎暗示寻找Column Family需要线性遍历,其实HBase是直接找到对应Column Family文件夹,这也是为什么Column Family的名字一定要用printable的原因,它受制于文件系统,所以用Map更合适。

C# programming change Screen Resolution

        enum DMDO
        {
            DEFAULT = 0,
            D90 = 1,
            D180 = 2,
            D270 = 3
        }
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        struct DEVMODE
        {
            public const int DM_DISPLAYFREQUENCY = 0x400000;
            public const int DM_PELSWIDTH = 0x80000;
            public const int DM_PELSHEIGHT = 0x100000;
            private const int CCHDEVICENAME = 32;
            private const int CCHFORMNAME = 32;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHDEVICENAME)]
            public string dmDeviceName;
            public short dmSpecVersion;
            public short dmDriverVersion;
            public short dmSize;
            public short dmDriverExtra;
            public int dmFields;
            public int dmPositionX;
            public int dmPositionY;
            public DMDO dmDisplayOrientation;
            public int dmDisplayFixedOutput;
            public short dmColor;
            public short dmDuplex;
            public short dmYResolution;
            public short dmTTOption;
            public short dmCollate;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHFORMNAME)]
            public string dmFormName;
            public short dmLogPixels;
            public int dmBitsPerPel;
            public int dmPelsWidth;
            public int dmPelsHeight;
            public int dmDisplayFlags;
            public int dmDisplayFrequency;
            public int dmICMMethod;
            public int dmICMIntent;
            public int dmMediaType;
            public int dmDitherType;
            public int dmReserved1;
            public int dmReserved2;
            public int dmPanningWidth;
            public int dmPanningHeight;
        } 
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern int ChangeDisplaySettings([In] ref DEVMODE lpDevMode, int dwFlags); 
        public static void SetScreenResolution(int width, int height)
        {
            long RetVal = 0;
            DEVMODE dm = new DEVMODE();
            dm.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
            dm.dmPelsWidth = width;
            dm.dmPelsHeight = height;
            dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT;
            RetVal = ChangeDisplaySettings(ref dm, 0);
        }

怎么跨进程得到IE的IHTMLDocument2接口

两种方法,
1. 利用.Net本身的ShellWindows接口和InternetExplorer接口,

ShellWindows windows = new ShellWindowsClass();
IWebBrowser2 ie = null;
foreach (InternetExplorer tmpIE in windows)
{
    if (tmpIE.FullName.EndsWith("iexplore.exe", true, null))
    {
       ie = tmpIE;
    }
}
IHTMLDocument2 doc = ie.Document;

2. 利用一个Windows消息,WM_HTML_GETOBJECT,调用Windows API ObjectFromLresult

lMsg = SUIWinAPIs.RegisterWindowMessage("WM_HTML_GETOBJECT");
SUIWinAPIs.SendMessageTimeout(window.WindowHandle, lMsg, IntPtr.Zero, IntPtr.Zero, SUIWinAPIs.SendMessageTimeoutFlags.SMTO_ABORTIFHUNG, 1000, out lResult);
if (lResult != IntPtr.Zero)
{
    htmlDocument = (IHTMLDocument2)SUIWinAPIs.ObjectFromLresult(lResult,typeof(IHTMLDocument).GUID, IntPtr.Zero);
}

小说的作用

      一个发生在自己身上的奇怪变化——随着年龄的增加,早些年不喜好的小说,电影却越来越看的有趣,读的喜欢,比如鲁迅的文章,比如最近在读的《胡适文选》,又在读的《围城》,《挪威的森林》,《转吧,这伟大的世界》,亦越来越不喜欢“大众化”的作品,比如《山楂树之恋》,《金陵十三钗》,虽然严歌苓的叙事水平很好,虽然会感动的流泪,但读完也就完了,心里再没那种拾起来重读的欲望,从内心来说,我自己觉得这种改变并不是为了标榜所谓的与众不同——莫装逼,装逼遭雷劈,这我还是懂的。

      今天看到 让不安的人感到安慰,让安逸的人感到不安 这篇文章,我非常认真的把其中的一段话一字一句的敲在这里,让我想起了初中的时候我们像完任务一样的——每周摘抄几篇“华丽的美文”,边页还煞费功夫的装饰上小花,小草,然后供老师批改,但一个十几岁的孩子能指望什么心灵上的共鸣呢?

      好的小说,它们的任务就是让不安的人感到安慰,让安逸的人感到不安。我想,严肃小说的主要目的之一就是让读者——那些和我们所有人一样被孤独地放逐在自己 的脑壳里的人——提供一种能够接近其它自我的想像通道。作为人类的一员,忍受痛苦折磨是我们活在这个世上无法逃脱的一项内容,所以我们欣赏艺术作品的主要 原因之一就是体验痛苦,当然,那是一种可以感同身受、作为替代经验的“具有普遍性”的痛苦。在真实世界里我们永远都是独自受苦,我们无法真正彻头彻尾地体 验他人的痛苦。但是,假如我们读了一篇小说,而这篇小说让我们对书中虚构人物的痛苦产生了某种共鸣,那么,这种经验可能会坚固我们的信念:别人也会对我的 痛苦产生共鸣。这种体验具有滋养和救赎的效果,我们内心深处的孤独因此而减轻。道理可能就是这么简单。——大卫•福斯特•华莱士