Trigger Happy
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.
Filed under: Bliss, Internals | Leave a Comment
New Data Model
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.
Filed under: Bliss, Internals | Leave a Comment
Bliss Use-Case – The Author
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.
Filed under: Bliss, Concept, use-case | 2 Comments
Bliss as a Project Xanadu Client
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…)
Filed under: Bliss, Concept | Leave a Comment
Dropping Core Data
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
Filed under: Bliss, Internals | Leave a Comment
Navigating an information space
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.
Filed under: Bliss, Concept, UserInterface | Leave a Comment
On formulas…
I’ve been thinking about formulas today. At this time, there is no planned support for any mathematical operations with bliss datasets. The only formula envisioned is a lookup along the lines of xpath.
The more I’m thinking, there is a need for basic maths functions too. Bliss is not designed as an excel replacement, but rather to work in partnership, however without some basic maths available, it will seem dumb for lots of users.
BOMDAS (basic arithmetic)
SUM
AVERAGE
MEDIAN
COUNT
I’m sure that there will be a requirement for more at some point, but these simple tricks will allow the building of most simple and reasonably complex formulas.
The bliss dataset approach does give one trick that excel does not. If you write a formula that calculates the median for a dataset and then later add new items to the dataset, the median will be changed.
Bliss doesn’t really do ranges – datasets only, so there is no chance of the excel problem when growing datasets (this hits me all the time).
Formulas will be put on the end of a dataset path reference – so it’s basically a lookup , Then an operation.
@Requirements(Ref=”R1″).Progress.MEDIAN
This says create a new content object containing the median Progress value from the Document named “Requirements” where that document’s Ref column = “R1″
Having the operator on the end rather than as a function suits the Bliss “object” approach – these are operations that can be performed on datasets.
Filed under: Bliss, Concept | Leave a Comment
May the Source be with you
Today I finally got round to configuring source control on Leopard. It’s been one of those things I’ve been meaning to do for a while. I’ll be storing the source on a memory stick – perhaps a bit dangerous given their fragility, but giving me ultimate portability. Sometimes I’m not online, I’m hopping between my hacbook and my mbp and between a couple of windows machines too, not to mention my linux server – having a (physically) portable repository is the best solution I can think of – with lots of copies – I’ll copy the data to the local hard drive before each swap.
Of course, there is the problem of loss or theft (remember Australia!). I’ll think about that one, but the dilbert pepperspray strip comes to mind.
To get going, I followed Apple’s ADC Guide to configuring subversion. I couldn’t get ssh+svn: to authenticate. A quick google later showed that I wasn’t the only person with that problem.
Apple’s instructions are:
svn+ssh://accountname@hostname/Library/Subversion/Repository/Project1
The only way I could get it to work was:
file:///Library/Subversion/Repository/Project1
Maybe I missed something subtle, but truth be told, it works for me, so I’m happy for now.
Filed under: Bliss, OSX, Project, XCode | Leave a Comment
Bliss Lookups
I want to provide lookup capability in bliss to avoid having the user massively drag and drop related entities. The excel vlookup function is what I’m thinking – i know though that normal business users have real problems with that facility and it’s fundamental to make best use of Excel (imo).
I thought maybe this kind of command
@Requirements(Ref=”R1″).Name
@[..................] ( [.......]=”[......]” ) . [....................] <- using the predicate editor… After typing @ drop down list of documents is shown, then the bracket shows drop down list of columns) etc.
Meaning: display the value from the Name column in another Document called “Requirements” where it’s Ref column is “R1″. (“R1″ could be a column in the current document instead – per normal vlookup use).
Drag and drop will still be available as the “normal” way to do things, the drag and drop way would show this “formula” to the user, teaching the user what to write.
Bliss being a repository system rather than a cell based system, would then just add a new content item. So rather than excel being clever performing batch bulk lookups (that can get slow with the sheets I typically work with), Bliss would create the equivalent of a symbolic link in the unix filesystem, meaning that the same item can exist in more than one place and work just as quickly.
My good friend JimG provided the following food for thought:
“The formula would be shown in status bar (when cell chosen) and in the cell itself (say if user pressed option)”
Just wondered if a more formal “review what I just did” type option might be useful in terms of learning? (Probably it would just show you the “Link Inspector” – just wondering if it might help ease them into becoming a ‘power user’ if they had a means of learing the formula behind what they just did in a way that *seemed* clearly divorced from the work they’re actually doing. i.e. they never *feel* like they have to worry about breaking something).
@Requirements(Ref=1).Name would give me an easy way to see the Name column in context
It’s easy to dismiss – it’s just a quick peek. Once I’m done I want it to go away easily and with no risk to what I’m doing BUT if I need to look more closely that’s not too hard either
1. “the drag and drop way would show this “formula” to the user, teaching the user what to write”
- You should give them an easy way to see this information after they’ve finished the drag and drop. The last thing you want an app to do is interupt what you want to do with something *it thinks* you might want to do. There could be an option to
a) see the formuals as you drag (might suit some peoples way of learning)
b) just review the formula afterwards (in a way that is really easy to find but not too difficult to ignore either
)
c) both
OK, so lookups sorted quite easily, wonder how many other spreadsheet style functions I’ll find the need for (above count/sum etc.).
Filed under: Bliss, Concept, Uncategorized | 2 Comments
The Bliss concept in my head calls for a single repository where all data is stored, but I often find myself leaning towards allowing support for multiple repositories. This post lists the pros and cons of each approach, hopefully allowing a clear conclusion of one approach over the other.
Single Repository – Pros
All data in one place
Simple operation, just start Bliss and get to work
Suits “Bliss Personal” concept, where it’s designed for a single user
Suits the “Unlimited Canvas” model where everything is always available.
Single Repository Cons
Tricky to share a subset of data in Bliss Format (publish/export is the only way)
Single Repository Assumes single computer. I regularly hop between 2 mac laptops and 2 windows PCs – saving of data to memory stick is required.
Multiple Repositories Pros
Bliss becomes more general purpose, there may be valid user reasons to keep datasets distinct. Example – one dataset for requirements management, another for customer relationship management.
There may be legal reasons (e.g. customer address/bank details) to keep data separate, especially if the data is used by more than one party. (Legal reasons actually call for row level security, rather than multiple-flle implentation.)
Allows Bliss to be used as a data storage “cube” for incorporation in other software. Provides a neat user interface for maintaining meta-data for other programmers (e.g. the bliss version control draft/unapproved/published life cycle is a set of rules and meta-data stored in bliss itself.)
Multiple Repositories Cons
Merge feature will need to be provided to combine datasets – templates will already need something along these lines.
Forces the user to think about files and storage, 2 concepts that Bliss is means to shield the user from.
Links between cells that are stored in 2 separate repositories require that both repositories are always available (or linked entities are cached on each side of the link).
Conclusion
OK, ideas for and against listed, I’m sure there are more, but it’s helped me come to a new conclusion where there are merits in both approaches. Once again it’s simply a matter of rethinking the visualisation. There is nothing technically preventing multiple repositories and it does offer user choice and provides a mechanism for loading templates.
The repository will still exist as a universal entity that will show all of the cells that are currently loaded. The user will have the option to “flip” to a file based view if desired.
If a link to an unloaded item is followed, Bliss will attempt to load the link target automatically. If it’s not available, an indicator will light against the cell, letting the user know what’s wrong.
This partitioning feature could make Bliss faster, though core data will only load as much from disk as is needed, so perhaps not.
Filed under: Bliss, Concept, UserInterface | Leave a Comment
Recent Entries
Categories
- about me (1)
- Bliss (14)
- Concept (6)
- Internals (3)
- OSX (1)
- Project (1)
- ScreenShot (1)
- Uncategorized (2)
- use-case (1)
- UserInterface (4)
- XCode (1)



