tobotras: (Default)
Как в программе показать -version, прочитав его из project.clj?

project.clj:
(def my-version "9.99")
(defproject my-project my-version
  :manifest {"Implementation-Version" ~my-version}
   etc)


core.clj:
(defn implementation-version []
  ;; Кажем версию софтины. Пропертя работает в lein repl, а getPackage().getImplementationVersion()
  ;; работает в JAR
  (or (System/getProperty "my.version")
         ;; Как сюда не хардкодить класс? Я думал, *ns*, но нет
      (-> (eval 'my.package.core) .getPackage .getImplementationVersion)))

(defn -main [& args]
  (println "I am the project, version" (implementation-version)))
tobotras: (Default)
Интересно, что это я такое сапгрейдил, что у меня всё сломалось нафиг? (в своих исходниках ничего не менял)
$ lein uberjar
Compiling jira-time-spent.core
java.lang.ClassNotFoundException: clojure.tools.logging.impl.Logger, compiling:(clojure/tools/logging/impl.clj:16:1)

И Leiningen начал говорить, что надо :aot main, а то в версии 3.0 это неявное поведение отломают.

(Leiningen как был 2.4.3, так и остался, вроде. Сапгрейдил до 2.5.0, не помогло. Clojure аж 1.6.0-какой-то-SNAPSHOT попробовал, не помогло. См. тж. http://dev.clojure.org/jira/browse/CLJ-1544. Что это было?)

Да, это во всех проектах теперь у меня такое…

Upd: починилось выкидыванием :eval-in-leiningen true. Недоумение осталось.
tobotras: (Default)
Попробовал zippers. Задача — поменять все <delta value="XXX"> на <delta value="0">:
(defn- zero-deltas [zip]
  (loop [loc zip]
    (if (zip/end? loc)
      loc
    (recur (zip/next (if (= (:tag (zip/node loc)) :delta)
   	                 (zip/edit loc #(assoc-in % [:attrs :value] "0"))
                         loc))))))

Всё хорошо, но непонятно, что можно вернуть из функции, чтобы можно было аналогичную звать дальшe:
(-> filename parse xml-zip 
    zero-deltas
    something-else)

Переписал на data.xml с рекурсивным беганием map-ами по :content. Омерзительно. В недоумении.

Upd: слава аллаху опенсорсу, я таки посмотрел в исходники clojure.zip. Они держат сопутствующие структуры в метаданных. Убиться веником.

Upd2: работает вот так, но недоумение остаётся:
  (if (zip/end? loc)
      (with-meta (vector (zip/root loc) nil) (meta zip))
tobotras: (Default)
Чтобы не было соблазна куда-то это развивать — «Hello, world!» на Clojure дорос до 1000 строчек, за что и будет убит закончен.

IRC bot, зовут clojuress. Умеет мало чего, синхронный и однопоточный.
tobotras: (emacs)
В clojure нет возможности записать и прочитать обратно sexp. Чтобы сохранить конфиг, его нужно сериализовывать в какой-нибудь XML. Epic fail.

(Вот такой же точно страдалец.)
tobotras: (Default)
СЯУ, что такое «Software Transactional Memory». В процессе поглядения на Clojure.

Profile

tobotras: (Default)
tobotras

December 2024

S M T W T F S
123 4567
891011121314
15161718192021
22232425262728
293031    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 7th, 2025 11:38 am
Powered by Dreamwidth Studios