ContextNote

Wednesday 22nd of August 2012 04:39:28 PM


  Toggle Advanced Options



Semantic note taking app for the EdTech sector

Last update on December 31, 2012


ContextNote - Personal Knowledge Management suite - Logo


ContextNote is a multi-platform (Web, Android, and iOS), topic map-based, semantic note taking application aimed specifically at the EdTech sector (both teachers and students).

Click the following link to see to see screen shots of ContextNote for Web in action.

Objective

To make the management of personal knowledge both simple and intuitive while at the same time being able to take full advantage of the expressive modelling capabilities of topic maps.

Target users:

Rationale

None of the current "big" note taking applications (e.g., Evernote, Springpad, Catch, OneNote) have the ability to semantically link notes, that is, placing notes within their appropriate context in relation to each other in a structured and holistic manner.

In terms of organizing your notes, the majority of the existing notetaking applications allow you to tag notes (as does ContextNote). But tagging is about being able to describe a piece of information and allowing it to be found again by searching or browsing. Tagging is not about establishing relationships between pieces of information. To be able to do that, you need something more sophisticated. In the case of ContextNote, the means to assert (meaningful) relationships between two or more pieces of information is its underlying data structure: topic maps.

Obviously, a set of notes, in and of itself is a valuable thing. However, said set of notes becomes much more valuable if the notes themselves are related in the appropriate manner. Having context gives you a lot of benefits. For example, context enables both easy and quick discovery of information saving you time. Furthermore, context allows you to expand your knowledge without the risk of your knowledge becoming disjointed or fragmented.

Pending...

Cross-app type blueprint - "The app is the experience"

Breakdown of user actions / intentions by app type.

Lookup Explore Create Organize
Website High Priority
Search box
High Priority
Browse by ontology
Browse by tags
Browse by index
Browse by graph
High Priority
Pending...
High Priority
Pending...
Tablet App High Priority
Search box
Voice input
High Priority
Browse by ontology
Browse by tags
Browse by index
High Priority
Pending...
Medium Priority
Pending...
Mobile App High Priority
Search box
Voice input
Medium Priority
Browse by ontology
Browse by tags
Browse by index
Low Priority
Pending...
Low Priority
Pending...

Touchpoint matrix

Pending...

Implemented User Stories

  • Topic
    • Create Topic
    • Edit Topic
    • Create Comment
    • View Topic
    • View Images
    • View Files
    • View Links
    • View Associations
    • View Meta Data
  • Images
    • View Image
    • Upload Image
  • Files
    • Upload File
  • Links
    • Create Link
  • Associations
    • Create Association
    • View Association
    • View Member
    • View Topic Reference(s)
    • Display Associations (topic context)
  • Meta Data
    • Add Meta Datum
  • General
    • Login (authentication and authorization)
    • Logout
    • JSON Web services
      1. getTopic
      2. getImages
      3. getFiles
      4. getAssociations

Uncommitted Product Backlog by functional area (not in order of priority)

Estimated time [in hours] to implement User Stories (without user testing).

  • Topic
    • Create Topic
      1. Link to current topic [1]
      2. Link to current date [3]
      3. Link to a category [3]
    • Topic creation wizard [6]
    • Edit Comment [1]
    • Remove Comment [1]
    • Add Tag [1]
    • View Videos [1]
    • HTML meta description and keyword tags based on accompanying topic meta data (meta-description, meta-keywords) [2]
    • Facebook Open Graph meta tags based on accompanying topic meta data [3]
  • Images
    • Remove Image [1]
  • Videos (YouTube, Vimeo)
    • Add Video [1]
    • Remove Video [1]
    • View Video [1]
  • Files
    • Remove File [1]
  • Links
    • Create Link [1]
    • Remove Link [1]
  • Associations
    • Association creation wizard [3]
    • Remove Association [2]
    • Create Member [1]
    • Add Topic Reference [1]
    • Remove Member [1]
    • Remove Topic Reference [1]
  • Meta Data
    • Edit Meta Datum [1]
    • Remove Meta Datum [1]
  • General

Known bugs:

  • When there is only one image, fancyBox does not display the box's controls correctly
  • Create correct path reference for Redactor WYSIWYG editor (currently hard-coded to http://localhost:8080 - Occurrence/editText)

To Do:

Proprietary libraries:

  • Java CrystalMind topic map engine (JCrystalMind): September 27, 2012
    • Packages
      1. com.polishedcode.crystalmind.base
        • DoubleKeyDictionary.java
        • Language.java
        • Utils.java
      2. com.polishedcode.crystalmind.model
        • Association.java
        • Member.java
        • MetaDatum.java
        • Entity.java (abstract class)
        • BaseName.java
        • Occurrence.java
        • Topic.java
        • DataType (interface)
      3. com.polishedcode.crystalmind.model.test
        • TestAssociation.java
        • TestOccurrence.java
        • TestAssociationSerialization.java
        • TestOccurrenceSerialization.java
        • TestTopicSerialization.java
        • TestMemberSerialization.java
        • TestMetaDatumSerialization.java
      4. com.polishedcode.crystalmind.model.tree
        • BreadFirstTreeIterator.java
        • DepthFirstTreeIterator.java
        • Node.java
        • TraversalStrategy.java
        • Tree.java
      5. com.polishedcode.crystalmind.model.tree.test
        • TestNode.java
        • TestTree.java
      6. com.polishedcode.crystalmind.store
        • AssociationField.java
        • RetrievalOption.java
        • StoreException.java
        • BaseTopicStore.java (abstract class)
        • MySqlTopicStore.java
        • PostgreSqlTopicStore.java
        • EhcacheStorageStrategy.java
        • NocacheStorageStrategy.java
        • StorageContext.java
        • StorageStrategy.java (interface)
      7. com.polishedcode.crystalmind.store.test
        • TestAssociation.java
        • TestBootstrap.java
        • TestOccurrence.java
        • TestTopic.java
    • To do
      1. Implement shortestPath method
      2. Implement Builder pattern for models
      3. Increase test coverage to an acceptable level
      4. Implement BaseTopicStore base class with both MySqlTopicStore and PostgreSqlTopicStore descendant classes with implementation details appropriately split out (COMPLETED: 120829)
      5. Modify getOccurrencesFor method to return occurrences sorted by accompanying timestamp (meta datum)
      6. Implement Observer pattern in the topic map engine (subject pushes data to observers)
      7. Implement getPreviousTopic method
      8. Implement getNextTopic method
      9. Implement (namespace-based) logging
      10. Integrate caching solution, e.g., Ehcache, Terracotta, Java Caching System, Memcached
        • Implement interchangeable non-cached and (various) cached storage algorithms, that is, a strategy pattern (COMPLETED: 121001)
          1. getTopic
          2. getAssociation
          3. getOccurrence
          4. getMetaDatum
          5. addTopic
          6. addAssociation
          7. addOccurrence
          8. addMetaDatum
        • Implement Java Serializable interface (in the models: com.polishedcode.crystalmind.map.model) to enable more advanced caching functionality (COMPLETED: 120927)
        • Page caching (obviously, not at this level; the web framework / app would be responsible for this kind of caching)
        • Fragment caching (same consideration as page caching)
      11. Connection pooling (MySQL: connection pooling with MySQL Connector/J)

Miscellaneous

Dependencies / libraries:

Stack:

Scripts:

  • BootstrapStore.groovy
  • InsertTopic.groovy
  • BackupStore.groovy (pending implementation)

Potential "Version 2.0" features

  • MongoDB backing store
  • Windows Phone 8 app
  • RDF integration
  • Multiple input methods (for the creation of topics)
  • Dropbox integration
  • Google Drive integration
  • Integrate per topic chat (with Node.js?)
  • Freebase integration (display Freebase search results based on accompanying query term meta datum)
  • Twitter hashtags integration (display Twitter hashtag search results based on accompanying query term meta datum)
  • Implement topic map-based help system and tutorial ("meta help") [not estimated yet]
  • Implement cropping functionality (in conjunction with uploading the image)
  • Add per topic blogging functionality and a namespace-wide RSS feed [12]
  • Add (AJAX) functionality to display a list of the (ten) most recent topics that have been added or updated
  • Integrate GoogleMaps (search results, direct link, and street view)
  • Integrate IFTTT? Or... extend the application with the Universal Design Pattern.
  • Implement topic creation timeline à la timelines in web design
  • Integrate Popcorn.js HTML5 media framework for time-based interactive media capabilities

Customer Discovery and marketing

Step One:

Implementing the application as outlined above constitutes what I believe to be the Minimum Viable Product (MVP) for a product that aims to bring both notetaking and Knowledge Management (KM) together.

As a side note, instead of Minimum Viable Product, I prefer the term Optimal First Release. The reason I use the term MVP is because it is commonly used within the context of Lean Startups.

Once the MVP has been completed, write a tutorial or set of tutorials that will cover the key features of the application and post said tutorial(s) to sites like Hacker News, DZone, and to the various groups related to the semantic web and knowledge management on Facebook, Reddit, and LinkedIn. The tutorial(s) will include a link to the application's Launchrock page to capture email addresses of those people who would like to be kept up-to-date with regards to the application's progress and / or would like to try the application (for feedback purposes) before the application is launched.

Step Two:

Create a Launchrock page and drive paid or word of mouth traffic to it. You can then essentially equate a percentage of those users that provide their email address to that of a conversion or sell. This method allows for an inexpensive and rapid validation of an idea or product as this can be a market indicator on whether consumers like or hate your idea or product before fully committing to development / production costs. Once validated you're one step closer to "shipping".

Step Three:

Pending...




Comments

Grails security plugin@12-09-16 11:50:37 by Brett Kromkamp

Install the plugin: $ grails install-plugin spring-security-core. Create the User and Role domain classes: $ grails s2-quickstart com.testapp User Role

Grails H2 database console@13-06-15 18:05:43 by Brett Kromkamp

The H2 database is mapped to: http://localhost:8080//dbconsole. The JDBC URL should match the defaults in grails-app/conf/DataSource.groovy: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000.