Amy Guy

Raw Blog

Sunday, December 16, 2012

Week in review: Not much again

10th December - 16th December

Boy, this Week in Review thing really highlights when I haven't done a lot, doesn't it?  I guess that's the point.

I spent most of the week not getting round to writing up and analysing my notes from the conferences.

We had an Ontologies with a View meeting.

I made a few connections and sent a few emails.

I did lots and lots of useful, but non-PhD-related things.  Honest.

Saturday, December 08, 2012

Week in review: Conferences

3rd December - 9th December

I went to the 1st International Open Data Dialogue (#odd12) in Berlin on Wednesday and Thursday, and gave a lightning talk at Digital Methods as Mainstream Methodology (#dmmm2) in London on Friday.

Both were brilliant; I met a ton of interesting people, learned loads and gained much inspiration.  My extensive notes are in the process of being typed up and thought about, and will be published on here as soon as humanly possible!

Now I'm going to catch up on sleep that crack-of-dawn flights and many hours of train journeys have denied me recently.

Monday, December 03, 2012

Week in review: Not much

26th November - 2nd December

I read a paper about Semantic Web tools for online communities.  Large parts of this project are comparable to my own, I think, and I will probably keep going back to it for inspiration.

I did a lot of non-PhD related things, too.

Wednesday, November 28, 2012

Advice: willful misunderstanding, and audience as individuals

Picked up on some great advice during an afternoon-long course entitled 'How to do an Informatics PhD' a couple of weeks ago.

All through my undergraduate, and probably High School as well, I was told that when writing assignments I should treat the person marking it as if they don't know anything at all about the subject.  They're stupid.  Leave nothing unexplained.  Of course, we were often also told to 'keep things concise' and usually had to do this under the constraints of page or word limits.

Problematically, some people could have interpreted this as an opportunity to try to pull the wool over their marker's eyes, or baffle them with science.  Typically, the marker will know something about the subject, so that's probably not a great tactic.

I see where this advice comes from of course, and a couple of weeks ago I heard it phrased in a different way, that makes far more sense.

The examiner will be knowledgeable about the subject, but given to willful misunderstanding of what you're trying to say.

I think that gives a much better guide to how and when to explain things.  And also makes them more of an enemy to be conquered, than an inconvenient fool to be deceived.

And whilst I'm recounting advice I like, here's something that has stuck with me since 2010, from my manager at Google at the time.

When presenting to a large audience of people, don't think of them as a crowd.  Think of them as many individuals.  Make your presentation as you would to a single person.  It just so happens that there are lots of single people there all at the same time.

Since letting that sit in my subconscious, nerves before giving a presentation have shrunk to negligible levels.  It may be that over the past two years I've become more confident anyway, but I used to be thoroughly terrified of standing up in front of even a classroom of people the same age as me.  I wouldn't talk out in lectures for the most part of my undergraduate, and harbored a gut-wrenching fear of being picked on to answer a question.  As did most people, I imagine.

I make sure to actively observe how I feel when watching someone else present.  I look at other people in the audience too, and note the attitude and techniques of the presenter.  (Consequently I probably leave having no idea what the presentation was about).  The results are usually that a majority of people aren't listening properly.  A vast proportion certainly aren't angrily judging the presenter's every twitch.  Things people notice and get upset about include:

  • If they can't hear you.  
  • If you're just reading off slides, particularly if you try to act like you're not.
That sure is a short checklist of things to avoid.  There must be more that can go wrong.  Reasons people will stop listening, include:
  • If they can't hear you.
  • If you're just reading off slides, particularly if you try to act like you're not.
  • If they're not interested in what you're talking about. (Pro tip: make them interested).
  • If you're not making any sense at all.
  • If your slides are more interesting than what you're saying. (I really like presentations without slides.  So long as the speaker is engaging, of course.  Slides with lots of words are a definite negative, in my book though).
And some of my personal nitpicks include:
  • Drawing attention to a mistake by apologising for it.  From being on both sides of this situation, it usually feels right to do so at the time, but until you do, four fifths of the room won't have noticed, and the fifth that did will forget within the next few seconds.  Point it out, and everyone will remember.
    • If you say something wrong, just correct yourself and move on (but don't leave it uncorrected, this is usually noticeable).
    • If it's a technical problem, keep talking whilst it gets sorted.  This boils down to not relying on technology to keep your presentation interesting.  I am aware that there are some situations where this is impossible.
  • Weak intros and outros.  I've been guilty of both of these.  I plan to pay more attention to upcoming talks in order to fix this.  It's something I always forget to notice.  But for now:
    • Starting with filler words, like 'So, ...', 'Right then...' or 'Okay, ...'.
    • If you've been introduced, you don't need to repeat it, especially not in a way that draws attention to the fact you're repeating it. 
    • Make it clear when your talk is done.  Don't trail off with '...and that's that then.'  'Any questions?' is usually okay, but only if it follows a distinctive final sentence.  Jumping to that from what feels like half way through a paragraph is a bit rubbish in my head, but in all honesty will probably go unnoticed by the audience.  Except me.

Fortunately, my days of feeling agonisingly self-conscious whilst presenting are long gone.  On top of that, I find doing as little 'rehearsal' as possible boosts the natural fluidity of a presentation, and in turn my confidence.  If I haven't rehearsed, there's nothing to forget to say (and suddenly forgetting what comes next is the biggest killer of flow, something I discovered during French oral exams).  That only works if you're very familiar with the subject matter.  And if you're not, you probably shouldn't be presenting about it.

Disclaimer: I'm very early in my academic career, and haven't presented a whole lot.  The biggest audience I've talked in front of was about 120.  Despite the theory, I suffer from having neither a naturally loud voice, nor a naturally beaming expression.  So all round, I'm probably not very good.

Monday, November 26, 2012

Notes about Semantic Web tools for online communities

K. Faith Lawrence & Dr. Monica Schrafel (2007)  Amateur Fiction Online - The Web of Community Trust: A Case Study in Community Focused Design for the Semantic Web. Intelligence, Agents, Multimedia (IAM) Group, School of Electronics and Computer Science, University of Southampton.

NB. Need to read her full thesis, of the same name.  Will probably clear up some of the questions I scribbled whilst reading the paper.

Finding out if Semantic Web tools can be brought to hobbyist groups on the Web.
  • Uses the online fiction community; suggests they could benefit from:
    • improved searching
    • improved meta data
    • automatic recommendations
    • trust webs
    • personalisation.
  • A HCI project, so usability tests and comparisons with current systems are key.
Related work
  • Community centered design
    • to determine user needs - through continual interactions and user studies.
    • to consider how reader-facing apps present themselves and particular community
      • responsibility of being a portal - need clear affordences and points of failure.
  • Trust and Semantic Communities
    • The semantic web “provides a common framework that allows data to be shared and reused across application, enterprise, and community boundaries.” - Tim Berners-Lee, James Hendler, and Ora Lassila. The semantic web. Scientific American, May 2001.
    • Do we trust:
      • metadata
      • data
      • mechanism by which data is returned
      • person requesting data?
    • Many definitions of trust.
    • Jennifer Golbeck's trust onotology to go with FOAF (Jennifer Golbeck, Bijan Parsia, and James Hendler. Trust networks on the semantic web. In Proceedings of Cooperative Intelligent Agents 2003, 2003.): ratings of 1 - 9 for trust of associates.  Extended for FicNet (this paper) 
    • Here, trust: "the expectations that arise that an individual will not act in a way that is detrimental to another individual or community."
      • I might need to expand that for my stuff... maybe... maybe this will do.
Case study
  • Community predates the Internet. (duh)
  • Necessary to get opinions from people outside of the amateur writing community, because it is broad. Such as parents/guardians of members.
  • Questionnaire
    • General information
    • Reading habits
    • Community involvement
    • Access and distribution of materials
  • Questionnaire distributed by:
    • requests to archives to pass on to members
    • LiveJournal
    • emails to specific interested parties
    • mailing lists / bulletin boards of relevant special interest groups.
  • In two weeks, 1116 responses, from 30 countries.
  • Used to inform ontology design for FicNet, and OntoMedia.
Fan Online Persona (FOP)
  • Extension of FOAF, tailored for needs of online readers and writers.
  • foaf:person -> fop:persona
  • Separates environments for on and offline
  • fop:NomDe - context for name
  • Illusion of anonymity is fundamental to fanfic community (who are a large part of online amateur writers)
  • Most authors have one or more pseudonyms.
  • 80% said email address is the most personal information they should be asked for.  ('of the 80%, 15% said no personal information should be requested from anyone - does this make sense? Do they mean other than email address?  but that's the 80... If they're in the 80, they can't be part of that 15...)
  • Privacy is the main thing holding back FOAF (Joseph Smarr. Technical and privacy challenges for integrating foaf into existing applications. Presented at 1st Workshop on Friend of a Friend, Social Networking and the Semantic Web, September 2004.)
  • Personas aren't meaningless, because people become very attached to them, and only create new ones for specific reasons (says who? No citation..)
  • Expands foaf:document and foaf:groups
  • Creation, exchange and review of works is the point of these communities.
  • FOP dismisses FOAF info like work and school as irrelevant or potentially dangerous.
    • [Me]  I think the on/offline divide won't be so extreme for many amateur film makers (another story for consumers) because often their faces are in their movies... Also anecdotal evidence from my own experiences that I'm open to having proven to be a minority.  Actors vs characters is an interesting distinction too.  One amateur film maker can have many personas, even across one channel of output.
  • Options for FOP determined through long term study of metadata commonly attached to works. (Something I can do, too).
  • FilmTrust by Golbeck (just joined, it was closed last time I looked).
    • Could be prettier... but 2169 members!
    • Visualisations of the network - I need to get good at this.
  • Reader has to trust info from author falls within a certain level of accuracy.  In amateur writing, it is more acceptable to be over cautious than lenient.  Differing standards of acceptable content.
    • Less trust is lost if a story is underrated than overrated (resulting in disappointment)
    • A minority mislabeling work has a big effect on reputation of an archive/community (HelpingHands community members. A place to pitch in and help - a website creation resource and project. LiveJournal Community, 2005.)
  • Writer has to trust reader to make the right decision.
  • FicNet has a more specialised trust system than Golbeck's.
    • Largest contention in this field is adult material and younger readers (debated because this contrasts with IRL - no restricted areas in book stores, or suitability rating scheme for books).
    • Initially focussed on age.
    • Personas could vouch for each other.  Creating fake personae to validate another wasn't worth payoff?  Non malicious statements of distrust?
    • How to integrate trust and distrust webs?
  • Ontologies developed, ready to be used by applications!
    • Ontologies will be continually refined.
    • Now designing applications.
      • Using info already gathered via quesitonnaire, re: UI, functionality.
  • Integrate with OntoMedia to describe works, and link works with people.

=> How did they get to talk to the parents of younger users?  Did they ask the members to put them in touch?  That doesn't seem like a realistic expectation to have, to me..

Week in review: Pancakes & Project management

19th November - 25th November

I read two papers about ontology development methodologies.

I read two articles by Bennett Haselton about decentralized social networking, which happened to pretty much sum up and beautifully articulate everything about that that has been floating in my subconscious for a couple of weeks.  I saw links to them in the latest Circumventor email, which I've been subscribed to since High School for bypassing the internal blacklist, and remain subscribed to because the jokes at the end are always laugh-out-loud funny.

I attended an all day course entitled 'practical project management for research students'.

  • It was attended by a diverse bunch of seemingly really lovely people.
  • The two ladies running it, from the IT Project Management department in the University, were lovely too.
  • The stuff covered was all obvious, common sense stuff (and pleasantly the organisers didn't try to claim otherwise) - but sometimes it's helpful to have it all written down and waved in your face.  And structured, in particular.  Made me actually focus on thinking about organising my project.  The main thing I hadn't much considered, even subconsciously, was formally identifying stakeholders for a project and their relative interest/power in the project.
  • There are a bunch of tools at to aid in project management.
  • It prompted me to do these week-in-review posts, as I realised I haven't been recording properly everything I've been doing (an overview of my time goes on my calendar, but no detail).
  • The sandwiches weren't great, but fortunately when I got back to the Forum there were massive slabs of chocolate cake left over from some event.  I love the Forum.
I booked a place at the 1st International Open Data Dialogue in Berlin, and necessary flights.
  • Despite the short notice, it worked out logistically because I need to be in London on the 7th anyway, so I can simply go to London on the 4th, fly to Berlin from there for the 5th and 6th, and back to London for the 7th.
  • I'm particularly looking forward to "Open Statecraft: Openness as a Means (not an End)" by Philipp Müller, "The Open Data Movement vs. Business Models - is this a Contradiction?" by Dr. Peter A. Hecker, "Linked Open Data @ W3C-Vocabularies, Working Groups, Usage Scenarios" by Prof. Felix Sasaki, "The potential of Open Data for improving urban sustainability" by Dr. Marianne Linde and "Towards Trustworthiness: Establishing Transparency with Open Information Flows" by Dr. Edzard Höfig.
  • I'm also looking forward being in Berlin again, even if it is just for one evening, and I'll probably be too exhausted to appreciate it.
Ontologies with a View took place at a different place and time to usual.
I started preparing for presenting at Digital Methods as a Mainstream Methodology in London in a couple of weeks.
  • I scribbled lots of notes.
  • I skimmed a few papers by organisers/speakers but didn't read any in detail yet.  Mostly stuff about analysing data gathered from comments, tweets etc. 
  • There will be more about both of those things next week, I imagine.
I made a plan for the two weeks following the 20th.
  • It mostly consists of finishing my Digital Methods preparation.  I have a lot of non-PhD related things to do as well, plus lots of travelling.  Also graduation from my MSc, and subsequent parental visitation will get in the way.

Wednesday, November 21, 2012

Notes about ontology creation methodologies (2 papers)

Yesterday I unexpectedly read two whole papers about ontology development methodologies.  They were open in tabs I don't remember opening, but presumably did so during our weekly Ontologies With A View meeting last Friday.  There are still a bunch more tabs open with papers or articles about the same thing, so maybe I'll read those later..

The notes are here more or less as I scribbled them down whilst reading, and I haven't expanded with any analysis or discussion as of yet.

Notes in purple are things I intend/need to investigate further; colour-coding is just for me, really.

Jean Vincent Fonou-Dombeu & Magda Husiman (2011)  Combining Ontology Development Methodologies and Semantic Web Platforms for E-government Domain Ontology Development.  International Journal of Web & Semantic Technology (IJWesT) Vol.2, No.2, April 2011 

  • Start by describing ontology in a human-readable way, then turn to RDF (etc) to be machine readable.
  • Says there's not sufficient practical research around existing technologies or ontology development guidelines that would allow non-experts in e-government domain to make ontologies.
  • Uses framework from Uschold & King (see later in this post) to describe ontology - technique used here should be platform independent.
  • Then uses UML to semi-formally represent ontology
  • Uses Protege and Jena to convert to OWL and RDF
  • Paper's goal is to produce guidelines for e-government developers to create semantic content AND strengthen adoption of Semantic Web technologies in governments (particularly developing countries).
  • Outlines RDF, OWL, Protege and Jena (described as leading platforms; mentions other platforms: WebODE, OntoEdit, KAON1, Sesame).
  • Very critical of other literature; either ontologies have been produced but no practical information given; they've been developed with proprietary platforms; or they're only conceptual and don't say how they could actually be constructed with existing technologies.  other studies have not focused on a methodological approach, which means nothing is easily repeatable.
  • Detailed comparative studies of methodologies in:
    • M. Fernandez-Lopez, “Overview of Methodologies for Building Ontologies, ” In Proceedings of the IJCAI-99 workshop on Ontologies and Problem-Solving Methods (KRR5), Stockholm, Sweden, 2 August, 1999. 
    • H. Beck and H.S Pinto, “Overview of Approach, Methodologies, Standards, and Tools for Ontologies,” Agricultural Ontology Service (UNFAO), 2003. 
    • C. Calero, F. Ruiz and M. Piattini, “Ontologies for Software Engineering and Software Technology, ” Calero.Ruiz.Piattini (Eds.), Springer-Verlag Berlin Heidelberg, 2006.
  • Case study: Ontology for monitoring development projects in developing countries (OntoDPM)
    1. Create with Protege:
      • class heirarchies
      • slots
      • domain and range of slots
      • Based on the UML
      • Saved as OWL
    2. Then put content in RDF with Jena

Mike Uschold and Martin King (1995*) Towards a Methodology for Building Ontologies. Workshop on Basic Ontological Issues in Knowledge Sharing, IJCAI-95.
  • Steps:
    1. identify purpose
    2. build ontology
      • capture
      • coding
      • integrating existing ontologies
    3. evaluation
    4. documentation
  • Purpose
    • Many ontologies are intended for reuse
    • Should survey purposes to clarify options for future projects
  • Building
    • Capture
      • Identify key concepts and relationships in domain of interest
      • Produce unambiguous text definitions for these
      • Identify terms for these
      • Agree on all of the above
    • Coding
      • Explicit representation of conceptualisation in a formal language (choose a language)
    • When can capture and coding stages be merged?
    • Differences between building ontology and creating a general knowledge base (thinking about methodology will help with this)
    • Integrating (during either or both of above)
      • Work must be done in agreement between communities
      • Make explicit all assumptions underlying an ontology
  • Evaluation
    • Judge against requirements specification (and/or)
    • Judge against competency questions (and/or)
    • Judge against real life
    • This paper looks at knowledge base systems, and adapts for ontologies.
  • Documentation
    • Desirable to have established guidelines for documenting
    • Main barrier to effective knowledge sharing is inadequate documentation
    • ALL important assumptions should be documented
  • Case Study
    • Main emphasis is on capture phase
    • Initially:
      • define ontology (Gruber)
      • identify users and usage (initially abstract, then clarify with real life)
      • choose language (Ontolingua was chosen)
      • choose method for capture - BDSM (IBM) supported by others:
        • KADS
        • IDEF5
        • OO Analysis and Design techinques
        • Gruber's principles for ontology design
    • Categorisation is fundamental to the human condition (Lakoff)
      • Not heirarchical, but:
        • GENERAL
             BASIC  ->  primary with respect to knowledge organisation
        • eg.
                SUPER:   Animal    /   Furniture
                BASIC:    Dog        /   Chair
                SUB:        Retriever /   Rocker
        • Certain concepts used subconsciously, rather than understood intellectually.
          • These have a more important psychological status.
        • Therefore paper uses middle-out approach to capture terms
          • (bottom-up = too much detail unnecessarily,
          • top-down = risks imprecision)
        • BASIC concepts first because:
          • most important
          • used to define non-BASIC terms
          • increase clarity, especially for non-technical use
          • backed by BSDM experience of paper author
  • Scoping
    • Brainstorming
    • Consult corpora if there aren't enough domain experts to brainstorm
    • Grouping
      • structure terms into naturally arising sub-groups
      • collate synonyms
      • consider things that might refer to each other
  • Meta-ontology
    • Don't commit too early, can restrict thinking.  Let concepts and relationships themselves determine requirements.
    • Be consistent.
    • Use technologically neutral language ('thing' vs 'entity').
    • Start with areas where there's most overlap.
    • Work from basic terms to more abstract ones within an area.
  • Producing definitions
    • Agreeing on definitions (varying degrees of problems)
    • Handling ambiguous terms
      • clarify ideas without technical terms
      • use a dictionary!
      • label definitions, eg. x1, x2
      • determine most important concept
      • choose a term, avoiding original ambigious one
    • Avoid new terms
    • Terms get in the way (peoples' preconceived ideas) - concentrate on underlying meaning and concepts.

Friday, November 09, 2012

National Novel Procrastinating Month

It's day nine, and I'm on two thousand, eight hundred and seventy words.

A quick calculation might tell you that that means I'm quite behind schedule.  This may be my worst year yet.  There's still plenty of time to get back on track though!  Right..?!

I've only spent any time writing on about three or four of those nine days so far.  But I have been to a conference, organised some SocieTea events, read bits and pieces related to my PhD, cleaned my flat, watched a few episodes of Arrested Development, learnt some new crochet stitches and started crocheting a hat, and baked a lot.

I did meet the Edinburgh NanoBeans and had a great time at the write-in in Pulp Fiction last Wednesday.  We may have spent more time collaboratively developing the backstory of Pedro the Guide Bear (a troubled young grizzly attired in an Elvis costume and boater hat who constantly struggles against his estranged father, Yogi, the leader of an organised crime syndicate) than actually writing our novels though.

I have learnt one particularly important thing this year, that's never come up before.

Talking ideas through with other people is really useful!  

Last Sunday, Beth helped me explain the absence of a main character's mother and fix a potential looming plot hole with one fell swoop.  Telling Kit about the various civilisations and layout of the land in my world allowed him to pick holes and question things, raising, and partially solving, some things that didn't make sense or yet more potential looming plotholes.  And Caitlin (a new NanoBeans writing buddy) pointed out that just because a character had been anticipating reading a letter for the last thousand words, didn't necessarily mean the letter had to contain anything interesting... it could be a disappointment to the character... which helped, as I hadn't figured out what the letter said, and all of a sudden the character was opening it.

I sure wish blogging about Nano counted towards the word count.

Monday, November 05, 2012

Remediating the Social #elmcip

I spent the last few days in Edinburgh College of Art, helping out at the Remediating the Social conference.  I was in charge of making sure everyone's microphones were on, and slides were being projected, which turned out to be more work than anyone anticipated.  Only minor hiccups occurred though, usually when I unplugged something I shouldn't have by accident.  I couldn't have done it without my glamourous assistant José, who was the master of fiddling with Macbook screen resolutions to make them play nice with the projector.

More importantly, I saw some super interesting talks, and met and talked to some fantastic smart people about electronic literature, and other things.

I also presented about Palimpsest, in front of the biggest audience I have ever talked in front of.  Go me.

Videos of everything from the conference are here.

On the last day I implemented an idea that had been kicking around the back of my mind for a while, which was the Uninformative Twitter Wall, or Twitter Squares.  It's nothing particularly complex; it uses jQuery and probably has memory leaks.  I'd love for people to help themselves to the code and improve it. Converting a hash of a tweet text into a hex code, I generated coloured squares for the results of a search term.  If the feed you choose is updating a lot, then the squares move around quickly and it looks pretty funky.  If there are only occasional new tweets, then it looks less exciting, but is still equally useless for seeing what people are saying.  (Unless you hover over the squares).  That's okay though, because it's Art.

Wednesday, October 31, 2012

National Novel Writing Month

That's write right, it's the eve of Nanowrimo.

Last year, my MSc got violently in the way and I clocked out at about 15,000 words.  I'm hoping that this year, my PhD will make friends with my month of literary abandon, and both will come out better for it.

I stumbled into a new world last May, wandered around and met some characters over the summer, and have been mulling over them ever since.  I put pen to paper to draw a map today, and discovered that more of the world was there than I thought.

I have three viewpoint characters, and next I'm going to draw some squiggly lines on a piece of paper to figure out where their paths cross, and what might happen to them along the way.  Over the years I'm becoming more inclined towards plotting in advance, but a large part of me never really thinks it'll help.

I've been reading A Song of Ice and Fire, and am now gagging to create a world with half as much depth and drama as GRRM has done.  Mine will be fantasy, with a hint of sci-fi and a dash of Ancient Egypt (probably no medieval knights).

This year I'm going to work in yWriter in an attempt to keep on top of things as I expand settings and characters.

I'm hoping to attend more than just the launch party for the Edinburgh Nanobeans group this time round.  Though they do meet across the wrong side of town, so I might also start my own write-ins (consisting of just me) in Himalaya Cafe on South Clerk St. (it's ever so comfy, and the chai is the best).  If you're writing too, and in that neck of the woods, come and join me.  I'm tentatively saying I'll be there between 10 and 11am every day (except Sunday, they're closed), starting on the 5th.  (This is going to cost me a fortune in chai, isn't it..)

Stay tuned for progress updates.  Or lackthereof.

PS. I know I promised notes on papers related to my PhD... One day.  One day.

Monday, September 17, 2012

University 3.0

Even though I don't officially start my PhD until the 1st of October, today really felt like a proper first day of term.  I got up early went to a couple of fourth year/MSc classes that I've decided to sit in on (HCI and Text Technologies), went to training for tutoring/demonstrating, filled in some forms, got my new student card (that doesn't expire until 2016!) and most importantly, got the key to my office in the Informatics Forum.

My PhD ideas are vague at best right now, though it'll definitely be within the realms of the Semantic Web.  According to the proposal I wrote to apply for the position back in May, it'll be to do with provenance of and collaborative creation of digital media artefacts, like comics and films.  It'll be interesting to watch that morph and change.

Though I became aware of Semantic Web stuff during my undergraduate, I developed my knowledge during my MSc at Edinburgh.  Primarily by taking the Multi-Agent Semantic Web Systems course for credit, enjoying it a lot and doing pretty well.  (I should be TAing/marking for that this year).  I also learnt lots about linked data and other such things at conferences and hacks like Dev8D, and various open data meet-ups.  I'm super excited about the future of the Internet - particularly making sure it remains an open, public platform for uncensored expression and knowledge sharing (fingers crossed).  Since I'm a technologist, not a lawyer or policy-maker, I have to address this with theoretical and practical research around how people create and share things, and ways to improve connectivity (between people and data), which of course includes the big problems like privacy, security and identity.

Whilst I'm confident enough to say I know quite a lot about designing and developing for the Web these days, my Semantic Web knowledge really consists of a basic grounding, and a lot of enthusiasm.

There's a ton of research going on in various related areas, so I've decided to read one or two relevant academic papers a day... forever, I guess... and make notes on what I read.  Publishing my notes here works as a subconscious stimulant, to make sure I actually get it done.  A lot of them might be foundations, or basic stuff, but I intend to cram as much as possible - especially in the couple of weeks before I start propertly.  So look out for those! (If you're interested.  If not, ignore them).

Wednesday, June 13, 2012

Shifting focus (from readers to authors)

By sheer coincidence, I find myself neck-deep in creating a custom Interactive Fiction engine during a year in which all kinds of new engines for authoring and enjoying interactive narrative are popping up. Many of these by established programming and literary experts in the IF community.

It feels like every week Emily Short posts a review of something new. Most of the ones I've seen recently are more of a Choose Your Own Adventure format than parser-based. Nonetheless, there is a lot I can learn about world modelling and code-free authoring from these systems. Not all of them are open to the public for creating though. All of them seem to be open to Emily Short, however, and she is doing a great job of describing and reviewing her experiences.

It occurred to me a while ago that creating the interface for authoring pieces for Palimpsest is potentially more interesting and important than examining the reader experience when it's all done. Readers are much more fickle, and those who spend time writing and creating are by definition the committed and passionate. I'm not saying the readers aren't. But a solid interface for authoring is going to make it much more likely that good experiences for readers are to be created. If I rush through the design and build of the software itself so that I can focus on filling it with content then quizzing readers about the immersiveness of their experiences - as was my original plan - there's a good chance I won't spend nearly enough time testing with authors (as I'll be doing the authoring) and will miss the opportunity to allow people to create immersive or particularly engaging experiences, jeopardising the outcomes of the user study stuff in the end anyway.

I only have about two months left to work on this in the context of my MSc. Whilst I need something substantial to fill my final report with, I'm certain I'll be continuing to develop this in the future, and I'll only end up having to redo bits from scratch if I cut corners the first time.

I also have to think about what I want to get out of my MSc, and how I want to use the opportunities I have studying in an art department compared to what would be expected of me studying in a computing department.

I jumped on the idea of 'user study stuff' because I know how to do this in terms of software, and I know how to write a lot about it.  Not that I don't find the immersion thing interesting, but overall I think it would be more valuable to both myself and any eventual users of Palimpsest if I produced documentation of detailed musings about the perhaps unfinished or forever-ongoing development of a custom engine and authoring interface for Interactive Fiction, rather than gloss over that to fill my report with lots of nice statistics and quotes and analyses about reader experiences that are ultimately invalid anyway.

And I can do this for an 'art' project, where the journey is equally, if not more, important than the outcomes.  Where for a 'computing' project, the documentation of the journey has in my experience generally been intended to be a build up to an overarching theoretical or practical conclusion.

So next up, look out for a discussion of the various engines for different flavours of interactive narrative that have been popping up / I've been noticing recently, coming soon to a blog near you!  (This one.  This is the blog it'll be coming to.  Not any old blog near you).

Thursday, May 24, 2012

Character sketching

Suddenly I find myself having to write some fiction to a deadline.  A deadline that isn't Nanowrimo, that is.  This isn't something I've had to do since my English language GCSE.  I deliberately avoided pursuing creative writing in any formal or academic manner, for fear the joy would be sucked from something I love; for fear it would become a chore, or an obligation.

But this semester I've imposed this on myself out of determination that my supposedly 'interdisciplinary' masters actually deviate from Web or software development at some point.  Not that making writing fiction a part of my final project has in any way reduced the programming.  Indeed, I've just added it on top of an already substantial project outcome.

But making an Interactive Fiction engine feels much more valuable if I actually write some fiction for it, doesn't it?

Suddenly, realistically, I have mere weeks to get this done.  My subconscious has been working on it since about December of last year, but I haven't had many committal thoughts.  So it's time to make (and justify) some decisions.

I already decided that, quite obviously really, the piece needs to revolve heavily around the city of Edinburgh.  (Obvious, as the reader will be experiencing it whilst wandering around the city, and I'm studying the affects of physical environment on immersion in a text).  As such, I figured doing research about local myths and legends, particularly stories relevant to specific places, is pertinent.  Look out for updates on that.  Historic and mythical local characters might be useful too.

Ian Rankin has famed the Edinburgh streets with his novels, but I'm no crime writer, nor mystery nor thriller.  I write science fiction and fantasy; imagining new worlds comes far more naturally to me than conjuring stories in this one.  And my time is too short to venture into an unfamiliar genre.  So this leaves me trying to figure out how to set a story on the real world streets of Edinburgh whilst maintaining a fantastical element so that I keep my sanity and confidence in the prose.

One potentially helpful aspect of Interactive Fiction, is that generally the stories are written in the second person.  The main character is a perspective taken by the user/reader/player.  This means there is a primary role that I don't have to develop too much as a character.  Just enough to fit in with the context of whatever plot starts to develop, but with adequate openness to allow the user to project themselves into the character's place.  Nonetheless, I'm going to need some attachment to this character in order to engage myself in the writing process.  I know from experience that I'm far less motivated to write about/for characters who don't interest me, but when I discover a character I feel really involved with, I miss them and desire to write more.

That's the interesting point, really.  I don't feel much as though I'm writing characters or their stories, but discovering them and learning about them through the writing process.  I've lost control of characters before; they've behaved unexpectedly or undesirably, sometimes even changing the whole course of a previously loosely planned plot. The same might apply to imaginary places or even objects.

Because I don't have time to find a fresh character, world, setting that I love, I have concluded that I need to hook this story back to something I've written in the past.  Something I'm already invested in.  This connection is only meaningful to me (until the glorious day the still unfinished, few-year-old novel gets published!) so it needs to be loose.  But enough to give me context.  The connection I have settled on is Milo's World, the subject of my 2008 Nanowrimo; my only successful attempt at reaching fifty thousand words in thirty days, though I have yet to write the ending to the story.  Also part three needs rewriting completely, those were dark days.  Not to mention the rest of it.  But that's neither here nor there.

The important thing is, I met a couple of characters with whom I had great fun.  I hung out with them for massive chunks of their childhoods.  I learnt what makes them tick, and I learnt their secrets.

The point-of-view character in Milo's World is Dusty.  I first met him as a four year old, and quickly discovered he had access to a secret world, where he regularly snuck off to play with a boy his own age, Milo, who seemed to live full-time in this world.  They had all sorts of innocent adventures, and gradually met other occupants.  I spent time with Dusty and Milo again aged eight, to find that not much had changed.  They had befriended some strange creatures, and were privvy to experiences they could not understand yet.  At age twelve, they were growing up.  Dusty has gained a few home-world friends, has developed an amazing talent for drawing caricatures, and his parents have long since assumed that he's over the 'imaginary friend' stage.  But his grip on their 'reality' is disjointed.  There are more kids around in Milo's world, living in a network of tunnels and working and playing together, and with the creatures of the world.  One species of creatures in particular have introduced curious technologies and ways of thinking.  When Dusty is sixteen years old, he is balancing regular high school drama with other-worldly adventures, but just barely.  He and Milo are working with one of the creatures to learn about a contraption that they played with in their youth, and have dubbed The Reality Machine.  Using it is hit and miss, and many of the things they find out about it, they learn the hard way.  When Milo's world and Dusty's home-world begin to bleed together through misuse of the Machine, things start to take a turn for the confusing.  Cue the hilarious, semi-cliffhanger ending, strongly linked with Dusty's drawing skills, I haven't written yet.

So where am I going with this?  In my Palimpsest story, Dusty is grown up.  Long since grown up.  He is old, mad-scientist-proffesor-ly, and living in a world that bears the consequences of his actions as a child.  Right away we have the existence of and ability to cross between alternative realities (via an understood and controllable Reality Machine, in case you hadn't cottoned).  Splendid.  I'm in my comfort zone already.  So how about... the playable character is Dusty's lab assistant.  Their age, gender, appearance, don't matter.  Their temperament matters probably only a little bit.  What matters is the fact that they have the ability to zip around in space and time.  Whaddya know?  Every single exciting era of Edinburgh's history is open to us to explore.

All I need now is a reason Dusty might have sent his assistant across to Edinburgh in our version of reality; something to pursue, something to figure out.  Or just a malfunctioning Reality Machine.

I call this a start.

As always, comments and suggestions welcome!

Thursday, May 17, 2012

Stylesheet organisation

About a year and a half ago I realised I needed to get a grip on how to organise my CSS.  I established a template, which I proceeded to change drastically with every new project.  I noticed recently that I've been reusing a version for the past few projects, with at the most only minor amendments to the general structure.  I also noticed how quickly I'm rolling out initial designs using this template.

I have finally reached the point where I figured out what I consistently reuse across projects, and finally have a stylesheet structure that makes such intuitive sense to me I can dart around and make changes with my eyes closed.  I find my stylesheets are much smaller, but even as they grow, I still know exactly where everything is.  I wish I had some statistics to quote about the amount of time spent scrolling through CSS looking for things.  I'm confident it is much reduced.

Some aspects of my workflow I developed through intuition; I made changes that felt right to me at the time, without really consulting anyone else's best practices.  Other things I picked up from here and there.  Every now and again I'd search for 'the right way' of doing this and find processes and systems that didn't gel with me (a primary example of this being the number of pre-built grid systems I tried and hated).  Eventually I would give up under the sheer number of contradicting points of view, but I probably picked up some subconscious inspiration on the way.

I hadn't thought much of this until Chris Eppstein talked about this at FOWD today.  A lot of the suggestions he demo'd are very similar to parts of my system (conceptually at least; he was discussing SASS and mine is raw CSS).  So I figured it's reached the point it is worth sharing.

First things first, I start with a basic Initializr stylesheet; a couple of minor tweaks, but then I largely accept the helper classes and IE fixes and hacks (no need to read this; it's just here for completeness):

/* ======================================================================
HTML5 Boilerplate CSS:
========================================================================== */

article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
audio:not([controls]) { display: none; }
[hidden] { display: none; }

html { height: 100%, font-size: 62.5%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
html, button, input, select, textarea { font-family: sans-serif; color: #222; }
body { height: 100%; margin: 0; padding: 0; font-size: 1em; }

::-moz-selection { background: #fe57a1; color: #fff; text-shadow: none; }
::selection { background: #fe57a1; color: #fff; text-shadow: none; }

a { color: #00e; }
a:visited { color: #551a8b; }
a:hover { color: #06e; }
a:focus { outline: thin dotted; }
a:hover, a:active { outline: 0; }

abbr[title] { border-bottom: 1px dotted; }
b, strong { font-weight: bold; }
blockquote { margin: 1em 40px; }
dfn { font-style: italic; }
hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
ins { background: #ff9; color: #000; text-decoration: none; }
mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
pre, code, kbd, samp { font-family: monospace, serif; _font-family: 'courier new', monospace; font-size: 1em; }
pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
q { quotes: none; }
q:before, q:after { content: ""; content: none; }
small { font-size: 85%; }

sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
sup { top: -0.5em; }
sub { bottom: -0.25em; }

ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
dd { margin: 0 0 0 40px; }
nav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }

img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }

svg:not(:root) { overflow: hidden; }

figure { margin: 0; }

form { margin: 0; }
fieldset { border: 0; margin: 0; padding: 0; }
label { cursor: pointer; }
legend { border: 0; *margin-left: -7px; padding: 0; white-space: normal; }
button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
button, input { line-height: normal; }
button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; *overflow: visible; }
button[disabled], input[disabled] { cursor: default; }
input[type="checkbox"], input[type="radio"] { box-sizing: border-box; padding: 0; *width: 13px; *height: 13px; }
input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { -webkit-appearance: none; }
button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
textarea { overflow: auto; vertical-align: top; resize: vertical; }
input:valid, textarea:valid {  }
input:invalid, textarea:invalid { background-color: #f0dddd; }

table { border-collapse: collapse; border-spacing: 0; }
td { vertical-align: top; }

.chromeframe { margin: 0.2em 0; background: #ccc; color: black; padding: 0.2em 0; }

/* ===============
    ALL: IE Fixes
   =============== */

.ie7 #title{ padding-top:20px; }

/*                                         */
/* My styles go here!                      */
/*                                         */

/* =============================================================================
   Non-Semantic Helper Classes
   ========================================================================== */

.ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; *line-height: 0; }
.ir br { display: none; }
.hidden { display: none !important; visibility: hidden; }
.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
.invisible { visibility: hidden; }
.clearfix:before, .clearfix:after { content: ""; display: table; }
.clearfix:after { clear: both; }
.clearfix { *zoom: 1; }

/* =============================================================================
   Print Styles
   ========================================================================== */
@media print {
  * { background: transparent !important; color: black !important; box-shadow:none !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: */
  a, a:visited { text-decoration: underline; }
  a[href]:after { content: " (" attr(href) ")"; }
  abbr[title]:after { content: " (" attr(title) ")"; }
  .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }  /* Don't show links for images, or javascript/internal links */
  pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
  thead { display: table-header-group; } /* */
  tr, img { page-break-inside: avoid; }
  img { max-width: 100% !important; }
  @page { margin: 0.5cm; }
  p, h2, h3 { orphans: 3; widows: 3; }
  h2, h3 { page-break-after: avoid; }

My template is inserted into the appropriate point of the Initializr stylesheet.  I divide into five sections:

/* 0 Accessibility */

/* 1 Typography */

/* 2 Colours & borders */

/* 3 Spacing & layout */

/* 4 Images & video */

I start each section with empty media query clauses for 480px and up, 768px and up, 1024px and up, and 1200px and up.  By the time a project is done each section will typically have from one to six media query breakpoints in it, according to requirements.

0. Accessibility

A staple of this so far is:

 0 Accessibility
.no-css {
 /* This class hides stuff that needs to be around for screenreaders or users with no CSS, but not in normal circumstances */
 position: absolute; left: -1000px;

Which I chuck in when I use visuals to enhance some content, to hide an appropriately positioned textual equivalent.

There's probably more useful stuff that should be here. I'm working on it. (Suggestions welcome!).

1. Typography

Not a lot going on here. Some obvious placeholders, plus a couple of classes I found myself needing over and over, which should be self explanatory (.win and .fail are applied to success or error messages; usually a form submission is involved).

 1 Typography

h1 {}
h2 {}
h3 {}
h4 {}

p {}
a { text-decoration: inherit; }
a:hover { text-decoration: underline; }

.note {
  font-size: 1em;
  font-weight: bold;
  text-align: right;

.wee {
  font-size: 0.8em;

.win, .fail {}

In typography, I strictly only include font stuff like faces, sizes, alignment, decoration and enhancements like text-decoration, font-weight.

2. Colours and borders

Border styles go here because they need to be defined before the border colours are. Otherwise, just colours go here:

/* Borders */
  .win, .fail { border: 2px solid; }

/* Dark */
  .dark { color: #2d2d2d;}
  .dark-bg { background-color: #2d2d2d; }
  .darker{ color: #000; }
  .darker-bg { background-color: #000; }

/* Primary Color */
  .color1 { color: green; }
  .color1-bg { background-color: green; }
  .color1-border { border-color: green; }
  .color1-texture { }

/* Secondary Color */
  .color2 { color: yellow; }
  .color2-bg { background-color: yellow; }
  .color2-border { border-color: yellow; }
  .color2-texture { }
/* Tertiary Color */
  .color3 { color: red; }
  .color3-bg { background-color: red; }
  .color3-border { border-color: red; }
  .color3-texture { }

/* Light */
  .light { color: #ccc; }
  .light-bg { background-color: #ccc; }
  .lighter { color: #fff; }
  .lighter-bg { background-color: #fff; }

.note { color: silver; }

.win {
  background-color: #E6EFC2;

.fail {

After border styles, I start with the colour scheme, creating classes for text colours, background colours and border colours. It's unusual to need to go beyond a tertiary colour, and typically I only have primary and secondary. This leaves me with classes I can apply to any elements in my html templates, making it really quick and easy to experiment with different colour combinations. The color*-texture classes come in handy when I have textured backgrounds that match the colour scheme, and would include the background image (a repeating square of noise texture for example) and a background-colour as a backup.

Most of the time I don't want to be applying classes to everything to add colour though. I list elements that I'm confident aren't going to change in the mark-up which need colours applying to them, for example:

    2 Colours and borders

/* Primary colour */
  .color1, body { color: green; }
  .color1-bg, nav, footer { background-color: green; }

/* Secondary Color */
  .color2, nav { color: yellow; }
  .color2-bg, body { background-color: yellow; }

/* ...etc... */

I'm a fan of using off-white and off-black, so these are what I originally picked for my .light and .dark classes, which are always handy to have. Sometimes pure black and white are necessary too though, so the .lighter and .darker classes were born.

You can see .note, .win and .fail show up here too.

This pretty much means this is as long as the colours section will ever get. I don't apply colours anywhere else in the stylesheet, and it helps to ensure I stick to a colour scheme and don't get carried away with exceptions. Obviously, this also makes it super easy to change the colour scheme uniformly in a couple of seconds.

3. Spacing and grid

As I already mentioned, I have poked around with some of the existing flexible grid frameworks but none of them grabbed me. They all seemed to have too much. The minimalist system I came up with has answered all of my needs so far, although I wouldn't claim it's suitable for _every_ project in the world. It's also subject to tweaks, depending on the project of the moment.

I stick with Initializr's .wrapper class, which is 100% width until the viewport reaches 1024px, when it snaps to 900px wide. This is my default because it's been the most frequently appropriate so far. I have an ongoing project at the moment where the target audience are largely gamers, so capitalising on the excessive screen real estate they'll probably have means I stripped out this restriction in favour of a full width multi-column layout when the device allows.

I haven't yet had a need to go above five columns for my grid. I express my class names like fractions, and start off with only the 1/2, 1/3 and 2/3 ones taking up the correct proportion of the screen, with the others defaulting to 100%. This then changes for wider-than-small viewports, as you can see.

There are a few navigation list related things in there that I often find myself duplicating across projects (like a default centre-aligned stacked menu which progresses to a floating horizontal version). I pad my a elements (as opposed to their containing li elements) to enlarge the touch area for links. Plus some nth-child stuff for three column layouts, for keeping consistent row heights when the column heights are different.

 3 Spacing & Grid

.wrapper {
 width: 100%;

/* Grid */
.w1of2 { width: 50%; float: left; }
.w1of3 { width: 33%; float: left; }
.w2of3 { width: 66%; float; left; }
.w1of1, .w1of4, .w1of5,
.w3of4, .w2of5, .w3of5, .w4of5 {
 width: 100%;

.inner {
 padding: 1em;

nav {
 max-width: 100%;

nav a {
 display: block;
 padding: 0.8em;

.inline { display: inline; }

.win, .fail {
  padding: 0.2em;
  display: block;

/* 3.1  */
 @media screen and (min-width: 479px){
  nav li { float: left; }

/* 3.2  */
 @media screen and (min-width: 768px){
  .w1of2 { width: 50%; float: left; }
  .w1of3 { width: 33%; float: left; }
  .w1of4 { width: 25%; float: left; }
  .w1of5 { width: 20%; float: left; }
  .w2of3 { width: 66%; float: left; }
  .w3of4 { width: 75%; float: left; }
  .w2of5 { width: 40%; float: left; }
  .w3of5 { width: 60%; float: left; }
  .w4of5 { width: 80%; float: left; }

  .w1of3:nth-child(odd) { clear: none; }
  .w1of3:nth-child(3n-2) { clear: both; }

/* 3.3  */
 @media screen and (min-width: 1024px){
  .wrapper {
   width: 900px;
   margin-left: auto; margin-right: auto;

Everything that goes in this section is to do with spacing: padding, margins, positioning, floating, wrapping... et cetera.

4. Images and video

Most projects call for tweaks to images that may or may not fit into the other sections of the stylesheet. Nonetheless, my brain copes better with I group them all together. Flexible YouTube video embed lives here too.

 4.0 Images and video

.vid-holder {
 position: relative;
 padding-bottom: 56.25%;
 padding-top: 30px;
 height: 0;
 overflow: hidden;

.vid-holder iframe,  
.vid-holder object,  
.vid-holder embed {
 position: absolute;
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;

/* Full width images on bigger than small screens are dumb. Reset this. */
@media screen and (max-width: 478px){
  .w1of1 img, .w1of2 img, .w1of3 img, .w1of4 img, .w1of5 img,
  .w2of3 img, .w3of4 img, .w2of5 img, .w3of5 img, .w4of5 img {
    width: 100%;

And that's what I start all projects with. Here is it all assembled, with a few of the classes throw into the mark-up so you can see what's going on. If (when) I end up doing another major update, I shall probably write about it again.

Sunday, May 13, 2012

UI for IF

This is the first in an upcoming series of posts about my final project for my MSc by Research.  For those who don't know, my programme is Interdisciplinary Creative Practices, or ICP for short, and my main focuses so far have been on Interactive Fiction (IF) and the Web.  My final project needs a log book.  Traditionally such a thing would be compiled by me at the last minute based on notes scattered around my workspace, emails to myself and entries on Google Calendar and Tasks.  It's high time I got a grip on my organisation and did this properly, so blog posts tagged "icpLog" will help me keep a proper track of ongoing thoughts and progress.

For my final project, I endeavour to create in a "location-aware Interactive Fiction engine".  If at this stage you don't know what IF is, read this nice description by Emily Short.

Historically IF is programmed using one of several specialist languages along with specialist software packages.  The one I am most familiar with is Inform 7, a brilliantly simple but incredibly powerful natural language.. language.. which is perfect for non-programmers who want to create IF.  I haven't actually made anything myself with Inform yet (I plan to, in the name of research), but I have read a lot of source code and tutorials.

Similarly, IF is traditionally played/read on a user's computer, in their local environment.  The open source JavaScript IF interpreter, Parchment, brings playing IF to the Web; much more flexible and shareable, and enabling of many possibilities.

One such use of Parchment can be seen in Playfic, which appeared around March this year.  Playfic offers a fully in-browser Inform development environment for authors, similar to the Inform software the experienced would be used to running on their own machine.  And of course, an online read/play interface for the IF consumers.

This interface affords the user the chance to share their work-in-progress with the IF community.  The source code for all of the games can be viewed, making it really easy for newcomers to learn how to get started, and for anyone to figure out how a particularly creative experience or interesting quirk has been achieved.

One of the aims of my project when I laid out my ideas last October was to lower the entry barrier for prospective new IF authors.  Having spent several years weaving in and out of technical and non-technical environments or groups of people, it's plain to see that even Inform might be daunting to some.  Whilst it appears like uber high-level natural language to us programmers, for a writer, things like verbose if statements, oddly structured sentences and repetition of logic that would be inferred by a human from just a few words, can be pretty alien.

In other words, the programmer in me looks at Inform source code and sees prose; no complex syntax to remember, and logical and basic programming concepts.  The writer in me doesn't see prose; she sees awkwardly formed statements and struggles with maintaining the fluidity of a story whilst attempting interlace it with conditions and behaviours of things.

I'm sure if they work together, they can figure something out.

But more importantly, I'm sure my creatively split personality can offer some useful insights when it comes to designing my own online interface for IF authoring.

During a few weeks in April this year, I built the first iteration of Palimpsest, as my project is so named, around the requirements of some folk from the University of Edinburgh's English Literature department.  Concentrating on the 'location-aware' part and ignoring the 'Interactive Fiction' part, the current alpha allows the author to input bodies of texts and allocate them areas on a map.  The user, upon starting a particular 'experience' on their smart mobile device, could wander around a particular area and have these texts dynamically pushed to them, to read in the surroundings intended by the creator.  English Lit. are using this to deliver historical and contemporary literary works written or set in Edinburgh, as part of the celebration of 250 years of Edinburgh literature.  There's more work to be done for them before it meets all of their specifications, and it'll be premièred during the summer.  I built it on Google AppEngine with Python and jQuery and at the time of writing anyone can sign in and create an 'experience' for their own city, at

It's time for the project to branch, as I must turn my attention to the IF side.  I will be pondering the source code of Nick Montfort's Curveship for inspiration about processing user input (one of my initial ideas was to adapt Curveship itself to add the location-aware aspect and a Web interface, but the complex narrative stuff that Curveship does goes waaay beyond my needs, and I think that would end up being more complicated than starting from scratch).

I will also be filling my flat with paper sketches of user interfaces for the authoring of Palimpsest works.  I need ways to model characters (playable and non-playable), locations and connections between locations (shouldn't be too hard, as this will be based on the real world), objects and their properties, and interactions with objects and characters.  I have so far concluded that I need a system of actions and consequences; I should be able to apply this to everything.  Most importantly, I need to a user to be able to input this information as if they were writing a story.  Obviously there will still be some differences; it may be a disjointed story, spread across a series of input fields.  But there won't be any degree of programming syntax, or unnatural prose.  The system needs to do that work, and help the author to put the right information in the right places to allow this.  For the programmatically-inclined, we could perhaps consider the writing of a traditional story (novel, etc.) as procedural writing, and the writing of a Palimpsest interactive piece as object-oriented writing.  Maybe.  We'll see how that analogy holds up as the project progresses.

In terms of functionality, all that I'm really changing compared to regular IF is stripping out the directional commands - north, south, east, west, and alternatives - and replacing them with physical movement.  The system will know where the rooms in a particular story are on a world map, and the wonderful HTML5 geolocation API will know where the player is (once they've given permission for Palimpsest to track their device).  I've already done this.  It works.  There are varying degrees of accuracy.  If you're in a building, you're looking at between fifty and two hundred metres of accuracy, depending on your device.  Outside, I had it accurate to three metres, and the average was five to ten.

Now all I need to do is... everything else.  The idea of building an IF engine from scratch is pretty daunting, especially given the huge complexity of actions people can squeeze out of languages like Inform.  Palimpsest will have nowhere near these capabilities, not at this stage, and I need to remember not to get hung up on that.  I'll probably leave out scoring, and whilst saving progress is a must, 'undo' won't be a priority.  With Inform you can create random events and complex algorithm-based behaviours of objects and characters.  That's not going to happen for Palimpsest this round.  I also can't shake the nagging inferiority I feel thinking about the usefulness of the Inform development environment in letting you visualise paths through your narrative to check for bugs and dead ends.  My subconscious will be working hard on a solution to that, but I can't hope too hard for it to be an outcome of this stage of the project.  Based on the actions-consequences idea, it would probably be feasible to generate a flow chart of some kind to help an author fish out paths through the narrative that don't work.

As anticipated, writing this post has helped my brain spin into ideas mode.  Likely before the day is out, I will post again with some doodles and diagrams and a more solid idea of how to make this UI work.

Comments, questions and suggestions welcome.