{"id":1331,"date":"2017-03-05T23:10:04","date_gmt":"2017-03-06T07:10:04","guid":{"rendered":"https:\/\/www.ussherpress.com\/blog\/?p=1331"},"modified":"2023-12-09T14:58:17","modified_gmt":"2023-12-09T22:58:17","slug":"im-working-on-a-new-app","status":"publish","type":"post","link":"https:\/\/www.ussherpress.com\/blog\/?p=1331","title":{"rendered":"I&#8217;m working on a new app"},"content":{"rendered":"<p>I was inspired recently and decided to write another app.\u00a0I&#8217;m going to write a note-taking app that lets you nest notes in a hierarchical fashion and use\u00a0markdown for text formatting.<\/p>\n<p>I wanted to\u00a0understand\u00a0what challenges it might impose, so I decided to prototype some UI today.<\/p>\n<p>Here&#8217;s what I&#8217;ve got so far.<\/p>\n<p><a href=\"https:\/\/www.ussherpress.com\/blog\/?attachment_id=1332#main\" rel=\"attachment wp-att-1332\"><img loading=\"lazy\" class=\"aligncenter wp-image-1332 size-full\" src=\"https:\/\/www.ussherpress.com\/blog\/wp-content\/uploads\/Screen-Shot-2017-03-05-at-8.45.38-PM-e1702162634314.png\" alt=\"\" width=\"800\" height=\"589\" \/><\/a><\/p>\n<p>After about four hours of coding, the following work:<\/p>\n<ul>\n<li>Basic data type to represent a node and its children.<\/li>\n<li>Functioning UI to view the nodes. You can select a node and view its children. As you dig deeper into a hierarchy, more and more tables are added and you can scroll left and right to view each level.<\/li>\n<li>Editing and adding of nodes works. You can double-click a node and a modal window pops up to let you edit the text. When done, the changes are saved and the UI is updated. You can add a new node with a shortcut key.<\/li>\n<li>Markdown formatting. I used <a href=\"https:\/\/cocoapods.org\/pods\/SwiftyMarkdown\">SwiftyMarkdown<\/a>\u00a0to convert my markdown text into an NSAttributedString that I could display in the table view. Unfortunately, SwiftyMarkdown doesn&#8217;t\u00a0build for macOS, only iOS. I hacked it quickly so that it doesn&#8217;t rely on\u00a0UIFont. The hack is temporary, and I&#8217;ll likely re-do this work later and send a pull request to the author.<\/li>\n<\/ul>\n<p>The big thing that doesn&#8217;t work yet is saving and loading a document.\u00a0I want a working end-to-end scenario soon, so even though I&#8217;m still thinking about what I need in the document format, I&#8217;ll move forward with a simple JSON dictionary for the time being. (This file format won&#8217;t cut it if I want to sync across multiple devices. I&#8217;ll probably do something similar to <a href=\"https:\/\/www.ussherpress.com\/blog\/?p=1262\">what I did with Lil Todo<\/a>.)<\/p>\n<p>The app will be made up of nested tables, as you&#8217;d see in a UI like <a href=\"https:\/\/duckduckgo.com\/?q=os+x+finder&amp;iar=images&amp;iax=1&amp;ia=images\">macOS&#8217;s Finder<\/a>. Each table will contain a list of notes. Each note will use markdown for formatting. For simplicity, notes don&#8217;t have titles. They just have text.\u00a0When you click on a note, you&#8217;ll see a list of additional notes to its right. These are sub-notes. This will allow you to easily create hierarchical notes, like an outline. You&#8217;ll be able to add as many sub-notes as you&#8217;d like to any note. You can also drag and drop notes around to change the hierarchy or grouping of things.<\/p>\n<p>I will admit the UI is somewhat inspired by\u00a0<a href=\"https:\/\/gingkoapp.com\/\">gingko<\/a>, however I don&#8217;t plan on\u00a0showing all the notes at a given level as they do there. (I find that\u00a0a little confusing.) I&#8217;ve always been fascinated by using nesting to organize thoughts. A couple of other apps that I&#8217;ve enjoyed using that are somewhat related are <a href=\"https:\/\/mindnode.com\/\">MindNode<\/a>\u00a0and <a href=\"http:\/\/www.topoftree.jp\/en\/tree\/\">Tree<\/a>. Both are simple and beautiful apps.<\/p>\n<p>Some other features that I plan for this app:<\/p>\n<ul>\n<li>Images as notes. You&#8217;ll be able to drag an image as a note anywhere. To keep the UI simple, I&#8217;m not planning on &#8220;embedding&#8221; images within the text. They&#8217;ll simply be treated as other notes.<\/li>\n<li>Cloud file\u00a0sync. I&#8217;ll support Dropbox again and possible other cloud file sync engines. I don&#8217;t plan on writing a custom service for this, but the app will support single-user editing a document across multiple devices.<\/li>\n<li>Views. It should be possible to collect all notes that have to-do items in them and present them all\u00a0the to-dos in a massive list. It should also be possible to collect all notes that have a hashtag in them and also present them in a massive list. These will be treated as &#8220;views&#8221; that allow you to look at your data in a different way.<\/li>\n<\/ul>\n<p>My plan for this app is to write it as quickly as possible, get an MVP working, and ship it to the Mac App Store. It&#8217;s March 5, 2017, so let&#8217;s see how quickly I can do that. My second goal is also to write up development notes on this blog to share some of the techniques I use to write software.<\/p>\n<p>If you got this far, thanks for reading! Be sure to also <a href=\"https:\/\/twitter.com\/ussherpress\">follow me on twitter<\/a> for updates.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I was inspired recently and decided to write another app.\u00a0I&#8217;m going to write a note-taking app that lets you nest notes in a hierarchical fashion and use\u00a0markdown for text formatting. I wanted to\u00a0understand\u00a0what challenges it might impose, so I decided to prototype some UI today. Here&#8217;s what I&#8217;ve got so far. After about four hours &hellip; <a href=\"https:\/\/www.ussherpress.com\/blog\/?p=1331\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">I&#8217;m working on a new app<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[131,120],"tags":[126],"_links":{"self":[{"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1331"}],"collection":[{"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1331"}],"version-history":[{"count":4,"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1331\/revisions"}],"predecessor-version":[{"id":1740,"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1331\/revisions\/1740"}],"wp:attachment":[{"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ussherpress.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}