Archive for category 创作

在 wordpress.com 博客中使用半角引号

插入代码时发现 WordPress 会自动把引号改成全角的,且网上的解决办法(修改formatting.php设置)只是针对自建 WordPress 博客的,托管在 wordpress.com 上的博客没法这么改动。

只好曲线救国,用 <pre> 实现半角,但之后发现又出现了不能换行的问题,结果再用 CSS 属性弥补之。折腾一小番,临时解决办法如下:文章编辑时切换进入 HTML 编辑模式,用 <pre> 包裹插入的代码并设好 white-space:pre-wrap 属性,像下面这样就可以了。

<pre style="font-family: 'Courier New'; white-space: pre-wrap;"><span style="color: #ff8000;">6.8</span><span style="color: #000080;"><strong>.</strong></span> Functional Programming <span style="color: #ff8000;">6.8</span><span style="color: #000080;"><strong>.</strong></span><span style="color: #ff8000;">1.</span> 对一个Enumerable对象应用一个函数 Applying a Function to an Enumerable
...
...
...
</pre>

附:

CSS white-space 属性

定义和用法

white-space 属性设置如何处理元素内的空白。

这个属性声明建立布局过程中如何处理元素中的空白符。值 pre-wrap 和 pre-line 是 CSS 2.1 中新增的。

默认值: normal
继承性: yes
版本: CSS1
JavaScript 语法: object.style.whiteSpace=”pre”

浏览器支持

所有浏览器都支持 white-space 属性。

注释:任何的版本的 Internet Explorer (包括 IE8)都不支持属性值 “inherit”。

可能的值

描述
normal 默认。空白会被浏览器忽略。
pre 空白会被浏览器保留。其行为方式类似 HTML 中的 <pre> 标签。
nowrap 文本不会换行,文本会在在同一行上继续,直到遇到 <br> 标签为止。
pre-wrap 保留空白符序列,但是正常地进行换行。
pre-line 合并空白符序列,但是保留换行符。
inherit 规定应该从父元素继承 white-space 属性的值。
Advertisements

,

留下评论

用 Lisp 编写多重剪切板,在不同 AutoCAD 程序间传递文件

工作中经常在 AutoCAD 中原位粘贴各种零碎图形,而且会用到许多个 AutoCAD(有时还开一个 CASS),在它们之间交换文件麻烦死了。我想 Windows 中有不少剪切板增强工具,如 ClipX Ditto 之类,都提供多个缓冲位置,可以同时存储不同的文本,按照需要粘贴。AutoCAD 为什么没个类似功能呢?最后我研究了一番 Lisp 做了个简单的多重剪切板工具。

原理很简单,是利用”写块”和”插入块”的功能。使用前需要先配置缓存路径,目前是 “F:/_temp_/” ,可以改成你自己的。完后按 c1 就是将选中对象存到剪切板位置1,按 v1 将其粘贴回来。这个临时图形是存在硬盘的,所以能直接粘贴到另一个进程的 CAD 中。

因为刚接触 Lisp 很多知识不了解,用 cond 函数时被括号内求值顺序卡了半天,最后总算弄明白了……这段很2的注释就不删除了,不知还有没有人遇到类似的问题。

;传送当前选择的图形对象,用于在不同文档,不同版本CAD之间转移所选对象
;按 x1 c3 v2... 使用
; x1 = 所选图形剪贴到缓存位置1
; c3 = 所选图形复制到缓存位置3
; v2 = 从缓存位置2粘贴回来

;让函数名直接表示参数,使操作按键尽可能减少
;有更好的办法么? #unsolved
(defun c:x1 () ( setq sss ( ssget)) (blocktransport "x" "1" sss))
(defun c:x2 () ( setq sss ( ssget)) (blocktransport "x" "2" sss))
(defun c:x3 () ( setq sss ( ssget)) (blocktransport "x" "3" sss))
(defun c:x4 () ( setq sss ( ssget)) (blocktransport "x" "4" sss))
(defun c:x5 () ( setq sss ( ssget)) (blocktransport "x" "5" sss))

(defun c:c1 () ( setq sss ( ssget)) (blocktransport "c" "1" sss))
(defun c:c2 () ( setq sss ( ssget)) (blocktransport "c" "2" sss))
(defun c:c3 () ( setq sss ( ssget)) (blocktransport "c" "3" sss))
(defun c:c4 () ( setq sss ( ssget)) (blocktransport "c" "4" sss))
(defun c:c5 () ( setq sss ( ssget)) (blocktransport "c" "5" sss))

(defun c:v1 () ( setq sss nil )     (blocktransport "v" "1" sss))
(defun c:v2 () ( setq sss nil )     (blocktransport "v" "2" sss))
(defun c:v3 () ( setq sss nil )     (blocktransport "v" "3" sss))
(defun c:v4 () ( setq sss nil )     (blocktransport "v" "4" sss))
(defun c:v5 () ( setq sss nil )     (blocktransport "v" "5" sss))

(defun blocktransport ( method num sss / p n fn info )
(setvar "filedia" 0 )
(setvar "cmdecho" 0 )
(setvar "insunits" 0 )
(setq p "f:/_temp_/") ;在这里配置缓存路径,使用斜杠(而不是反斜杠)
(setq n "_slot_") ;缓存文件名称,起名应该尽量诡异
(setq fn (strcat p n num ".dwg"))
(setq info "") ;成功后输出信息
(setq fn_rnd (strcat p "back_" ( rtos (getvar "cdate") 2 8 ) ".dwg"))

;这个 condition 明显是"点对"啊,
;为什么 (cond ( (= method "x") (bla...) (bla...) (bla...) ) 是对的
;而 后面那一堆括起来 (cond ( (= method "x") ((bla...) (bla...) (bla...)) ) 是错的?
;发现 (cond ((= 1 1) (alert "22") )) 没问题
;发现 (cond ((= 1 1) (alert "22") (alert "33"))) 也没问题
;但括起来后面的那堆 (cond ((= 1 1) ((alert "22") (alert "33")))) 却会先弹窗 33 ,从右向左!
;这什么破玩意
;发现((bla1) (bla2) (bla3)) 都是从右向左的
;也不尽然 括起来后,下面那些 (alert "1") - (alert "4") 顺序是 2 3 4 1
;不括起来,下面那些 (alert "1") - (alert "4") 顺序是 1 2 3 4
;也就是说 括起来后,()中第一个被视为函数,所以先求实参了?
;先加个 list 就可以括起来了 (list () () () bla1 bla2 bla3 blabla)
(cond
((= method "x") ;剪切图形 to slot
(list ;使用 list 串联表
;(alert "1")
(cond ((findfile fn) (command "-wblock" fn "y" "" "0,0" sss "" ))
('t (command "-wblock" fn "" "0,0" sss "" ))
)
;(alert "2")
(command "oops" ) ( command "-wblock" fn_rnd "" "0,0" sss "") ;备份唯一名称的图块
(setq info (strcat "*cut* to slot" num " done !"))
;(alert "3")
;(alert "4")
)
)

((= method "c") ;复制图形 to slot
;不使用 list 串联表,依次计算零散的分支
(cond ((findfile fn) (command "-wblock" fn "y" "" "0,0" sss "" ))
('t (command "-wblock" fn "" "0,0" sss "" ))
)
(command "oops" ) ( command "-wblock" fn_rnd "" "0,0" sss "") ;备份唯一名称的图块
(command "oops" ) ;写块时会从原图清掉这些图形,需要还原回来

(setq info (strcat "*copy* to slot" num " done !"))
)

((= method "v") ;粘贴图形 from slot
(command "_insert" fn "0,0" "1" "1" "0")
(setq ss (entlast))
(command "_explode" ss) ;炸开图块
(command "-purge" "b" (strcat n num) "y" "y") ;清理掉这个块的定义
(setq info (strcat "*paste* slot" num " done !"))
)

)
(setvar "cmdecho" 1 )
(setvar "filedia" 1 )
(prompt info )
)

,

留下评论

AutoCAD VBA 加密多段线

最近学习 AutoCAD VBA 编程,前几天想做加密多段线的没弄出来,现在学会了。

功能

加密 AutoCAD 中的二维多段线。按照设定的距离阈值处理圆弧,将其转换为内接于圆弧的多段线。

使用

此为 VBA 宏脚本,在 AutoCAD 中按”Alt+F8″,填写名字后新建宏,粘贴脚本到编辑框中,按”F5″执行。具体流程可自行搜索。

阅读更多 »

,

留下评论

AutoCAD VBA 抽稀多段线

最近迫于工作压力开始学 AutoCAD VBA 编程。有好多打算弄成自动处理的工作,预备一点一点搞定。对着手册折腾一番后,研究出了将多段线抽稀的 VBA 宏(其实我是想做多段线加密的,但暂时没能搞出来……)。

功能

抽稀(优化)AutoCAD 中的二维多段线。依次计算线上原有点之间的距离,合并在距离阈值之内的点。

使用

此为 VBA 宏脚本,在 AutoCAD 中按”Alt+F8″,填写名字后新建宏,粘贴脚本到编辑框中,按”F5″执行。具体流程可自行搜索。

阅读更多 »

, ,

留下评论

Google Picasa图片外链的url参数

最近我重写了批量外链相册图片的Javascript工具,顺便研究了一下Google Picasa外链图片url的规律。

首先说明,Picasa相册链出图片的大小是由一小段url控制的,比如这张图片,其外链地址是
http://lh4.googleusercontent.com/-a0YNVIdgIyM/SctjS3QFUpI/AAAAAAAAA2M/7LtzZgRE6Y4/s400/Summer_cocktail_by_iuneWind.jpg
图片显示为

将这个url从红色的”s400/”处拆开:
“s400/”之前的部分是图片本身的路径,只有这段url时链出原图(不超过1600px)。
“s400/”用来控制图片大小,后面必须有斜杠。
“s400/”之后的部分仅描述了文件名,没实际作用。

目前发现的规律总结如下: 阅读更多 »

, , , ,

留下评论

ArcGIS10的一些细节贴士

最近学习ArcGIS,看了一下ESRI提供的 ArcGIS10贴士和快捷键 ,部分摘抄如下:

想调整UI布局,从 自定义->自定义模式… 的对话框拖出按钮到菜单、工具条即可,此时也可拖放现有的菜单条目和按钮

在按钮上使用”这是什么(What’s This)”工具可以看到相应提示;右键菜单中的项目也可以查看提示,方法是按Shift+F1;对激活的窗口(如内容列表、目录、搜索、ArcToolbox…)按F1可以看到对此窗口的提示

在ArcCatalog选中一个文件夹,拖动到某个文件夹连接的顶层就可以创建新的连接;ArcGIS9.x中略有不同,需拖动到ArcCatalog的根节点

建好的文件夹连接可以重命名使其更具语义性

在 窗口->查看器 可以开启另一个查看窗口,方便同时浏览不同比例的视图,新窗口具有跟主窗口同样的功能

对某个字段计算值时,若是与几何属性有关的值,可以直接用”计算几何”

在ArcToolbox的工具上右键可以批量执行地理处理工具,需要对每次处理指定不同的参数

“我的地点”对话框可以存储视图的位置,此工具在数据框工具条(ArcMap10)或在工具菜单(ArcMap9.x)中

主页按钮在很多对话框都能看到,可以快速切到这个路径

搜索窗口是快速找到所需工具的最好方法,快捷键Ctrl+F,搜索窗口也能检索数据、地图等,点击不同类型的搜索结果会执行不同动作

窗口可以像浏览器标签一样堆叠起来,将窗口拖到另一窗口中直到显示蓝色标记,放到中央的圆形标记即可堆叠

双击窗口的标题栏能切换窗口浮动/停靠边缘

打开显示要素明细的对话框,再选择另一个要素会即时更新,无需关掉重开

,

留下评论

使用cPanel的cronjob制作新浪微博机器人

本文研究如何利用cPanel的cronjob(时钟守护程序)制作自动发送条目的新浪微博机器人。这里的”微博机器人”指按时发送条目的那种微博程序,比如我自己做的@奥修的金块。暂不讨论像@rtmeme那么高级的。

具体流程是,在新浪开放平台注册一个应用,把微博帐号添加为应用的测试者,完成一系列授权后,用cPanel主机的PHP脚本就可以向微博帐号发送条目了。最后用cronjob把这个过程设为自动执行。

准备工作包括以下几个方面:

  • 支持cronjob的cPanel空间
  • 储存微博条目的MySQL数据库
  • 注册新浪微博应用
  • 处理微博OAuth的PHP库
  • 看看新浪微博开发者协议

此外最好对PHP和MySQL的语法,以及OAuth基本原理有一些粗浅的了解。之后就可以开搞了。

准备数据

微博机器人我见过最多的是报时、发英文或日文单词的,还有各种树洞机器人。大家可以发挥自己的创意~建议文字尽量短小(我发现140字都有人嫌长不看),条目之间相对独立,更新不要太快。测试数据有10多条就行了,成功后再整理正式的。
阅读更多 »

, , , ,

留下评论