Personal Knowledge Management
ContextNote
Toggle Advanced Options
Tags
Semantic note taking app for the EdTech sector
Last update on December 31, 2012

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:
- Students and teachers (Educational Technology or EdTech)
- Knowledge workers
- Researchers
- Hobbyists
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
- getTopic
- getImages
- getFiles
- 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
- Link to current topic [1]
- Link to current date [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]
- Create Topic
- 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
- View Tags (tag cloud) [3]
- View Index (with pagination) [6]
- View Graph with JavaScript InfoVis Toolkit [12]
- Breadcrumbs [3]
- Topic identifiers autocomplete with jQuery UI autocomplete component [3]
- Jump To topic [1] (COMPLETED: 120905)
- Full-text (topic) search with Lucene, Solr, or elasticsearch. Alternatively, integrate Google Custom Search Engine. [18]
- Integrate front-end form validation (with a jQuery form validation plugin) [3]
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:
- At all times, ruthlessly apply the Principles of User Interface Design
- Use latest version (v3.2.2: 130107) of Zurb Foundation
- Use latest version (v8.0.2: 120820) of Redactor editor
- Import and export functionality (in JSON format?)
Proprietary libraries:
- Java CrystalMind topic map engine (JCrystalMind): September 27, 2012
- Packages
- com.polishedcode.crystalmind.base
- DoubleKeyDictionary.java
- Language.java
- Utils.java
- com.polishedcode.crystalmind.model
- Association.java
- Member.java
- MetaDatum.java
- Entity.java (abstract class)
- BaseName.java
- Occurrence.java
- Topic.java
- DataType (interface)
- com.polishedcode.crystalmind.model.test
- TestAssociation.java
- TestOccurrence.java
- TestAssociationSerialization.java
- TestOccurrenceSerialization.java
- TestTopicSerialization.java
- TestMemberSerialization.java
- TestMetaDatumSerialization.java
- com.polishedcode.crystalmind.model.tree
- BreadFirstTreeIterator.java
- DepthFirstTreeIterator.java
- Node.java
- TraversalStrategy.java
- Tree.java
- com.polishedcode.crystalmind.model.tree.test
- TestNode.java
- TestTree.java
- 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)
- com.polishedcode.crystalmind.store.test
- TestAssociation.java
- TestBootstrap.java
- TestOccurrence.java
- TestTopic.java
- com.polishedcode.crystalmind.base
- To do
- Implement shortestPath method
- Implement Builder pattern for models
- Increase test coverage to an acceptable level
- Implement BaseTopicStore base class with both MySqlTopicStore and PostgreSqlTopicStore descendant classes with implementation details appropriately split out (COMPLETED: 120829)
- Modify getOccurrencesFor method to return occurrences sorted by accompanying timestamp (meta datum)
- Implement Observer pattern in the topic map engine (subject pushes data to observers)
- Implement getPreviousTopic method
- Implement getNextTopic method
- Implement (namespace-based) logging
- 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)
- getTopic
- getAssociation
- getOccurrence
- getMetaDatum
- addTopic
- addAssociation
- addOccurrence
- 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)
- Implement interchangeable non-cached and (various) cached storage algorithms, that is, a strategy pattern (COMPLETED: 121001)
- Connection pooling (MySQL: connection pooling with MySQL Connector/J)
- Packages
Miscellaneous
Dependencies / libraries:
- Grails (plugins)
- JUnit
- MySQL / PostgreSQL
- JDBC drivers
- jQuery plugins
- Zurb Foundation
- Redactor jQuery-based WYSIWYG editor
- Font Awesome
- jQuery UI (components)
- JavaScript InfoVis Toolkit
- Ehcache caching library
Stack:
- Operating System: Ubuntu Linux
- Server-side programming languages: Java and Groovy
- Application server: Apache Tomcat / Glassfish
- Web framework: Grails
- Database(s): MySQL / PostgreSQL
- Proxy / Load balancing: Nginx
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)
- Chrome extensions
- 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
- Project
- Related
- Education Technology (EdTech)
- CMS for Mobile Platforms
- ContextNote REST API
- ContextNote launch To-do list
- iOS Development
- Tin Can API (a.k.a. Experience API)
- NotesMapper for Android and iOS
- NotesTagger for Android and iOS
- ContextNote At Web Scale
- Homework Partner
- Personal Semantic Knowledge Management
- Lean Startup
- Web and mobile revenue models
- Related
- Documentation
- Categorization
- Association
- Related
Tweets by @quesucede
Install the plugin: $ grails install-plugin spring-security-core. Create the User and Role domain classes: $ grails s2-quickstart com.testapp User Role