那里!我正在使用swing/clojure构建一个图像处理应用程序,现在我需要开发一个图像面板,我可以在其中单击并计算数据.感谢coobird,我现在对如何用Java做了很好的想法,但我仍然没有遇到很多与Clojure集成的问题.
让我们来看看coobird如何建议我这样做.首先,我们应该在Java中扩展一个类.在clojure中,我们用proxy宏来做这个,所以我们有这样的事情:
(def painting-panel (proxy [JPanel] []))
下一步是创建类构造函数并设置一些变量.
我可以在代理的第二个参数之后定义函数,但是如何创建构造函数?绘图面板是这个类的名称(因此我应该创建的函数的名称)?
我该如何处理类变量?我应该let像我一样定义它们吗?
是this与super供我使用,像我一样下面?
(def painting-panel
(let [background-image (Image.)
point-clicked (Point.)]
(proxy [JPanel] []
(paintComponent [g]
(do ((.paintComponent super) g)
(doto g
(.drawImage background-image 0 0 nil)
(.fillRect (.x point-clicked) (.y point-clicked) 1 1))))
(painting-panel []; constructor?
((.addMouseListener this)
(proxy [MouseAdapter] []
(mouseClicked [e]
(do
(def point-clicked (.getPoint e))
(.repaint this)))))))))
建议和代码更正也欢迎!
谢谢!
我正在从vi移动到emacs,并且使用viper和vimpulse,当我C-w C-w进入窗口并且无法使用相同的命令返回原始窗口时它会变得非常烦人,因为另一个缓冲区(可能是帮助缓冲区)不是在Viper模式下.我怎样才能解决这个问题?
我尝试将其他模式添加到viper配置中,并使用默认情况下使用挂钩启动viper模式:
(add-to-list viper-vi-state-mode-list 'help-mode) (add-hook 'help-mode (lambda () (setq viper-mode t)))
但这些命令都没有奏效.实际上,第一个产生了以下错误:
Warning (initialization): An error occurred while loading `/home/konrad/.emacs.d/init.el': Wrong type argument: symbolp, (fundamental-mode ...
除此之外C-w C-w,我也错过了无法使用hjkl进行导航.有没有办法重用viper设置的键绑定,而不是为每种模式重新绑定它们?
自从我转换为Emacs教会以来,我一直在尝试从内部做所有事情,我想知道如何快速高效地进行文本处理.
作为一个例子,让我们在几分钟前在org-mode上编辑我正在编辑的列表.
** Diego: b QI ** bruno-gil: b QI ** Koma: jo ** um: rsrs pr0n ** FelipeAugusto: esp ** GustavoPupo: pinto tr etc ** GP: lit gtk ** Alan: jo mil pc ** Jost: b hq jo 1997 ** Herbert: b rsrs pr0n ** Andre: maia mil pseudo ** Rodrigo: c ** caue: b rsrs 7arte pseudo ** kenny: cri gif ** daniel: gtk mu pr0n rsrs b ** tony: an 1997 esp ** Vitor: b jo mimimi …
当我键入一个重音字符(例如ñ,ç,ã)时,它不会立即自动插入,而是将其自身显示在迷你缓冲区上,就好像它是一个前缀键(例如ç - >ç-).有没有办法改变这种行为?我甚至无法通过<f1> kc捕获它以了解发生了什么.
谢谢!
我目前正在运行一个awk脚本来处理一个大的(8.1GB)访问日志文件,它需要永远完成.在20分钟内,它写了14MB的(1000 + - 500)MB我期望它写的,我想知道我是否能以某种方式更快地处理它.
这是awk脚本:
#!/bin/bash
awk '{t=$4" "$5; gsub("[\[\]\/]"," ",t); sub(":"," ",t);printf("%s,",$1);system("date -d \""t"\" +%s");}' $1
编辑:
对于非awkers,脚本读取每一行,获取日期信息,将其修改为实用程序date识别的格式,并将其调用以将日期表示为自1970年以来的秒数,最后将其作为.csv文件的行返回,以及知识产权.
输入示例: 189.5.56.113 - - [22/Jan/2010:05:54:55 +0100]"GET(...)"
退货产出: 189.5.56.113,124237889
我正在为我的网站构建一个clojure API,它基本上是原始Web API的包装器.我无法实现的功能之一是通过POST请求发送文件,基本上我将在shell中执行curl -F foo=bar baz=@bak.jpg foobar.com.
我正在使用clojure-http-client,并且最初尝试过该表单(resourcefully/post "foobar.com" {} {:foo "bar" :baz (File. "bak.jpg")}),但接收脚本忽略了:baz字段,就像我只发送了一样:foo.后来,我尝试File.改为FileInputStream,因为client.clj的[第51行] [2]似乎正在检查这个特定的类,但仍然得到相同的结果.
然后我创建了一个简单的打印$ _POST的php页面来检查我的请求,显然这些对象的数据是按字面意思发送的.看一看:
Clojure =>(资源/帖子" http://ptchan.org/pttest.php "{} {:foo"bar":baz"/tmp/bak.jpg"}){:body-seq("Array"" (""[foo] => bar""[baz] => /tmp/bak.jpg"")"),: code 200,:msg"OK",:方法"POST",:headers {:date( "周五,2009年10月2日11:41:15 GMT"),:vary("Accept-Encoding"),:content-length("53"),: connection("close"),:content-type("text/html"),: server("Apache/2.2.9(Debian)PHP/5.2.6-1 + lenny3与Suhosin-Patch"),:x-powered-by("PHP/5.2.6-1 + lenny3 ")} ,: get-header#,: cookies nil,:url" http://ptchan.org/pttest.php "}
Clojure =>(资源/后" http://ptchan.org/pttest.php "{} {:foo"bar":baz(文件."/ tmp/bak.jpg")}){:body-seq( "Array""("[[foo] => bar""[baz] => /tmp/bak.jpg""))),: code 200,:msg"OK",:方法"POST",:header {:date("星期五,2009年10月2日11:41:30 GMT"),:vary("Accept-Encoding"),:content-length("53"),: connection("close"),: content- type("text/html"),: server("Apache/2.2.9(Debian)PHP/5.2.6-1 + lenny3 with Suhosin-Patch"),: x-powered-by("PHP/5.2.6 …
很抱歉,如果这太简单了,但我找不到教程,也没有找到TagSoup Java版本的文档.
基本上我想从互联网上下载HTML网页并将其转换为包含在字符串中的XHTML.我怎么能用TagSoup做到这一点?
谢谢!
它似乎是一个强大的宏,但我没有将它应用于任何愚蠢的例子.你能告诉我一些真正的用途吗?
谢谢!
...在图像中并对其[xy]坐标进行一些计算.
我的第一个想法是使用图像作为JPanel的背景,然后注册点,但我不确定是否有办法在JPanel上标记这些.还有我不熟悉的绘图库,但我不确定我是否可以将它们与Swing结合起来.
你能说出我可以使用的包/类来完成任务吗?已经提到的代码的参考也是受欢迎的.
谢谢!
我正在将此代码翻译为Clojure.正如你所看到的,我必须扩展课程ArthurFrame,但IllegalAccessError每次使用时我都会得到(proxy [ArthurFrame] [] ...).
知道为什么吗?这是班级的来源.
谢谢!
编辑: 这是在REPL上运行(proxy [ArthurFrame] [])的完整错误堆栈.
编辑2:实际上,即使实例化该类也会产生错误.以下是来自的输出(ArthurFrame. wid):
tried to access class com.trolltech.demos.ArthurFrame from class user$eval__2205 [Thrown class java.lang.IllegalAccessError] Restarts: 0: [ABORT] Return to SLIME's top level. Backtrace: 0: user$eval__2205.invoke(NO_SOURCE_FILE:1) 1: clojure.lang.Compiler.eval(Compiler.java:4642) 2: clojure.core$eval__5254.invoke(core.clj:2031) 3: swank.commands.basic$eval_region__907.invoke(basic.clj:40) 4: swank.commands.basic$eval_region__907.invoke(basic.clj:31) 5: swank.commands.basic$eval__927$listener_eval__929.invoke(basic.clj:54) 6: clojure.lang.Var.invoke(Var.java:359) 7: user$eval__2202.invoke(NO_SOURCE_FILE) 8: clojure.lang.Compiler.eval(Compiler.java:4642) 9: clojure.core$eval__5254.invoke(core.clj:2031) 10: swank.core$eval_in_emacs_package__455.invoke(core.clj:59) 11: swank.core$eval_for_emacs__533.invoke(core.clj:128) 12: clojure.lang.Var.invoke(Var.java:367) 13: clojure.lang.AFn.applyToHelper(AFn.java:179) 14: clojure.lang.Var.applyTo(Var.java:476) 15: clojure.core$apply__4379.invoke(core.clj:434) …
我使用的是蝰蛇,我想改变它C-c和C-g原来的emacs的功能.我可以重新绑定C-g使用(define-key viper-vi-global-user-map "C-g" 'keyboard-quit),但我怎么能重新绑定C-c,因为它是一个前缀键?
谢谢!