小编Ste*_*eve的帖子

Emacs中的相对行号

有没有人知道如果对于emacs存在类似这样的Vim相对行号的话?我使用vimpulse和man,这将是非常方便的!我知道一些口齿不清,所以如果没有,我可以尝试自己做,如果我在正确的方向得到一个点.

更新:由于正确的响应,我想出了这个,它将显示当前行的1,以及前一行的-1,用于与vimpulse yanks和deletes组合.

非常感谢所有帮助过的人!我知道这不完全是Vim所做的,但是vim中从0开始的相对行号有什么用呢?愚蠢的vim.

(defvar my-linum-current-line-number 0)

(setq linum-format 'my-linum-relative-line-numbers)

(defun my-linum-relative-line-numbers (line-number)
  (let ((test2 (1+ (- line-number my-linum-current-line-number))))
    (propertize
     (number-to-string (cond ((<= test2 0) (1- test2))
                             ((> test2 0) test2)))
     'face 'linum)))

(defadvice linum-update (around my-linum-update)
  (let ((my-linum-current-line-number (line-number-at-pos)))
    ad-do-it))
(ad-activate 'linum-update)
Run Code Online (Sandbox Code Playgroud)

emacs vimpulse line-numbers

21
推荐指数
4
解决办法
8955
查看次数

太多的端到端测试?

我对这整个情况感到非常沮丧,原因如下:

我继承了一个完全未经测试的遗留系统,用于保持许多不同的客户端数据库和一个主数据库(具有不同的模式)同步.该系统仅在给我时完成,有许多缺陷阻止它在90%的时间内正常工作.

该系统还允许六种不同类型的同步,每种同步不同(有时重叠)表,因为数据库可能相当大,因此客户端可以根据其状态优先考虑最重要的表.

我从几个端到端测试开始,在本地使用某些数据设置主数据库和几个客户端数据库,然后调用不同的同步方法,并以正确的格式验证正确数据中出现的正确数据.

我被迫按时,由于这个系统至少有一百种不同的方式,数据可以从一个数据库移动到另一个数据库,只有几千行代码,我只是不断进行越来越多的端到端测试,当我接手项目时,每个缺陷基本上1-2个.我完成了16个单元测试系统(我添加的代码中的TDD)和113个端到端测试,其中许多直接基于先前的缺陷.

我完成了系统,它已经生产了几个月没有发生任何事故.

最近,我们决定将客户端数据库转换为新数据库,当我使用新数据库运行我的测试(一直在CI服务器中每晚运行)时,113个中的大约100个失败.(当然,单位测试全部通过).

我一直在修复失败的端到端测试,坦率地说,大多数失败是出于一两个简单的原因(比如新的数据库舍入日期不同)但我对我的测试非常脆弱这一事实感到沮丧.虽然他们正确地失败了,但我只需要一两个告诉我,而不是100. 问题是,单元测试没有那么多代码,因为大多数代码只是根据日期从一个表中选择数据,然后从另一个数据库中选择相同的数据,合并这两个数据,然后适当地插入/更新.

没有这些测试,我无法完成这个系统,但维护它们的痛苦基本上是导致我这个问题的原因:任何建议我应该如何进行/或者我可以做得更好?我第一次浪费了太多时间编写这些端到端测试吗?我读过有效使用遗留代码的工作,但我觉得那里没有真正的好答案,除了:"只是重构并编写更多的单元测试",我感觉并不是真的很好一个选项是这个系统的独特性质,只需很少的代码和大量的数据库转换.

integration-testing automated-tests unit-testing end-to-end

7
推荐指数
1
解决办法
733
查看次数

在Lein和Ring的Clojure中缺少*out*

我正在运行Lein 2和苹果酒0.7.0.我制作了一个使用ring/run-jetty启动的示例环应用程序.

(ns nimbus-admin.handler
  (:require [compojure.core :refer :all]
            [compojure.handler :as handler]
            [clojure.tools.nrepl.server :as nrepl-server]
            [cider.nrepl :refer (cider-nrepl-handler)]
            [ring.adapter.jetty :as ring]
            [clojure.tools.trace :refer [trace]]
            [ring.util.response :refer [resource-response response redirect content-type]]
            [compojure.route :as route])
  (:gen-class))


(defroutes app-routes 
  (GET "/blah" req "blah")
  (route/resources "/")
  (route/not-found (trace "not-found" "Not Found")))

(def app (handler/site app-routes))

(defn start-nrepl-server []
  (nrepl-server/start-server :port 7888 :handler cider-nrepl-handler))

(defn start-jetty [ip port]
  (ring/run-jetty app {:port port :ip ip}))

(defn -main
  ([] (-main 8080 "0.0.0.0"))
  ([port ip & args] 
     (let [port …
Run Code Online (Sandbox Code Playgroud)

clojure ring nrepl

6
推荐指数
1
解决办法
855
查看次数

未使用的接口参数

我有一个由三十个具体类实现的接口。具体实现者分为两组,每组都继承自一个公共抽象类。抽象类定义了具体实现者的构造函数,包括为双方的每一“方”传入一个数据库连接对象(它们有不同的数据库,等等)。

所有当前的接口方法都有具体类“完成工作”所需的几个参数,但并非每个实现者都使用所有参数。

今天早上当我去往接口中添加一个新方法时,我意识到只有一个具体的实现者需要数据库连接,而其他人不需要它。所以,这让我想知道,我应该将它作为参数传递吗?需要“完成工作”,但仅针对其中一个具体类,并且该类已经具有数据库连接。如果我将数据库连接作为接口参数传入,那么其他 29 个类将不会使用它。

什么是可接受的接口参数的好线是什么?任何有关该主题的阅读/内容,我也会很感激地吞噬。

language-agnostic oop interface

5
推荐指数
1
解决办法
1171
查看次数

Vim Regex重复行分组

我有一个这样的日志文件:

12 adsflljl
12 hgfahld
12 ash;al
13 a;jfda
13 asldfj
15 ;aljdf
16 a;dlfj
19 adads
19 adfasf
20 aaaadsf
Run Code Online (Sandbox Code Playgroud)

我想将它们"分组",就像这两个中的一个:

12 adsfllj, 12 hgfahld, 12 ash;al
13 a;jfda, 13 asldfj
15 ;aljdf
16 a;dlfj
19 adads, 19 adfasf
20 aaaadsf
Run Code Online (Sandbox Code Playgroud)

要么

12 adsfllj, hgfahld, ash;al
13 a;jfda, asldfj
15 ;aljdf
16 a;dlfj
19 adads, adfasf
20 aaaadsf
Run Code Online (Sandbox Code Playgroud)

我完全陷入困境.如果vim没有这样做,我也有sed和awk以及bash.我只是不想写一个bash脚本,我想增加我的正则表达式

regex sorting vim awk sed

4
推荐指数
2
解决办法
456
查看次数

没有parens的反引号

我正在阅读优秀的书Let Over Lambda,我试图将Common Lisp代码移植到Clojure上.

下面生成一个应该采用的宏

(defn defunits-chaining [u units prev]
  (if (some #(= u %) prev)
    (throw (Throwable. (str u " depends on " prev))))
  (let [spec (first (filter #(= u (first %)) units))]
    (if (nil? spec)
      (throw (Throwable. (str "unknown unit " u)))
      (let [chain (second spec)]
        (if (list? chain)
          (* (first chain)
             (defunits-chaining
               (second chain)
               units
               (cons u prev)))
          chain)))))

(defmacro defunits [quantity base-unit & units]
  `(defmacro ~(symbol (str "unit-of-" quantity))
     [valu# un#]
     `(* ~valu#
         ~(case un#
           ~base-unit …
Run Code Online (Sandbox Code Playgroud)

macros clojure common-lisp

2
推荐指数
1
解决办法
168
查看次数

在Geiser杀死球拍无限循环

当我通过使用geiser + racket评估emacs中的表单而意外地进行无限循环时,等待一分钟后,最终emacs将再次开始响应.不幸的是,之后的每个评估至少需要一分钟.通常,在第二个或第三个eval之后,emacs将完全停止响应,并且最快要做的就是重新启动Ubuntu机器.

是否有一些设置可以在geiser中阻止这种情况,或者告诉emacs杀死geiser?

emacs racket geiser

2
推荐指数
2
解决办法
602
查看次数

Haskell相当于Json或Edn

在Javascript中,如果我想存储配置,我使用Json.在Clojure中,我使用EDN,Haskell中推荐什么?YAML?

haskell clojure

1
推荐指数
1
解决办法
300
查看次数