parallaxinc / Parallax-IDE

Parallax microcontroller development environment based on Chrome applications.
MIT License
35 stars 12 forks source link

Prototyping Parallax IDE (Multiple Elements) #318

Open jimjeffers opened 8 years ago

jimjeffers commented 8 years ago

[UPDATE: This discussion began as Project/File UI design but various issues pushed us to consider many other factors simultaneously. Once design of certain elements is deemed final, separate issues will be created to house each element individually]

Here are some notes from our initial discussion on file navigation:

File Navigation

Let’s create a list of common scenarios:

  1. New Project (No files)
  2. Minimal project (1 file)
  3. Sandbox project (multiple independent files)
  4. Complex project (multiple files w/ entry point)

Questions to ask ourselves:

What’s good and bad about the way we’ve done things in the past?

People are struggling with how to add updated files for a given library… They include libraries inappropriately.

The names are different on every platform.. C drive on windows.. you don’t see the drive name but you see the user folder on mac/linux (mobile). Some platforms hide the nature of the storage of the medium. You don’t know where it is.. kind of like iCloud / cloud storage.

Simplify the way we manage files (hide the storage medium) but retain the ability to create sub directories within the project.

Most of the time our projects are stored in a given folder. Some files in addition to the executable source code.

Project selection — then project directory specific file system. Have the ability to export/import source for personal backups / sharing with others.

We do have a need to allow you to open up or view files from other projects.

What needs are different from the user’s of the parallax IDE?

How might we handle this design challenge on a small screen vs. a large screen?

In the Future:

  1. Dependency Management.

Self managed — including a library. Third party and parallax based. Can we automate this process?

Stay away from dropping zip files onto the file drawer.

Version conflicts — automatic repository system. Has to retain a database of sorts so that this file is referenced (i.e. Gemfile or Podfile)

Send examples on Cocoapods, NPM, RubyGems.

PropGit commented 8 years ago

@jimjeffers Follow-up from our discussion:

PropGit commented 8 years ago

@jimjeffers I've updated the notes from discussion and the Next Design Elements.

jimjeffers commented 8 years ago

@PropGit Thanks!

jimjeffers commented 8 years ago

Debug Console (Mobile)

Interacting with the debug console while on a mobile device can be done in several ways:

  1. Swiping from the bottom of the view.
  2. Swiping allows you to drag the debug console to a partial view so that you can view the code and output simultaneously as you can on a desktop IDE.
  3. Utilizing the ‘debug’ button from the bottom toolbar in the code view.
  4. Utilizing the ‘debug’ button from the keyboard accessory view while editing.

To hide the console:

  1. Swiping down from the top of screen when the debug console is in full screen.
  2. Using the down arrow.
  3. Using the system dismiss/back button.

Interactive Prototype:

http://share.framerjs.com/gjlygdab2r7o/

Screencast:

https://drive.google.com/file/d/0B53rXRf-3dMiRlVhN0NKUW1kblU/view?usp=sharing

( This post is documented in a centralized doc where further screencasts/interactive contnet will be documented: https://docs.google.com/document/d/1AZIVgcckDK1XsJvnb4-j_FkSNyKqPzBif2twwZN0ccg/edit?usp=sharing )

jimjeffers commented 8 years ago

@PropGit I've posted a quick screencast showing how XCode provides a very thorough amount of find and replace capabilities in a small UI. This is just for reference purposes:

https://drive.google.com/file/d/0B53rXRf-3dMid3BqbUVZdnNjWXc/view?usp=sharing

jimjeffers commented 8 years ago

Error Highlighting (Mobile)

Syntax errors change the IDE in a number of ways:

  1. Upon detection (which should happen in the background at timed intervals after typing has stopped) a snack bar and a transition of the run button to an 'errors' button will occur.
  2. When all errors are resolved the run button will re-appear.
  3. Typing the errors button or the 'SHOW' action in the snack bar will scroll the user to the highlighted line in the IDE.
  4. Tapping on the highlight in the line count margin will select the offending code and display the cause of the error temporarily in a snackbar.

Interactive Prototype:

http://share.framerjs.com/gn99syob7hps/

Screencast

https://drive.google.com/file/d/0B53rXRf-3dMiaWJ3Y0JCbFN6eUk/view?usp=sharing

( This post is documented in a centralized doc where further screencasts/interactive content will be documented: https://docs.google.com/document/d/1AZIVgcckDK1XsJvnb4-j_FkSNyKqPzBif2twwZN0ccg/edit?usp=sharing )

jimjeffers commented 8 years ago

@PropGit Please check out the latest update for demo on errors in the IDE. I'll be in touch soon. Hopefully one more major demo before the end of this week!

PropGit commented 8 years ago

@jimjeffers

Debug Console (Mobile)

Interacting with the debug console while on a mobile device can be done in several ways:

Excellent work, Jim! That exactly meets my vision of how the Debug Terminal arrives and departs from the UI. Fantastic!

PropGit commented 8 years ago

@jimjeffers

...quick screencast showing how XCode provides a very thorough amount of find and replace capabilities in a small UI.

Thanks Jim. They packed a lot of functionality into that small space. I like it as inspiration. We'll have a simpler and smaller interface, as you know, but I'll consider how they solved certain problems to explore how we can achieve what we need. This was very beneficial.

PropGit commented 8 years ago

@jimjeffers

Error Highlighting (Mobile)

Syntax errors change the IDE in a number of ways:

Wow, that looks fantastic! Even better than I envisioned; I love it! Thanks Jim! I'm excited to see the next demo too.

Also, I really appreciate how you're presenting these and the feature list and formatting in your posts regarding it. This combined with the centralized doc is perfect for us and Iced Dev in the future.

jimjeffers commented 8 years ago

Landscape Design Examples

I've created landscape alternates of the following mockups:

  1. File Navigator
  2. Code Editor
  3. Debug Console

The on screen keyboard creates some important changes:

  1. In the code editor, when the keyboard is present, the app will utilize Android's full screen mode if possible. This will hide the status bar and the app bar. The user will need to dismiss the keyboard or rotate their phone to regain the UI. Note this is a departure from the portrait view where the UI is ever present. We had to make this change because there is not enough screen real estate in landscape mode.
  2. In the debug console the accessory view for RX / TX / Echo does not appear on top of the keyboard. Again this is an issue with screen real estate. User's will need to dismiss the keyboard or rotate their phone to regain access to those controls.

PDF Document

https://drive.google.com/file/d/0B53rXRf-3dMiOWxoTWdEM016eU0/view?usp=sharing

( This post is documented in a centralized doc where further screencasts/interactive content will be documented: https://docs.google.com/document/d/1AZIVgcckDK1XsJvnb4-j_FkSNyKqPzBif2twwZN0ccg/edit?usp=sharing )

PropGit commented 8 years ago

@jimjeffers - perfect decisions. Also, the static PDF-only renditions of landscape are great for getting the idea across without spending extra time for an interactive; exactly as we discussed. Thank you.

PropGit commented 8 years ago

@jimjeffers [Edited as per our discussion on 2/16/16]

Our Education department suggested that the Run / Error button (icon) have a third, intermediate state the represents when the app is waiting for editing to finish. So the idea is:

The Processing button icon may be something like a keyboard, or a pencil, or something representing work being done, but still subtle enough to not be distracting upon transition from Run to Processing, or Error to Processing.

The Processing state would be indicated by the current button (Run or Error) being shaded, or otherwise altered slightly to indicate that something is happening. It's probably wise not to make it look disabled, because it is really still an active feature that can accept a mouse click of touch gesture to force the tokenization, and possibly download, the moment the user accesses it.

The Processing state button would appear the moment an actual edit occurs, and would stay until the moment tokenization is completely (failed or success). In the background, of course, there'd be a delay imposed to allow a certain amount of idle time (after edit) before it actually tries to tokenize again.

Can you ponder this and come up with some possible icons to use for this intermediate state?

PropGit commented 8 years ago

Brief Discussion 2/16/16

Debug Terminal Done.

Processing State Done.

jimjeffers commented 8 years ago

@PropGit I've created an updated interactive with a debounce timeout of 1 second. We can tweak this as needed but you can see the processing state in action:

http://share.framerjs.com/69o16i7r9c79/

I have also updated the design document but have not created an updated screencast for this update. If you think it's necessary I will happily do so but wasn't sure if we needed it in this minor change. Instead I added a 4th list item on the design doc page explaining the debounced processing state.

PropGit commented 8 years ago

@jimjeffers That's great. No need for a screencast. Please bump the timeout up to 1.5 seconds. Done.

jimjeffers commented 8 years ago

@PropGit Take a look at this updated version of the debug console. I have updated the google doc with this new link and have updated the description accordingly to provide some direction as to how we want the resizing to behave:

http://share.framerjs.com/z45z34ie9dn7/

jimjeffers commented 8 years ago

@PropGit The timing on the compilation and snackbar have been bumped up slightly. They are explicitly defined in the google doc along with this updated link:

http://share.framerjs.com/qdq54nh404fg/

PropGit commented 8 years ago

@jimjeffers Updated Debug Console - Resizing works great. Is it ready to accept text into the Transmit Pane? I wasn't able to type anything there.

Updated Compilation Timing - That's much better! Thank you.

jimjeffers commented 8 years ago

@PropGit Is it not working for you? It should allow text entry via your actual keyboard. Not by clicking on the fake on screen keyboard. I will check in Chrome. It works in Safari.

PropGit commented 8 years ago

@jimjeffers - I see, it does indeed work with hardware keyboard, but only when Debug Terminal is full screen.

jimjeffers commented 8 years ago

@PropGit Right! There was a bug. Now if you tap on the field it will launch into full screen with the virtual keyboard:

http://share.framerjs.com/4lwlryiuyq28/

The idea is you'd need to be in full screen if you actually want to transmit on mobile as you're going to be using the virtual keyboard in most cases and screen real estate is too limited. Thoughts?

PropGit commented 8 years ago

I see. I think that works well for mobile (phone), but may not necessarily apply to tablet and certainly not desktop. When we get back to those interactives, I'd like to explore making it take advantage of the extra screen space to allows virtual keyboard input (or hardware keyboard) even when the Debug Terminal is not full screen.

jimjeffers commented 8 years ago

@PropGit Agreed! I think in the case of mobile - if a hardware keyboard were detected - we could disable the transition to full screen. On tablet/desktop this won't even be a design consideration as the debug console will not usually be fullscreen, if ever.

jimjeffers commented 8 years ago

Find and Replace (Mobile)

On mobile we will have limited screen real estate. The interface for find and replace is built off the accessory view where the find and replace button is displayed.

  1. When you tap the find and replace button in the accessory view - the accessory view will be replaced by the find and replace pane.
  2. Tapping the X in the top right corner of the find and replace interface will hide the find interface and return to the normal accessory view.
  3. Tapping into either field will cause the fields bottom line to change to an active color as is standard in google’s material design.
  4. The find field will show a count of ‘X of TOTAL’ matches and also has two adjacent arrow buttons to jump between matches.
  5. The replace field has a ‘done’ checkmark icon that activates when a match is found and a replacement string exists. Tapping the checkmark will replace the current match and jump the user to the next available match.
  6. The magnifying glass icon will take the user to the next match and cycle back to the top of the document if the user has reached the final match on the page.
  7. The more menu will provide a dropdown menu that will allow the user to toggle advanced search settings.

PDF Document

https://drive.google.com/file/d/0B53rXRf-3dMiemE4cjUtTjlSTE0/view?usp=sharing

Screencast

Updated UI:

https://drive.google.com/file/d/0B53rXRf-3dMiUkFNQXFvYlU4S1k/view?usp=sharing

Deprecated UI:

https://drive.google.com/file/d/0B53rXRf-3dMiUy1tbEdXMGlPbkU/view?usp=sharing

jimjeffers commented 8 years ago

Hey @PropGit I've updated the find and replace screencast and PDF with an updated UI that allows for more advanced functionality such as case sensitivity and partial/whole word toggles. I also replaced the next/previous button with one search button to simplify the UI given how compact the UI is.

jimjeffers commented 8 years ago

@PropGit The original file navigation demo will now actually adjust the code contents when you switch between projects:

http://share.framerjs.com/u87mxiqrfioa/

Also - I've added some documentation for this demo to the master document:

https://docs.google.com/document/d/1AZIVgcckDK1XsJvnb4-j_FkSNyKqPzBif2twwZN0ccg/edit?usp=sharing

jimjeffers commented 8 years ago

@PropGit

Import / Export Buttons

I've added the import and export buttons so that those operations can now be done at a project and file level. I've also added the functionality.

  1. To import/export a project, use the options located on the project drawer.
  2. To import/export a file use the contextual menu or the more menu within the IDE activity.
  3. I've provided a sharing sheet to show how the work flow could continue if a user clicked on sharing. This could also be applied to the import/export workflows but we have to define how those will work in depth. At this point we've only covered how to access them.

Screencast

https://drive.google.com/file/d/0B53rXRf-3dMiLUlGNnNNaXQ4c3c/view?usp=sharing

PDF Document

https://drive.google.com/file/d/0B53rXRf-3dMiV3l6bGJnTFBBbVU/view?usp=sharing

PropGit commented 8 years ago

@jimjeffers

Find and Replace (Mobile)

Great start! I like all the features you display and the behavior described, especially the "x of total" indication. Below is some more feedback and ideas.

PropGit commented 8 years ago

@jimjeffers

The original file navigation demo will now actually adjust the code contents when you switch between projects.

Fantastic! Thanks, it works!

PropGit commented 8 years ago

@jimjeffers

Import / Export Buttons

I've added the import and export buttons...

Those options and your described operation look good.

jimjeffers commented 8 years ago

Thanks @PropGit I'm going to implement some revisions today and also work on the directives. If you're free we could chat tomorrow to cover all of the ground we've covered now. I think the entire list is covered except the dialogs which we'll have to do at the start of next month's iteration as we're going to run out of hours in this month pretty soon!

jimjeffers commented 8 years ago

@PropGit Perhaps on find and replace I will hide the navigation bar until the find and replace is dismissed. This should open up a noticeable amount of editor space.

jimjeffers commented 8 years ago

@PropGit I'm hesitant to perform a gesture based find and replace as just from personal experience in IDEs I'm used to scrolling the document and reviewing the highlighted areas as well as using the search button to jump to the next occurrence if I need to.

jimjeffers commented 8 years ago

@PropGit I'll try out a version where you have to actually toggle replace to see the full interface! I thought about it but was having trouble finding the space for the extra button that could do this. I'll brainstorm a bit more! If anything it could be on the more menu.

jimjeffers commented 8 years ago

@PropGit I've updated the find and replace demo:

  1. Simplified the more menu to opt with the toggle solution.
  2. Added an option to toggle the replace field on and off via the more menu.
  3. The navigation bar is hidden when find/replace is active.
  4. The navigation bar reappears if the keyboard is dismissed but find and replace is still active.

PDF Document

https://drive.google.com/file/d/0B53rXRf-3dMiTzVXZHBDZnhVMGs/view?usp=sharing

Screencast

https://drive.google.com/file/d/0B53rXRf-3dMiTm9qSTRVNkhsMEU/view?usp=sharing

jimjeffers commented 8 years ago

@PropGit

Directives

This is more of a brainstorming post than anything. But I'm thinking we can use a little helper icon such as a lightbulb on special lines of code where we can provide a menu of suggestions to the user. This is how intelli-j handles code suggestions and it works quite well in Android Studio. I also discuss some ideas on how we're going to handle new files on mobile. We discussed this before but it will be important to figure out how we will handle this as it will also segue quite well into the dialogs we still have to design.

Let me know your thoughts!

https://drive.google.com/file/d/0B53rXRf-3dMiX1ZOQ3ZRc1NqQnc/view?usp=sharing

PropGit commented 8 years ago

@jimjeffers

Perhaps... I will hide the navigation bar until the find and replace is dismissed.

Excellent idea.

I'm hesitant to perform a gesture based find and replace...

Understood. I have a suspicion a natural feeling interface can be had, but I don't know the solution and can't afford the time to dream it up right now, so we'll leave that idea on the back burner.

  1. Simplified the more menu to opt with the toggle solution.

Thanks.

  1. Added an option to toggle the replace field on and off via the more menu.

Oh that works great! I like it!

  1. The navigation bar is hidden when find/replace is active.

Fantastic!

  1. The navigation bar reappears if the keyboard is dismissed but find and replace is still active.

Ideal!

Directives - lightbulb idea

Yes! That feels much better! I prefer the lightbulb appearing only when the cursor is on the related statement line; this, for the reason you noted, that it's hard to tap the correct one if there are two that are close to each other.

I think the drop down menu should appear below the line that it relates to. This is partly so the user can still see the line they are affecting, but also because it's confusing when there are two adjacent lines that are special like this.

New File - 'X' to close

I'm glad you've brought this back up. Yes, the 'X' is a fantastic idea here. Clicking the 'X' should prompt the user to save or confirm the discard of the new file. There's a feature we are used to having in our legacy editors where no files actually need to be saved before actually using them in a compiled project. This feature covers the case if we don't choose to implement that (which it isn't implemented yet), so it's something we may choose to replace in the future.

PropGit commented 8 years ago

Dialog Design

Here is a list of dialogs and screenshots from our current dialog designs where they already exist.

jimjeffers commented 8 years ago

Find / Replace

Lightbulb

Import/Export

jimjeffers commented 8 years ago

Thanks for the dialog info @PropGit

jimjeffers commented 8 years ago

Hey @PropGit! Sorry I have gone missing since we last chatted. I had come down with a pretty bad cough / cold and fell behind schedule this month. I still have a bit of this irking itch in my throat which I hope is not too distracting in the screencasts. I tried to edit out the coughing where I could! First off. I wanted to touch on the general house keeping revisions we discussed per our last call. I'll make sure these updates make it into their associated PDF's that I already have linked to in the documentation.

This screencast covers revisions to:

Take a look when you can:

https://drive.google.com/a/sumocreations.com/file/d/0B53rXRf-3dMiMzRNQjhaWXhVR3M/view

jimjeffers commented 8 years ago

@PropGit Get ready for a mobile dialogs marathon:

In this screencast I run through pretty much every dialog box that we will likely plan on implementing in the initial version of the editor. The only exclusions and the areas we need to have discussions will center around how we want to approach 'help' and 'settings'.

Screencast:

https://drive.google.com/a/sumocreations.com/file/d/0B53rXRf-3dMia0d1U0ZiQm13QXc/view

PDF:

https://drive.google.com/open?id=0B53rXRf-3dMiN2RGdU5OV1BPQ1U

PropGit commented 8 years ago

@jimjeffers - I've reviewed the screencasts.

  • Missing directives

Excellent! Looks better than I imagined and very clearly defines the problem to the user. I like your idea of adding the message in the code font that looks and acts like a hyperlink.

  • Suggestion menu (lightbulb menu)

The lightbulb is perfect. To verify, I do like having the menu drop below the line that it applies to; that works great.

  • Find / Replace without the keyboard

That looks great without the keyboard. Thanks for showing that.

  • Import/Export icons.

That's a good attempt, but it still doesn't strike me the way I was hoping. The fact that there's two arrows in both cases is the point of confusion. I've got an idea! Take a look at the share icon; it's a dot (representing a project/file/place that connects out to two other dots (places) via lines to represent sharing one thing to possibly multiple others. How about we use that concept and take make two dots and the line going between them (angled from top-left to bottom-right) and make the line an arrow facing the bottom dot. That's "import." Then the export is that same icon rotated counter-clockwise so it goes from lower-left to upper-right. The point is, in each case, the bottom dot is the "place of concern" where the external item is being imported to, or exported from. Let's talk in our meeting about this.

  • Dialogs

I think you're hitting the target well.

Navigating Away from a New Unsaved File

Excellent!

Scanning

Fantastic simplification.

Move
Import/Export

As discussed, this it to get projects or files into/out-of the applications storage area

jimjeffers commented 8 years ago

@PropGit The PDF for the dialogs has been updated with:

The updated link is here: https://drive.google.com/open?id=0B53rXRf-3dMiN2RGdU5OV1BPQ1U

jimjeffers commented 8 years ago

@PropGit Also I made some updates to the identify dialogs so that they show longer device names, the current port getting scanned, and longer custom names that are truncated.

phated commented 8 years ago

I have a feeling all the dialogs with textboxes in them are going to be a nightmare to develop since web applications don't have access to height of the keyboard, etc. Are they really best as dialogs?

jimjeffers commented 8 years ago

@phated We can display them as full screen modal views if that is the case.