Emacs org-mode is very powerful tool for personal knowledge management, but can be hard to learn, makes it hard to have the same content (notes) referenced in more than one place, and can be awkward for the hands.
Finding other tools inadequate for various reasons, I wrote OneModel to meet my own needs, and made it available. If you touch-type, it is extremely fast for to-do lists and notes of all kinds, and I generate the project web site from part of its data. It is much easier to learn and faster to navigate than emacs, and you can have the same content in as many places as desired, without duplication.
But it wants to be more: It uses an internal structure that has big future ideas for knowledge management, like embedding code within groups of entities, or linking across OneModel instances, so you can choose to share data from your personal organizer, or subscribe to (or copy) data from other instances: like a wikipedia but where the internal knowledge is structured so can be used for computation, rich queries etc. Imagine asking a system: what villages in history had economic improvements in a 4-year period, all external conditions being equal, and what do those cases all have in common?--that is the long-term vision of the system. The vision and internal structure are intended as be a prototype of a platform to manage all mankind's knowledge as a usefully computable whole.
The web site has a few screen shots (remember it's an ugly prototype but works well! -- I have my calendar/life notes/todos/contacts etc in it now) and a demo system to play with without installing anything.
(It is written in scala, using a simple/approachable coding style that should be readable by most programmers with just minutes of scala knowledge--I hope--and uses postgresql for the data.)
I frankly don't mind if someone else takes the ideas and does a better job with them: we can do better than managing mankind's knowledge in the form of huge sophisticated piles of words: words are not the real knowledge but a superstrate over it, and they are hard to compute well. Feedback welcome.
I guess I'm not good at making things clear; sorry about that. But I use it to organize all my thoughts, and to get around really efficiently because everything is basically a single keystroke (or a few) away. It is both, today, a more-efficient note-taking tool (collapsible outlines, textual mind maps), but has an internal structure to model knowledge more independently of the words. Wikipedia for example, has very many words. But is not very easily computable. OM is designed to be computable (that part is future, but that's the idea).
The philosophy of the program ... if the web site's explanations aren't enough, then I need to get a tech writer because I really put a lot in there. If you think of what an object model is (in a way: objects with names, relationships between them, attributes), that is what the app lets you create. And (though it's not fully working) assign classes to objects. Then, in the future, code to classes.
So it's an object model built on the fly. So now the app lets you not only create the equivalent of collapsible outlines (more efficiently than org-mode and letting you put the same thing in more than one place). But now we also have as a representation of knowledge, that really lets you store anything you want, even as complicated as "John is moody because he thinks Sally thinks he forgot their anniversary," not necessarily as words but as *data*: thoughts vs. expectations, relationships between people, dates, etc. The various attribute types assignable to entities, relationship types that can be created, etc., should all allow that, though it is not fully demonstrated. I guess I didn't make that clear. Maybe I should make videos and whitepapers.... We really hashed it out in some of the design discussions years ago, and I demonstrated it fully then I thought, but maybe I'm not explaining it well now.
Consider a simple pen on your desk. What you know about it can be expressed as numbers, relationships, and code: mass, owner, manufacturer, component parts, newtonian physics, etc. You may not choose to model all those things (= put them in OneModel) in some form, but you definitely could put in the parts about it that you desire. Then mentally extrapolate that to scale up to all the knowledge you care to express (ie, whatever you make notes about), in the single system (which I believe can handle it, especially with all the future features in place, but it can now too, really).
Then (this part isn't developed yet but is the real power that I envision), you have data and I have data that relates to each others' data. We can link those, like web pages or wikis link to topics. But we because it is an object model, and has a structure, the linking (or subscribing, copying, whatever fits) can be done in a way that is also structured, and can have code around it to make the pieces fit and work together well. Maybe I'm also not explaining that well.
But at that point, we have shared our knowledge with each other, in a structured way. We have integrated our two systems in a way that, unlike wikipedia, is highly computable. And unlike emacs, is easy to learn and use (or so I have thought), and more efficient (physically, for the hands and mind, for entry and navigation).
Now mentally add another feature (which like the sharing noted above, also isnt' there yet because there aren't enough users to warrant it): A given entity in the system is the same entity regardless of its name. Just like in the real world, a house can be a casa or a domo or whatever but its *data* is the same thing: it has the same numbers, relationships, and code. Thus, knowledge is independent of human language. We can share the same knowledge across cultures, if we choose to, because it really is the same thing regardless of the name you use for it.
I think the above, combined with the network effect, can allow us to organize mankind's knowledge as a whole. I'm sorry if I'm still not explaining it well. But I appreciate very much the chance to try.
I'm giving this away for free. I might sell binaries or hosting, but it's all there for free, with code. I think it is really useful. OTOH, maybe I wrote it too specifically to my own personal requirements or something.
I tried to explain these things in the web site in the various links under "vision"--but does the above do any better?
Let me help you out. What does it do? How is it better than alternatives?
Today, it is like a collapsible outline, note-taking system, that is really efficient from the keyboard to navigate, and where you can link to any content from anywhere (unlike most anything with text files, AFAIK).
You can take notes with it. Rearrange them easily, up and down in a list, or up/down in the hierarchy. Link them to each other. Navigate across links with simple keypresses. Make deeply nested lists. Link lists to lists. Compose long paragraphs and attach them. Or do more complicated things if desired, by creating relationship types and using those.
It's better than the alternatives because the navigation takes fewer keystrokes, you don't have to read a manual (it's all on the screen, or so I thought), you can have the same thing in as many places as you want (unlike org-mode AFAIK), it is Free (some alternatives are, others are not), and it has immense future potential for becoming a better-structured wikipedia, if we work together.
Yah, needs a video.
Just getting a tech writer isn't enough if the tech writer doesn't know what to write. The skill of a tech writer is in organising and presenting information clearly, not in figuring out what the information is.
Wandering around your website, it looks like a mind-map listing the things you'd like an information-organizing system to do. The kind of things a marketing manager would want customers to believe, not the kind of thing a technologically-inclined person would want to understand in depth.
It doesn't explain its architecture or its engineering except to mumble something vague about objects and relationships.
I did sign up for the mailing list, by the way, hoping I might end up learning something definite.
Thanks, especially for your candor. I accept your comments about the site. Your being on the regular list (not just announcements) would let me ask if my later improvement efforts help enough. Feedback is something the project has really needed.
How is this for an initial description of the architecture (beyond the "About" page then "what it is today" link, which mentions simplified scala and postgres):
- everything is an "entity", represented by the entity table. An entity has a name (or in the future I hope, any number of names, with one chosen for display based on context or user preference). Names can be 160 characters long (it just "felt" right as the length for making & rearranging rough individual notes, without the note becoming a paragraph which goes in a TextAttribute). In addition to attributes, entities have a creation date (i'm thinking of adding an edited date), an "archived date" (which makes them hidden from most use, which I currently use to mark off done tasks or past calendar items; calendar items, BTW, I just write like a to-do entity, with a quick date in a list, and sort them, then ck it each day, which isn't ideal yet but works better than the other stuff I've tried). Entities also can be marked as public, non-public, or null (not specified), and data exports (to text outline or html) can filter on those values.
- entities have attributes, including:
- QuantityAttribute (per a Martin Fowler book), with number, unit and type: for example, 5 meters length. Meters and Length have to be defined as entities (not done automatically yet, nor made sharable...maybe should be as part of sharing, or user feedback). QuantityAttrs also have a date on which they are known valid, and a date on which they were observed, which the UI lets you use or ignore by just hitting Enter.
- DateAttributes have date and type, for example 2010-1-1 and "birth", where "birth" is an entity.
- BooleanAttribute similarly has a boolean and a type, and valid & observed dates.
- FileAttribute (lets you add blobs/whatever to entities) has file content and metadata, including the original path and md5sum, and other metadata.
- TextAttribute lets you put in arbitrary text, including very long, and I use it for paragraphs, quotes, or stack traces, but the original intent was more to put in something like a serial #. It also has valid/observed dates.
- RelationToEntity: link entities to each other. One can be specific and make types (...is child of, lives next to, owns, whatever kind of relationship...), or use the UI quick option which is just "has" (and comes predefined in the system).
- RelationToGroup: of debatable use now, but might become more useful when code is associated with classes. Today, groups of entities are created when importing data from a text outline. Groups can also have class uniformity optionally enforced.
Not many conveniences are there yet (sharing/distributed instances, and better UIs are obviously big), but I think with some thought when using OM, that should let one "model" just about any knowledge, at least as much as what one might ever personally enter into a system.
Details on the data are in this file: https://github.com/onemodel/onemodel/blob/master/src/main/scala/org/onemodel/database/PostgreSQLDatabase.scala [github.com]
What else about the architecture would help?
Do you think I should put material like in the "About" / "what it is today" / "internals" page, or refactor those & put it somewhere else, or neither?
Yes, this presentation helps. It should be in the "about" page. It says what the conceptual model is. It could even be what everyone here is asking for. The demo version gives me not a clue what's going on. I think I need this information just to understand what the screenful of instructions mean.
Personal pet peeve for information management systems like this:
Why must everything be named? Anonymous entities/content can sometimes be a godsend, especially when dealing with "indexed data" which only really differs by the index value.
I agree. This probably should be accounted for in OM when there are use cases (with users) driving the priority.Because all the conveniences aren't in OM yet, sometimes I cheat just by putting whatever is the info, in the entity name. But that doesn't lend itself to computability long-term and isn't a good practice once the ability to use code or have object templates is in place.
So, a lot of what you are describing as your vision sounds to me like the vision behind the Semantic Web. I feel you would be well advised to read up about the Semantic Web, and figure out how to leverage the existing information (especially ontologies) that is being developed toward that end. That would allow you to focus your efforts only at the remaining portions of your data model, which are the more subjective ones, which is probably what you really want to do anyway, I'm guessing.
Wikipedia even recognizes this to some degree. There is (or at least used to be--haven't checked in a while) a project called Semantic Wikipedia, to elicit structured data to undergird Wikipedia articles.
Thanks for bringing that up.
1) I think the data model needs to evolve farther and faster than any individual or consensus will allow, so any ontology breaks down when trying to cope with our very-much-in-progress-for-a-long-time effort to understand reality and write what we learn.2) That has the problem of being based on human language, which is fickle etc etc as I've tried to write somewhat on my web site, if you browse through the links under "vision" (which itself is buried under "More about..." or FAQs):
http://onemodel.org/1/e-9223372036854615514.html [onemodel.org]...and under the FAQs where I mention the semantic web (currently the 5th bullet here):
. If you have time to digest some of those things to see how the OM vision differs from anything that uses words at the lowest level, I'd be very interested in your feedback.