Reboot

28Sep11

So, I’ve been playing with various technologies for the last while, especially the interesting Javascript based Appcelerator. If appcelerator had a cell based view for the iPad, or at least drawing capabilities, I would have used it there and then – I’m sure these things will be added as the platform matures, but meantime I should focus on the mac, rather than be lured by mobile and cross platform concerns.

This puts Bliss back on the map as my primary hobby, can’t be anything else meantime with work, baby and busy home-life. I’ve decided to reboot my bliss efforts because talking about this thing for what’s approaching a decade still hasn’t got it up and running.

I posed in an earlier post that I would get this off the ground unlike similar efforts from the past, but thus far I’ve delivered nothing.

To get me started, I’m going to produce a simple app that’s capable of being a repository of my thoughts, kind of like a simple database app. Once I’ve got that done, I’ll think about where to take it from there.


Test Publish to wordpress


Well here goes. Now changed my language over to Java because I’m keen on cross platform engine, Discovered the wonderful JUNG library for manipulating and presenting graph data structures. Hooking that up to SQLite for my data storage for Bliss personal and I think I’m good to roll. 2 weeks holiday.

should be BLISS! ;-)


It’s been so long since my last post that the snow has reappeared!

I’ve made a mockup of a configured blissapp. This is for requirements management

Oh and in other news… Decided to write all future bliss software in Java… The cross platform thing is just too important. Will likely write an OSX interface in ObjC/Cocoa at a later date since that’s my OS of choice and I tend to dislike Java Swing interfaces.


Trigger Happy

07Apr09

Now that I’ve freed my thinking from core data, I’m beginning to get my teeth into SQLite. It features triggers a trick that means that I can perform some lovely automatic denormalisation of the data model to keep quick access to the current version of any cell whilst maintaining a full audit trail. I’m really having fun with Bliss and the good news about the SQLite triggers is that they are completely cross platform unlike the cocoa presentation layer. Don’t get me wrong, I like cocoa, but I’m acutely aware that I’ll need to rewrite the presentation layer for each platform, so the more that I can pack into the database itself, the better.


New Data Model

25Mar09

after a bit of work thinking about how the bliss data model should look and having built at least a dozen test models, I’ve finally settled on something that seems to suit performance and expandability. That means that I’ll next rebuild the strings only prototype using the new structure. The structure is heavily normalised, so i’m going to build a data access layer class to perform the operations. I’m thinking that this is all very un-cocoa but it’s what I know and I might as well leverage my strengths. using the adapter pattern concept, I can make things look to cocoa how it wants them, so the innards of my data storage don’t really matter.


Reading about project xanadu has got me worried, I’m one of the worlds worst procrastinators. Since it took 38 years to get some kind of prototype of xanadu out, the idea has become dead in the water. xanadu was voted the number 1 piece of vapourware by wired magazine! Bliss will get written. It’s not vapourware. To get onto the right footing, I’m going to investigate use cases that are outside my own domain. I’ve often discussed Bliss with my friend Jim (a budding author) and the use case we always get round to is writing a book. There is domain specific software out there for writing books, but Bliss will allow books to be written better than those pieces of software because it will allow the user to define their own domain – e.g. the typical book writing software will allow you to maintain lists of characters, plots, places, subplots etc. What they don’t have is the ability to expand their domain to include specific lists of information that are going to be useful for someone writing, say, a novel about the second world war. Here you want to keep lists of information about dates and times of events around which to weave your narrative, lists of weapons that were in use, lists of wartime recipes, wartime vehicles etc. Basically Bliss can be used as a research tool as well as a simple word processor.

Basic entities (better word required I think, entity is a bit too geeky)

Plot – Subplot
Character – Back Story – Relationship
Place – Event
Research – Dates, Lists

Writing a novel,
1. you’d create a new bliss document for the overview and contents
2. you’d create a new bliss document for each chapter
3. you’d link each chapter back to the overview
4. you’d create a new bliss document for the cast of characters
4.1 you’d create a new bliss document for each character, writing their back story
4.2 you’d link the characters back to the cast of characters
4.3 you’d link the characters together with a links describing the relationship, how they met, etc.
5. you’d create a new bliss document for the places
5.1 you’d create a new bliss document for each place
5.2 you’d link the places to the characters, describing their relationship with the place, multiple characters could be linked to one place and those unions described
6. you’d create a new bliss document for events
6.1 you’d create a new bliss document for each event you were interested in
6.2 you’d link the individual events to the list of events, along with places and characters
7 You’d create a timeline
7.1 you’d link the people, places and events to the timeline, describing how they interact
8. you’d create an ad-hoc list of objects you’re interested in
8.1 you’d link the objects to the people, times, places events…

9. profit!

the work of the author is still going to be in the narrative that you create, the story will live or die on that, not on the tool you used to write the document, but the one thing that’s true is that it will be handy to have all the objects, people, places, events and times visible within the software and linked together.

To satisfy this use case – lists of stuff will need to be able to be docked around your working area, cast of characters should be able to be linked to a chapter, say, and then be highlighted when you’ve selected that chapter, so you’d quickly see what your intentions were when you’re working on that chapter. Bliss is mean to be a mental placeholder system to expand on the mind’s natural abilities.


The first rumblings of Bliss began to come to me back when I was doing higher computing at School (a Scottish qualification, similar to English ‘A’ level).  At that time, I was using Hypercard on an apple macintosh.  I was very impressed by the information storage and linking capabilities, something that early versions of windows kind of copied with cardfile and then abandoned.  All that is available out the box on retail operating systems is notepad or textedit (i have to branch off linux because it has the lovely tomboy notes and others coming standard).  Hypercard also had programming as well as simple hypertext, we did some classes on programming, but not having a mac at home, I satisfied my programming urges initially with turbo pascal, then c.

I’ve just recently come across Project Xanadu, a hypertext idea that predates TimBL’s WWW system.  It’s remarkably similar to what I want Bliss to do.  I mean AMAZINGLY similar.  The same ideas are right there and these guys were thinking about them in 1960!  That’s 13 years before I was born.

Now strangely enough, I’m interested in collaboration, but for the short term I’m more interested in single machine stuff. Later corporate network and then finally some internet.

The project Xanadu rules (from wikipedia):
Original 17 rules
1. Every Xanadu server is uniquely and securely identified.
2. Every Xanadu server can be operated independently or in a network.
3. Every user is uniquely and securely identified.
4. Every user can search, retrieve, create and store documents.
5. Every document can consist of any number of parts each of which may be of any data type.
6. Every document can contain links of any type including virtual copies (“transclusions”) to any other document in the system accessible to its owner.
7. Links are visible and can be followed from all endpoints.
8. Permission to link to a document is explicitly granted by the act of publication.
9. Every document can contain a royalty mechanism at any desired degree of granularity to ensure payment on any portion accessed, including virtual copies (“transclusions”) of all or part of the document.
10. Every document is uniquely and securely identified.
11. Every document can have secure access controls.
12. Every document can be rapidly searched, stored and retrieved without user knowledge of where it is physically stored.
13. Every document is automatically moved to physical storage appropriate to its frequency of access from any given location.
14. Every document is automatically stored redundantly to maintain availability even in case of a disaster.
15. Every Xanadu service provider can charge their users at any rate they choose for the storage, retrieval and publishing of documents.
16. Every transaction is secure and auditable only by the parties to that transaction.
17. The Xanadu client-server communication protocol is an openly published standard. Third-party software development and integration is encouraged.[2]

Lots of ideas there, I’m not too interested in the royalty idea because I see Bliss as being used in a corporate environment, but that asides, the level of parallelism between Bliss and Xanadu is outstanding.

I suppose this tells me a few things
1. There is nothing new under the sun
2. It’s harder to properly implement than I can appreciate (otherwise where is it!)
3. It’s something people have been waiting for, for a long time!

I’ll focus on number 3, I’m just happy that I live in the UK where software patents don’t apply (yet…)


It is with a heavy heart…

After playing with Core Data for quite a while, I found myself fighting with how it worked more than taking advantage of it’s goodness.  

The main problems I found with core data were:

1.  Core Data assumes (or at least works best) with a static database structure

The very fact that I was attempting to create a structure that was self-describing in many ways was replicating the way Core Data was working.  It felt to me like I was trying to create Core Data using Core Data – that way leads madness!  It was possible to create the Bliss prototypes using Core Data and it was quite nice, but I felt that I was creating workarounds at every turn – something that felt to me like it would be a nightmare to maintain – maybe just my inexperience of course, but I was certainly spending more time than I was saving.

2.  Core Data is not cross platform

Bliss will live or die on the fact that it is cross platform.  I briefly considered a web interface for this very reason, but I discounted that because it would need a server – a thing that goes against what I’m trying to achieve for Bliss Personal (I’ve not talked much before about the Bliss Personal / Bliss Corporate split – more on that in a future post).  Now I know that the rest of Cocoa is not cross platform (open source alternatives like cocotron asides), but it’s possible to write similar code on the various platforms, at least following the same basic structure, Core Data put the cat amongst the pigeons for that goal because there is quite simply nothing quite like it for Win&*nix

3.  No SQL allowed

One of my strengths over very many years use is SQL.  The lack of SQL in Core Data began to feel like quite a pain.  Something that I could describe in SQL in a neat sentence was taking lines and lines of code.  The Cocoa docs all wax lyrical about the best line of code being the one you don’t need to write, however it seemed to take forever in practice to execute what I consider simple data manipulation and querying.

 

I’m now considering my options.  I’ve decided to drop Core Data (and it feels like a weight off my shoulders truth be told).  I think I’ll use SQLLite datasource like core data.  That way I can still take advantage of the modelling tool provided with XCode, but I’m basically cutting out the middle man.  I might be showing up my non object background, but I might as well work to my strengths.

I’m also a big fan of XPath (you’ll probably recognise influences if you look at my formulas post).  So I’m considering having the in-memory document as xml with a sql back-end.

In Conclusion:
Upsides: Cross Platform & SQL
Downsides: No Bindings & No Automatic Object Pool 


The idea behind Bliss is more than the entry, publishing, sharing and linking of related information. Used cleverly, general purpose tools from spreadsheets to wikis and specialised tools like project management software and requirements management software provide all of these capabilities.

Bliss needs to be more and that more is giving the information a sense of place. By place I mean that the user must be able to navigate within their information space, whatever they decide that is. Take the example of an author who is writing a book, the obvious things to store are chapters and paragraphs. Beneath the actual text of the book is the back stories of the characters, the details of the locations, the history leading up to the events in the novel. Not all of these things ultimately make it to the finished manuscript, thought they are in the mind of the author – together all the pieces comprise the author’s information space.

At it’s very simplest, separate documents with each of these elements could be used by the author to compose their opus. The new thing that Bliss brings to the party is the fact that the links between the bits can be entered into the computer. Once linked, all of the pieces can be thought of as physical places. The Bliss interface needs to be able to present the user’s information space in such a way that reinforces the locational aspect of the data.

Interface ideas:

Islands of information. A map metaphor can be used to navigate information with islands representing the major theme – say a book, towns representing the key breakdowns, characters, locations, events, manuscript. This is a very literal representation of place and could work well.

Universe of information. A 3 dimensional star chart (thinking of Elite!) could also be used. In this metaphor, major themes are split into solar systems. The sun is the major theme – the manuscript, the outer planets could represent the characters, locations, events. If desired, the planet’s surface could contain islands, though perhaps mixing the metaphors is not useful. I guess that Galaxy is better to avoid overlap with Business Objects “Universe” term. The good thing about the Galaxy metaphor are the sci-fi concepts of time and space travel and star trek wormholes, the idea that you can warp from one place to another is well received in popular culture.

Town of information. Taking a step back to the 80s, I imagine the image used in the TV Gameshow The Crystal Maze. When the contestants moved between the various zones in the maze, a wireframe visualisation of the whole space was shown. The major theme could be a building, the floors of the building could contain the sub divisions.

Important comment. These views are designed to be a clever ADDITION to the Bliss UI, not the be-all and end-all of the interface. The bliss data structure allows the user to create a complex graph, these visualisations add the sense of space to that graph and are useful when the user wants to walk the graph, data entry and manipulation will be possible in the 3d spaces, but a plain old 2d spreadsheet view, document view might suit the user’s need better.

Thinking back to a tony buzan book I read in the 80s, tony always maintained that constructing a mental space was key to his mnemonic memory system, the idea of the information space is to give that capability to those people who have less well developed visual brains.




Follow

Get every new post delivered to your Inbox.