心随所致,梦想为开。Follow the Dreams & Heart.
为TAR写了一个Python的接口插件tar_pytar
TAR(Type And Run)是我一直以来所用的快速启动软件,最喜欢的是它那个快捷键呼出的超级简洁的命令行,而且TAR支持自动提取系统中已经注册的别名,比如excel就可以打开excel,mspaint打开画图。另外TAR支持插件,最常用的就是tar_math,可以对输入命令行的计算式进行计算,给出结果。
当然tar_math也存在缺点,那就是对大整数不支持,而且函数也不够丰富。另外还想增加一个查字典的功能。于是决定给TAR做个插件,取名叫tar_pytar。tar_pytar不只是个插件,而是一个python的接口插件。有了这个插件之后,就可以直接用python给TAR增加功能,而不是重新编译。
官方网站上有插件接口文件找不到了,于是给作者-=GaLaN=-发邮件要来了接口。TAR是拿Delphi写的,不过没关系。
时间紧张,只说明一下tar_pytar通过python接口提供的功能:
- 完整的math功能,完全可以取代tar_math。因为背后是python嘛。
- 词典功能,输入查询的英文单词,可以返回中文解释。(从dict.cn查询,同样感谢python的强大)
以后:
- 作为一个工作的中心,就是一些人对待emacs/tc的态度。
| Print article | This entry was posted by hamo on 2009-02-27 at 09:04, and is filed under 技术讨论. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |
NOSQL数据库Kyoto Cabinet使用及VS2008编译
about 6 days ago - No comments
非关系数据库在现在网络以及一些特殊应用中逐渐被接受和认可,其中Kyoto Cabinet是其中的佼佼者。 Kyoto Cabinet是跨平台的NOSQL数据库,支持Linux/Windows等平台,可以以静态库或者动态库形式使用,遵循GPL协议。 Kyoto Cabinet支持多种数据存储方式,包括内存型与文件型。 内存型包括ProtoHashDB、ProtoTreeDB、StashDB、CacheDB、GrassDB,文件型包括HashDB、TreeDB、DirDB、ForestDB、TextDB。另外PolyDB可以动态绑定上述各种数据库形式。具体的规格参数以及性能可以参考官方文档http://fallabs.com/kyotocabinet/spex.html#features。 Kyoto Cabinet官方提供了makefile,可以直接在windows平台上编译。但由于使用了ISO C9x的标准,官方默认使用VS2010,如果使用vs2008编译,需要手动修改几个地方: (1) 补充stdint.h头文件(http://msinttypes.googlecode.com/svn/trunk/stdint.h) (2) std空间中的unordered_map,hash,regexsmatch等位于std::tr1空间 (3) 修改VCmakefile, VCPATH = C:\Program Files\Microsoft Visual Studio 9.0\VCSDKPATH = C:\Program Files\Microsoft SDKs\Windows\v6.0A 性能测试后续再补充。
2011年专业技术回顾-Q4
about 1 month ago - No comments
2011年专业技术回顾-Q1 2011年专业技术回顾-Q2 2011年专业技术回顾-Q3 10. 2011年10月 国庆节只休息了3天,4号上班。 10月6日,乔布斯走了,一个传奇。 在9月的时候,有很多的进展。经过了地毯式的测试,有限元这一部分功能基本上完善,也很稳定。后面基本上是专题性质的专项计算的深入调优,包括了施工模拟分析、随机活荷载不利布置分析、局部人防模型分析,整体上不错。 其他的内容大体上有这几个,都做得非常好。 一个是上部结构刚度传递到基础计算中,这一块涉及到上部结构和基础两个模型的计算,我们做得非常巧妙,很智能。上部刚度的凝聚支持动态的凝聚参数判断,对于超大底盘的结构,能动态减少出口数量,在牺牲较小精度的条件下大量减少计算量。 在基础模型计算,也用了了很妙的机制,进行上部刚度矩阵凝聚结果的自动拆分为合适的MATRIX单元。 第二个是有限元程序自动支持进程内计算与子进程计算,可以混用。这样可以隔离一些管理和内存上的问题。两种模式下的进度log,数据管理等都完全不需要变化,这里又再一次很骄傲地受益于精良的程序架构。子进程方式下采用异步的log控制器,而且支持很先进的中断计算。 还有一个,在ICF中增加了一种模式,称为Transaction。 和经典的数据库一致,在开启Transaction后,读写性能会大幅度提高,而且Transaction是自治的,只需要开启关闭,其他的不需要有任何变化。 然后开始进行大规模题目的测试,上限已经达到100w自由度,很领先。 ——————————— 10月也是一个很好的月份,都很开心。 11. 2011年11月 这个月还是测试,测试,不提。 这个月又被要求加一个新的功能,基础计算中后浇带的模拟计算,很罗嗦。但是我们有先进的储备,死活单元+自动单元分组,很简单的处理就好了,抽象了一个局部模型分析出来,取名PartialModelAnalysis,很稳定。 然后还是继续改进,改进无止境。重构了下命令行参数的解析,定义通用的规则,后面的增加参数也不用逐个解析。 ICF逐渐成为了后处理的瓶颈,查到原因是频繁的缓冲交换,于是增加了一个多并发的Turbo模式,根据系统内存智能适应,效果很好。 目标总是一步一步被提高,从最初的要求能计算30w自由度,逐渐被要求到50w、70w、100w。而且随着多塔的要求,还要适应越来越多的振型。原先的有些设计是针对50w的优化设计,100w再加100个振型是不能承受之重。好在,谁让咱们的设计牛呢。加入内存映射,ICF同步支持,只需要局部的小量代码就可以了。 11月就这么多啰嗦事情。相对前两个月来说,这个月有时候并不是非常开心,难免有些低谷起伏,但是我是小强,我喜欢向前,喜欢努力,加油。 12. 2011年12月 资源是一点一点省出来的,就像钱要开源,更要节流。 除去优化之外,本月逐渐增加竖向地震的计算,这一部分由于以前糟糕的代码,加一点东西都会引入错误和不兼容。找到一个肯动脑筋水平又好的人真的很难很难。 由于Midas building和etabs的特点,本月决定把原计划下一版本的功能提前,就是根据振型参与质量来自动决断振型个数,Midas building的这个功能很赞,于是我们也有了。 ETABS的RITZ向量法在很多情况下会是一个比较好的手段,于是我们有了。 —————- 2011年要结束了,12月开心。 感谢2011。
UCOCloud云服务架构初步设计
about 1 month ago - No comments
在前一段时间考虑云服务的时候,大致整理了一个系统架构。只是业余工作,和公司工作无关。 借用了一下云服务的概念,目前通过服务端的程序为用户提供对应的数据服务。而整个架构是在满足工程计算方面的实际需求,而不进行过度设计。 1. 整体特点 UcoCloud架构如下图所示,主要包括web前端、Master主控服务以及一系列的Worker工作机。 UcoCloud以Master服务为核心,负责任务队列、调度以及Worker的管理,不涉及具体业务。这里的Master服务不同与Gate服务,如果后来业务需要可以增加Gate服务,从而支持多个Master。 Worker承担具体业务,可以不同类型,可以随时增加更多worker来增强计算能力。 Web前端只是一个Master服务交互的界面,与用户进行交互。 必要时可以增加专门的File Server。 2. Master服务 Master服务主要功能有3个,维护Task队列和Worker在线列表,同时负责Task的调度。Master采用简单授权,以JSON格式数据交换;Master建议用Python开发,为有状态服务。 任务队列 /Task 包括以下接口服务: •Add: 增加任务 (ROLE_USER) •View: 查看任务 (ROLE_USER) •Delete: 删除任务 (ROLE_USER) •List: 任务列表(ROLE_USER) •Result: 任务结果(ROLE_USER) •Get: 获取任务(ROLE_WORKER) •Update: 更新任务(ROLE_WORKER) Worker列表 /Worker 包括以下接口服务: •Register : 注册worker(ROLE_WORKER) •Exit : 退出worker(ROLE_WORKER) •Check : 心跳消息,获取任务列表 •调度器 /Scheduler •Update : 调度器更新(如果是有状态服务,应该自起线程自动维护) 关于调度机制: (主要涉及调度任务的分配、已分配任务的检测和重新分配等,待补充完善) 3. web前端 Web前端为Master服务的前端,Web前端不维护具体数据。Web前端从Master服务获取信息;Web与Master之间使用JSON数据交流。…
使用VS2008进行远程调试
about 1 month ago - No comments
无聊的技术笔记: 环境:VS2008 sp1 调试机(A):win7 32bit 被调试机(B): xp 32bit 即在B机上运行程序,A机上进行调试。 ———————————— 最简单的步骤如下: B机上 (1) B机上的建立一个与A机当前账户相同的用户名,密码相同,管理员权限。 (2) 在B机安装rdbgsetup.exe,位于VS2008安装光盘上,选择对应的OS类型。 (3) 在B机上打开组策略(gpedit.msc),修改“网络访问:本地账户的共享与安全模式”,选择“经典-本地账户以自己身份验证” (4) B机上打开Remote Debuging Monitor A机上 选择Debug-Attach to Process Qualifier: 通过浏览找到对应B机。 注意 需要注意防火墙要对相关端口放行。 其他的就和本机调试一致。
用Python写东西的笔记
about 1 month ago - No comments
自从最近这次换工作以后,空闲时间一下子变得奢侈起来,博客最近也写得少了,一些喜欢的小东西也无暇顾及。 ——————无聊分割线————————- 一直对python很钟情,不过最近很少用,能记得比较完整的程序就是“用Python做了个Spider”,当时在一个Linode的VPS上跑了几个月。最近处理数据时候又重新用python来做,做完之后还是继续感慨它的便利性。 用python的一个最大的优点就是可以快速的迭代式开发,不断的重构,这一点在这次体会尤深。 其中有几次跳跃式的重构如下: 第一次的重构在书写了几个数据段的解析函数之后,决定定制一个规则,然后通过解析规则来处理各种字段。于是有了一个大约20条记录的标签库(后来再加一个文件解析的时候又增加了6行),然后就处理了近30种数据段,而且可以很方便的定制扩充。 第二次重构在输出报告的完成了一个数据段的汇总后,抽象出了一个Report类,完全控制报告的输出。也就有了后来用css+html的报告时候的顺理成章。 另外一次不大的重构,在于利用的简化的有限状态自动机的思想来处理各种特殊情况。当然只是思想而不是一个完整的自动机。 这一条在N年前给sudidi同学的abaqus数据文件提取工具中就大体考虑过,可以说轻车熟路。 后来用配置文件来设置参数,打包exe。从开始学习到成功,大约花了30分钟,代码10行,我爱python。 除去一些修饰性的代码和css样式表,核心代码不到500行。如果用c++的话,代码量至少要翻2倍,时间2倍不止。 Eclipse+PyDev是目前开发python程序的不二选择,除去log外,一个完善的Debug环境还是很赞的。 ——————无聊分割线2——————– 有些东西记下来权当笔记,免得以后再找。 1. 文件路径的相关处理 用 os.path 就完全解决所有问题,包括路径拼接、路径拆分、相对路径提取、文件存在性判断、文件遍历、递归遍历等等。相关函数有: os.path.join os.path.basename os.path.exists os.makedirs os.path.isdir os.path.splitext 2. 文件的遍历 目录下的文件遍历有两种,一种是os.listdir,一种是用os.walk。如果需要递归,则后者更为方便。 1: files = os.listdir(proj_dir) 2: for f in files: 3: filepath = os.path.join(proj_dir,f) 4: if os.path.isdir(filepath): continue 5: if f.find(‘—-’)>-1: 6: shutil.copy(filepath, self.REPORT_DETAIL_DIR) 使用os.walk则很容易进行遍历: 1: for root,dirs,files…
Python中获取Javascript渲染后的HTML源码
about 2 years ago - 4 comments
Get Rendered HTML Source In Python 前因: 现在的网页越来越动态和漂亮,大量地用到了Javascript,包括但是不限于Ajax,这样一来直接查看网页源代码的话的,获取到的并不是真正的渲染完成后的页面。这对采集来说,是一个很大的挑战。 在火车头当中,对于Ajax获取的数据的话,可以手动分析页面提取的Ajax的处理url,然后来提取。但是对于复杂的session验证(特别是.NET的网站来说)处理比较困难。 另外一方面,对于javascript生成的页面,火车头也没法直接提取。 思路: 首先明确的是必须获取Javascript渲染结束后的结果。这一点是明确的,具体就是方法就因人而异。 而自己解决Javascript渲染无异于痴人说梦,所以必须借助现有的浏览器核心,比如Gecko、WebKit、IE。如果用Java开发的话可以Jrec这个库,它封装了Gecko。如果其他的语言,而且是在windows平台上的话,最简单的就是用—— COM,用Internet Explorer 提供的com组件。 解决方案: 突破了这层关系,下面的就水到渠成了。 在python下,对IE封装的比较完善而且文档齐全的就是PAMIE(http://sourceforge.net/projects/pamie),它的本意是作为自动化测试工具使用的。 需要注意的是,在页面加载完之后需要留出一定时间来让页面的js代码执行渲染完成后再提取html代码。这个时间需要通过试验确定。 需要注意的是: 前面所述的利用PAMIE来获取渲染后的html内容的方法是可行的,但是缺点是效率非常低。对于最常见的ajax动态内容页面来说,最直接的方法还是构造ajax请求,来获取相应内容。这样效率很高,而且返回数据都是结构化的xml或者json数据,比html更容易处理。
用Python做了个Spider
about 2 years ago - 4 comments
前因: 前些天为TAR写了一个Python的接口插件tar_pytar后,对python的兴致很高。 本博上面最火的文章就是“开源的火车头采集-Wordpress2.7.1免登录发布接口”,看来大家利用采集做垃圾站的热情也很好。 著名的火车头采集器LocoySpider也出2009版了,解决了.Net 3.5不兼容问题,而且采集标签进行了语法高亮。很好很强大。但是免费版不支持任意附件下载功能… 想下载点资料,但是论坛里面一个一个点击太烦… 于是: 自己做一个吧,python做这个肯定很合适,与火车头的功能做个对比: 说明: 私人玩具,无意公开。
使用f2c将fortan77程序转换为C程序
about 3 years ago - 1 comment
有一段接近1000行的Fortran77程序,需要在一个新程序中重用,而且非常不想编译新程序的时候还需要fortran编译器,而且为了日后维护方便,也不想把它弄成静态lib。于是决定把它转换成C程序。 以往都是手动转或者看懂后重写,不过这段计算复杂,而且有不少隐含变量,还有equivalence语句,于是找到了f2c这个工具,使用效果非常好。转换后的结果可以直接编译,而且通过简单的处理也可以去掉对f2c.h的依赖。 f2c的主页在:http://www.netlib.org/f2c/,提供源代码和二进制文件下载。 f2c完整源代码(126KB) f2c的mswin平台命令行(131KB) f2c使用说明 f2c更新记录 其实f2c的使用方法非常简单: f2c [ option ... ] file … 一般option取默认即可,如 f2c romform.f 。 需要注意的是,fortran的文件后缀必须是.f或者.F,.for是不认的,而且严格执行72列的限制。
SWIG
about 3 years ago - No comments
http://www.swig.org/index.html SWIG(Simplified Wrapper and Interface Generator)给现有程序增加其他语言(脚本语言)的支持接口,似乎是很好很强大。给PolyDef和XGraph加Lua接口可能就没那么麻烦了。 现在SWIG的最新版本是1.3.35,2008/04/07发布。 SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages. SWIG is used with different types of languages including common scripting languages such as Perl, PHP, Python, Tcl and Ruby. The list of supported languages also includes…
VC中Unicode的项目设置
about 3 years ago - 1 comment
单纯的增加UNICODE,_UNICODE宏,很容易出现链接错误,故笔记如下: 修改C++\Preprocessor :添加_UNICODE和UNICODE Link\Output: Entry-Point Symbol 填入指定入口 UNICODE Windows : wWinMainCRTStartup UNICODE Console : wmainCRTStartup (如果转换会MBCS,若编译错误,则指定入口) 非 UNICODE Windows: WinMainCRTStartup 非 UNICODE Console: mainCRTStartup 如果原先程序为main函数,则需要修改为_tmian。另外如果原先程序中存在__FILE__宏,则出现编译错误,因为__FILE__ 是ANSI字符串,可以如下定义 __WFILE__ : #define WT2(x) L ## x #define WT(x) WT2(x) #define __WFILE__ WT(__FILE__)
about 1 year ago
非常喜欢TAR
功能强大,而且小巧。看到楼主的插件,非常喜欢。不知道楼主能不能给小弟发一个。先谢谢了。