分类 开发语言 下的文章

编译potty

之前"通过Obfuscated ssh避免时不时ssh连接不畅的问题",有人留言说在http://virustotal.com上有三款软件有误报的情况,对这个编译版本不太放心。那就自己编译好。

potty是对putty6.1的修改,使用了openssl的静态库编译的。官方版本是用vs2008编译的,下面以vs2010为例说明一下编译操作步骤。

下载potty源码。

http://www.mrhinkydink.com/potty.htm下载一份potty的windows下的源码。解压到z:\potty目录下。

下载openssl源码。

http://www.openssl.org/source/下载一份openssl。解压到z:\potty\openssl目录下。

安装Perl。

http://www.activestate.com/activeperl/downloads上下载一个perl的最新版本,安装到C盘上,注意安装时要允许加入到系统path路径中。

设置编译环境

开一个cmd窗口,切换到z:\potty\openssl目录下。运行设置vc运行环境的批处理命令vcvarsall.bat

z:\potty\openssl>c:\DevTools\MVS10\vc\vcvarsall.bat
会出现:
Setting environment for using Microsoft Visual Studio 2010 x86 tools.

再检查一下perl是否已装好:

z:\potty\openssl>perl -version

会出现类似:

This is perl 5, version 16, subversion 1 (v5.16.1) built for MSWin32-x86-multi-thread(with 1 registered patch, see perl -V for more detail)

Copyright 1987-2012, Larry Wall

这就说明perl安装好了。

编译OpenSSL。

首先创建各种Makefile。运行:

z:\potty\openssl>perl Configure VC-WIN32 no-asm --prefix=z:\potty\openssl

再运行:

ms\do_ms

开始编译OpenSSL:

nmake -f ms\nt.mak

运行测试用例,检查编译结果是否正确:

nmake -f ms\nt.mak test

输出结果的最后出现:

passed all tests

就说明一切正常。

编译potty

运行VS2010,打开

Z:\potty\WINDOWS\MSVC\PoTTy61.sln

会提示你升级工程文件,升完级后,设置potty项目,在

C/C++ --> General --> Additional Include Directoryies

中加入

Z:\potty\openssl\inc32

Linker --> General --> Additional Library Directories

中加入

Z:\potty\openssl\out32

Linker --> Input --> Additional Dependencies

中的

bufferoverflowu.lib

去掉,这是较低版本的SDK中才需要的一个库,VS2005之后就不需要这个库了。

然后Build,一切顺利的话,就可以看到

z:\potty\WINDOWS\MSVC\potty\Release\potty.exe

以上就是编译全过程。

上面的编译过程中并没有对OpenSSL做什么优化,有时间的话,也可以使用汇编来编译OpenSSL,或对编译参数调整一下,得到针对新cpu优化编译结果。

经测试,我编译的potty工作正常。

最后,上面我编译的potty上传到virusTotal上,检查,发现只有一个误报。

MarkDown编辑器ReText的源码运行手记

在Windows下,编辑MarkDown文件,其实MarkdownPad会更稳定好用一些。MarkdownPad是基于.Net 4,使用WPF4开发的。这一点可能会让很多人无爱,不过的确很好用。

ReText是款小巧实用的编辑MarkDownreStructuredText的跨平台编辑器,使用Python开发,UI界面使用PyQT。它对MarkDown和MarkDown扩展都支持得非常好,而且可以导出成PDF、HTML和ODT等格式文件。

想尝试一下ReText,可以先以源码方式运行。当然,这得先安装Python以及PyQT或PySide。

先通过

git clone git://git.code.sf.net/p/retext/git retext-git

获取ReText源码。

然后去http://sourceforge.net/projects/docutils/下份最新版的docutils,到https://launchpad.net/python-markups下份最新的python-markups,再到<https://github.com/waylan/Python-Markdown.git >下份最新的python-markdown。

安装了docutils、python-markups和python-markdown后,ReText就可以正常工作了。

运行后,会发现快捷工具栏上的按钮图标几乎都没显示出来。去http://sourceforge.net/projects/retext/files/Icons/下载一份图标集,解压放在icons目录下。

再次运行,就可以了。

最新的源码版虽然已经声称加入对PySide的支持了,不过尝试了一下,发现还是在PyQT下更稳定一些,另外,最新源码已不支持Python2.x了,需要在Python3下运行。

Google的Go(2)

这是Rob Pike的演讲稿,是对Go language在google出现和使用的情况,这里简单翻译一下,了解一下这个最新的开始流行于服务端开发的语言。内容很长,要分成好几部分了。这是第2部分。

原始链接:http://talks.golang.org/2012/splash.slide

Go at Google

SPLASH, Tucson, Oct 25, 2012

Rob Pike

Google, Inc.

今天的主题

涉及的内容主要在软件工程方面而不是语言设计

更确切地说:

  • 为软件工程服务的语言设计

简言之:

  • 语言如何去有助于软件工程

特点?

可能马上就有人要跳起来了

什么?我喜欢的功能go里没有,go太垃圾了!

这就会错过重点。

不堪回首的疼处

为什么C++或Java(至少包括这两种语言)进行大型开发很困难?

  • 缓慢的编译过程
  • 不受控制的开发依赖
  • 每个开发人员都在用语言的不同子集
  • 欠佳的编程理解(文档等方面)
  • 重复性工作
  • 更新的代价
  • 版本的扭曲(version skew)
  • 自动化麻烦(自动修改等):工具化
  • 交叉语言编译

语言的特点一般不会提到这些。

焦点

在Go的设计中,我们试图集中解决这些问题。

比如:代码结构的缩进 vs. 类C的代码结构

[python]python字符编码相关的一个问题分析

几天前看过一个问题,给了下面的代码:

#!d:/python26/python
# -*- coding: utf-8 -*-

import logging

try:
    raise Exception() # 测试中文
except:
    logging.exception("just a test.")

在python2.x下有问题,报错时显示相关代码时中文为乱码。

正常的结果应该如下:

ERROR:root:just a test.
Traceback (most recent call last):
  File "p-test-gbk.py", line 11, in <module>
    raise Exception() # 测试中文
Exception

先在sublime text 2下检查一下,其中Python.sublime-build设置如下:

{
    "cmd": ["d:/python26/python.exe", "-u", "$file"],
//  "cmd": ["f:/python3/python.exe", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "shell": "true",
    "encoding": "gbk"   
}

这个配置与"[python]打印-Hello world"中使用的是一样的。

结果自然是在sublime text 2中出错了,显示:

[Decode error - output not gbk]

- 阅读剩余部分 -

如何与指定的ntp设备校时

在Windows下,需要较搞精度的时间,而且要和一台中新创科的NTP网络时间服务器DNTS-6进行时间的同步。第一反应就是从网络上找开源的实现,一下就找到了ntpclient(http://doolittle.icarus.com/ntpclient/),这可以运行在linux以及windows的cygwin下,支持NTP 3,能够与DNTS-6进行对时。

在Cygwin下很容易就编译完成,将可执行文件ntpclient.exe以及cygwin1.dll复制出来,就可以独立运行了。

可能用到的命令参数如下:

-c count 到达对时次数时停止对时 (缺省为0,永远对时)

-d 显示对时过程信息 (可在编译时禁止)

-g goodness 当时钟误差小于某个值时停止对时(微秒,缺省为0,表示永远对时)

-h hostname 用于对时的NTP服务器

-i interval 检查时钟的间隔时间 (缺省 600秒)

-s 简单设置一次时钟 (相当于 -c 1)

这样,主控程序只需按需要的时间间隔调用ntpclient,进行一次对时操作即可。

上面只是我的一种习惯思维的操作的结果。在我实现后,突然意识到,其实Windows XP之后,就可以方便的利用Windows本来就自带有一个网络对时程序w32tm......

没关系,我们再看看怎么直接使用w32tm吧。

- 阅读剩余部分 -

Google的Go(1)

这是Rob Pike的演讲稿,是对Go language在google出现和使用的情况,这里简单翻译一下,了解一下这个最新的开始流行于服务端开发的语言。内容很长,要分成好几部分了。

原始链接:http://talks.golang.org/2012/splash.slide

Go at Google

SPLASH, Tucson, Oct 25, 2012

Rob Pike

Google, Inc.

Go是/有什么

Go:

  • 开源
  • 并发
  • 垃圾收集
  • 高效
  • 可扩展性
  • 简单
  • 有趣
  • 无聊(对一些人来说)

网站:http://golang.org

历史

2007年末开始设计

主要参与者:

Robert Griesemer, Rob Pike, Ken Thompson
后期: Ian Lance Taylor, Russ Cox

2009年11月开源

完全开发式的开发,社区很活跃。

2012年3月,Go的第一个有着稳定语言规范的版本发布,也就是Go 1。

Go在Google是怎么来的?

Go语言是Google设计开发出来用于解决Google面临的问题的。

Google面临的大问题:

  • 庞大的硬件群。

服务器数量众多,具体数量虽然没公开,但2012初被外界估计大约超过90万台服务器。

  • 庞大的软件系统。



    • 服务器上大多使用C++,此外还大量使用了Java 和 Python

    • 成千上万的软件工程师

    • 数量惊人的代码行数

    • 分布式的构建系统

    • 树状组织结构

    • 无数计算的计算机,这个我们当作适当的计算机集群

在Google,开发过程往往缓慢,丑陋。但还算有效。

Go就这么出台了

目标:

  • 消除缓慢的开发过程

  • 消除丑陋的开发过程

  • 提高效率

  • 天生/改进可扩展性

Go是由那些读写调试和维护大型软件系统的人设计的。

Go的目标不是纠结于编程语言的设计。

Go的目标是让Go的设计者们能更开心地开发。