Git Product home page Git Product logo

titanium's Introduction

Titanium, a Clojure Layer On Top of Aurelius Titan

Titanium is a Clojure graph library built on top of Titan and the Tinkerpop stack.

Disclaimer: Archimedes and Titanium are currently being actively reworked with breaking API changes.

See the blog post Major Breaking Public API Changes Coming in Our Projects for a summary.

Project Goals

  • Make good parts of Titan easier to use from Clojure
  • Roughly match Neocons in terms of functionality
  • Take full advantage of the excellent Tinkerpop stack
  • Be well documented
  • Be well tested
  • Add additional features and DSL bits for convenience

Community

Titanium has a mailing list. Feel free to join it and ask any questions you may have.

To subscribe for announcements of releases, important changes and so on, please follow @ClojureWerkz on Twitter.

Project Maturity

Titanium is very young and incomplete. We put it on GitHub to gather feedback. For now, please consider using a mature library such as Neocons instead.

As the project matures, we will update this section.

Artifacts

Titanium artifacts are released to Clojars. If you are using Maven, add the following repository definition to your pom.xml:

<repository>
  <id>clojars.org</id>
  <url>http://clojars.org/repo</url>
</repository>

The Most Recent Release

With Leiningen:

[clojurewerkz/titanium "1.0.0-beta2"]

With Maven:

<dependency>
  <groupId>clojurewerkz</groupId>
  <artifactId>titanium</artifactId>
  <version>1.0.0-beta2</version>
</dependency>

Getting Started

Please refer to our Getting Started guide. Don't hesitate to join our mailing list and ask questions, too!

Documentation & Examples

Titanium documentation guides are still very much incomplete but improving week after week.

Titanium's test suite can be used to get more code examples.

Supported Clojure versions

Titanium is built from the ground up for Clojure 1.3.0 and up. The most recent stable release is always recommended.

Continuous Integration

Continuous Integration status

Titanium Is a ClojureWerkz Project

Titanium is part of the group of Clojure libraries known as ClojureWerkz, together with Monger, Welle, Langohr, Elastisch, Neocons and several others.

Development

Titanium uses Leiningen 2. Make sure you have it installed and then run tests against supported Clojure versions using

lein all test

Then create a branch and make your changes on it. Once you are done with your changes and all tests pass, submit a pull request on Github.

License

Copyright (C) 2013-2016 Michael S. Klishin, Alex Petrov, Zack Maril, and the ClojureWerkz team.

Double licensed under the Eclipse Public License (the same as Clojure) or the Apache Public License 2.0.

Titan is licensed under the Apache Public License 2.0.

Bitdeli Badge

titanium's People

Contributors

bitdeli-chef avatar jafingerhut avatar michaelklishin avatar ray-metail avatar ray1729 avatar zmaril avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

titanium's Issues

Testing search

Add tests that cover searching through indexed property keys.

the last clear-db call always fails (for me)

this one: https://github.com/clojurewerkz/titanium/blob/master/test/clojurewerkz/titanium/edges_test.clj#L243

it's almost as if, the shutdown isn't finished or something else isn't closed and keeps using (some) files

;; Clojure 1.5.1
;; Switching to clojurewerkz.titanium.edges-test namespace
#'clojurewerkz.titanium.edges-test/test-edges
#<Namespace clojurewerkz.titanium.edges-test>
=> (run-tests)

Testing clojurewerkz.titanium.edges-test

ERROR in (test-edges) (FileUtils.java:1643)
Uncaught exception, not in assertion.
expected: nil
  actual: java.io.IOException: Unable to delete file: \tmp\titanium-test\data\system\schema_keyspaces\system-schema_keyspaces-ib-2-Index.db
 at org.apache.commons.io.FileUtils.forceDelete (FileUtils.java:1643)
    org.apache.commons.io.FileUtils.cleanDirectory (FileUtils.java:1268)
    org.apache.commons.io.FileUtils.deleteDirectory (FileUtils.java:1200)
    org.apache.commons.io.FileUtils.forceDelete (FileUtils.java:1634)
    org.apache.commons.io.FileUtils.cleanDirectory (FileUtils.java:1268)
    org.apache.commons.io.FileUtils.deleteDirectory (FileUtils.java:1200)
    org.apache.commons.io.FileUtils.forceDelete (FileUtils.java:1634)
    org.apache.commons.io.FileUtils.cleanDirectory (FileUtils.java:1268)
    org.apache.commons.io.FileUtils.deleteDirectory (FileUtils.java:1200)
    org.apache.commons.io.FileUtils.forceDelete (FileUtils.java:1634)
    org.apache.commons.io.FileUtils.cleanDirectory (FileUtils.java:1268)
    org.apache.commons.io.FileUtils.deleteDirectory (FileUtils.java:1200)

clojurewerkz.titanium.conf$clear_db.invoke (conf.clj:20)
    clojurewerkz.titanium.edges_test/fn (edges_test.clj:243)
    clojure.test$test_var$fn__7145.invoke (test.clj:701)
    clojure.test$test_var.invoke (test.clj:701)
    clojure.test$test_all_vars$fn__7149$fn__7156.invoke (test.clj:717)
    clojure.test$default_fixture.invoke (test.clj:671)
    clojure.test$test_all_vars$fn__7149.invoke (test.clj:717)
    clojure.test$default_fixture.invoke (test.clj:671)
    clojure.test$test_all_vars.invoke (test.clj:713)
    clojure.test$test_ns.invoke (test.clj:736)
    clojure.core$map$fn__4207.invoke (core.clj:2487)
    clojure.lang.LazySeq.sval (LazySeq.java:42)
    clojure.lang.LazySeq.seq (LazySeq.java:60)
    clojure.lang.Cons.next (Cons.java:39)
    clojure.lang.RT.boundedLength (RT.java:1654)
    clojure.lang.RestFn.applyTo (RestFn.java:130)
    clojure.core$apply.invoke (core.clj:619)
    clojure.test$run_tests.doInvoke (test.clj:751)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.test$run_tests.invoke
 (test.clj:749)
    clojurewerkz.titanium.edges_test$eval3003.invoke (NO_SOURCE_FILE:1)
    clojure.lang.Compiler.eval (Compiler.java:6619)
    clojure.lang.Compiler.eval (Compiler.java:6582)
    clojure.core$eval.invoke (core.clj:2852)
    clojure.main$repl$read_eval_print__6588$fn__6591.invoke (main.clj:259)
    clojure.main$repl$read_eval_print__6588.invoke (main.clj:259)
    clojure.main$repl$fn__6597.invoke (main.clj:277)
    clojure.main$repl.doInvoke (main.clj:277)
    clojure.lang.RestFn.invoke (RestFn.java:1096)
    clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__588.invoke (interruptible_eval.clj:56)
    clojure.lang.AFn.applyToHelper (AFn.java:159)
    clojure.lang.AFn.applyTo (AFn.java:151)
    clojure.core$apply.invoke (core.clj:617)
    clojure.core$with_bindings_STAR_.doInvoke (core.clj:1788)
    clojure.lang.RestFn.invoke (RestFn.java:425)
    clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invoke (interruptible_eval.clj:41)
    clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn__629$fn__632.invoke
 (interruptible_eval.clj:171)
    clojure.core$comp$fn__4154.invoke (core.clj:2330)
    clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__622.invoke (interruptible_eval.clj:138)
    clojure.lang.AFn.run (AFn.java:24)
    java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:615)
    java.lang.Thread.run (Thread.java:722)

Ran 1 tests containing 56 assertions.
0 failures, 1 errors.
{:type :summary, :pass 55, :test 1, :error 1, :fail 0}

Versions of Clojure to support?

I'm breaking the build every time I push now because of dependancies on Ogre and Archimedes. It looks like it's because I'm use (require namespace :refer) in those libraries in some places and that is making the tests with Clojure 1.3 throw errors. Is there any good reason to support 1.3?

Cannot access element because its enclosing transaction is closed and unbound

What am I doing wrong?

(def home (first (tg/transact! (tv/upsert! :roomname {:roomname "Home"
                                                :shortdesc "You find yourself in a bizarre town square"}}))))

(def users (first (tg/transact! (tv/upsert! :username {:username "Root" :type "root"}))))
(def connection (first (tg/transact! (te/upconnect! (tv/refresh users) :in (tv/refresh home)))))

clojuremud.core> connection
#<StandardEdge e[1h-8-2F0LaTPQBM][8-in->4]>
clojuremud.core> home
#<StandardVertex v[4]>
clojuremud.core> users
#<StandardVertex v[8]>

clojuremud.core> (tg/transact! (te/get-all-edges))
IllegalStateException Cannot access element because its enclosing transaction is closed and unbound  com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.getNextTx (StandardTitanTx.java:176)

clojuremud.core> (tg/transact! (tv/all-connected-vertices (tv/refresh users) :in))
IllegalStateException Cannot access element because its enclosing transaction is closed and unbound  com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx.getNextTx (StandardTitanTx.java:176)

Refactor tests

During the merge of Hermes and Titanium, many redundant tests were introduced. Testing is starting to slow down a ton. By combining these tests and then refactoring the remaining tests to minimize the number of times embedded cassandra is opened up, we can get the testing time down and keep development speedy.

Rename delete! to remove!

When writing the documentation, I always referred to delete! as remove!. This should be switched sometime soon.

In memory processing functions

Titan 0.3.0 introduced the inmemory backend. I think there would be real value in being able to spin up an in memory graph and stuff a subset of the main graph inside of there to do what you'd like with it without changing the main graph, whether it be queries, modifications, or whatever. Depending on how Fulgora ends up shipping, this could be very useful.

Implementing this would be as simple as providing a with-in-memory method in graph.clj. It would take in a collection of identifiers of nodes and edges, suck all those objects in from the main graph, and then rebind all the methods inside of the with-in-memory to use the inmemory graph. Soliciting feedback from the Fulgora Folks to see what they will end up shipping.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.