Giter VIP home page Giter VIP logo

codetour's Introduction

Hi there ๐Ÿ‘‹, I am Eleftherios Chrysochoidis, or just Lefteris ๐Ÿ˜Š

Profile Views

Favorite Projects

Languages

Most Used Languages

Github Stats

Github Stats

codetour's People

Contributors

actions-user avatar github-actions[bot] avatar lefterisxris avatar noyloy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

codetour's Issues

Step Description Enhancements

  • When creating a new Step, we can have selected the default description, so that the user can edit it directly.
  • Toggle button with text|HTML|markdown editor options Both Markdown and HTML are supported without the need of a switch button/mode
  • HTML editor implementation
  • Markdown editor implementation
  • Format description button External formatter is needed, thus feature is skipped

Parse from Breakpoints

As a POC lets try parsing a group of Breakpoints into new Tours

We should

  • Add the related action
  • Find breakpoint groups
  • Parse some of them (name prefixed)
  • Generate the Tours

Plugin Actions

  • Create dummy actions
  • Create Tour Actions
    • List all Tours (to run the selected)
    • Parse Breakpoints into Tours

Best practices/ideas for tours

Let's provide some demo tours for the following cases:

  • Introduction to project
  • High-level overview of a project
  • Backend API project (e.g. MVC patterns)
  • Frontend projects

VS Code Plugin

Steps:

  • Check VSCode guide Extension API
  • Create a simple navigation plugin
  • Add the read from configuration functionality #14
  • Add the input configuration functionality #13
  • Release it to the store
  • Enhance it

Functionality and UI should match with #10

Navigation - Thoughts

Playing a Trailer should support (plugin's toolbar):

  • Show total number of steps
  • Show progress (e.g. current step like 5/20 - 25%)
  • Go to previous and next step (buttons โ† and โ†’)
  • Return to current step point (if user manually scrolled somewhere else)

Within the code, we should support:

  • Add (inline) any extra assets e.g. comments, links, images, .gifs, sound

Improved Support for File Paths

Description

Currently, the plugin only supports simple file names in a step's file property and also ignores the directory property when looking up files. This breaks compatibility with tours developed in VS Code since that plugin writes directory/workspace relative paths to a step's file property. Additionally, as noted in the existing codebase, looking up files by filename alone results in conflicts when a project contains multiple files with the same name.

Solution

Describe the solution you'd like
To improve file path handling, assume the value of the file property is relative to the project base directory+ the value of the directory property.

Example

Given the following step:

    {
      "title": "TourStepGeneratorAction.java:7",
      "description": "some explanation",
      "directory": "src/main/java"
      "file": "org/uom/lefterisxris/codetour/tours/actions/TourStepGeneratorAction.java",
      "line": 7
    }

The plugin should find the file at $PROJECT_DIR$/src/main/java/org/uom/lefterisxris/codetour/tours/actions/TourStepGeneratorAction.java

Additional Context

Note that this would also entail handling os-specific path separators.

It's also important to call out that this would be a breaking change impacting tours that depend on filename-based lookup of files not located in $PROJECT_DIR$ unless maintaining the existing functionality as a fallback for when the file can't be found using relative paths.

Export the tour (include code context)

It would be nice, to be able to export a tour into an HTML file, so that it can be shared to others which will be able to navigate through the steps without having the actual code checked out.

Backlog

This is a generic list, with notes (bullet list) of issues/features to work on.

v1.0.0

Future

Enhanced Tours

  • Audio recording for Steps
  • Mouse movement recording for Steps (including selection and syncing the sound recording)

Input Configuration

CodeTrailer should have a way of creating the trailer of the code.
The Trailer generation process is the Input Configuration #13 (i.e. user should select which files, code blocks, comments, etc will be included on the trailer) and all these information should be included on the Output Configuration #14 (i.e. the output config file that the plugin would read in order to play the trailer / perform the code navigation)

Should be able to answer the following:

  • What the user will be able to include? Options:
    • class#method name -- e.g. DBHandler#connect()
    • file#line number -- e.g. DBHandler.jave#147
  • Extra assets? manually or through a dialog

Presentation Deck

All the related assets can be found on OneDrive

The presentation deck should include:

  • Overview of the Issue
  • Research results
  • Tool demonstration
  • Future research

Promote the Questionnaire

Check the target/Goals mentioned in #24 .

Ideas for promoting:

  • Prev Employers (email)
  • Current Employer (email)
  • Colleagues (direct)
  • Past Colleagues (direct)
  • Google Contestants Slack channel (post)
  • IntelliJ Platform Slack channel (post)
  • FB (post)
  • Linkedin (post)
  • FB Teams/Groups
    • ฮˆฮปฮปฮทฮฝฮตฯ‚ ฯ€ฯฮฟฮณฯฮฑฮผฮผฮฑฯ„ฮนฯƒฯ„ฮญฯ‚
    • ฮˆฮปฮปฮทฮฝฮตฯ‚ ฮ ฯฮฟฮณฯฮฑฮผฮผฮฑฯ„ฮนฯƒฯ„ฮญฯ‚ & Designers
    • ฮ•ฯ†ฮฑฯฮผฮฟฯƒฮผฮญฮฝฮท ฮ ฮปฮทฯฮฟฯ†ฮฟฯฮนฮบฮฎ - ฮ ฮฑฮฝฮตฯ€ฮนฯƒฯ„ฮฎฮผฮนฮฟ ฮœฮฑฮบฮตฮดฮฟฮฝฮฏฮฑฯ‚
    • ฮ•ฯ†ฮฑฯฮผฮฟฯƒฮผฮญฮฝฮท ฮ ฮปฮทฯฮฟฯ†ฮฟฯฮนฮบฮฎ 2012-2013
    • Java Development Study Room
    • Java Developer Team

Tools

Sample Tour (in-memory ?) when no Tour is available

On new installations (when a user installs the Plugin) it would be nice to have a default demo/sample Tour, in order to help the user understand the functionality of the Plugin and also to take some ideas for their tours

Can't work on IDEA 2023.1

Is your feature request related to a problem? Please describe.
Can't work on IDEA 2023.1

Describe the solution you'd like
Work properly on IDEA 2023.1

Describe alternatives you've considered
None

Additional context
None

BUG: not compatible with IDEA 2023.2

Describe the bug
Not compatible with IDEA 2023.2

To Reproduce
Upgrade to IDEA 2023.2

Expected behavior
Plugin works well

Screenshots
None

System (please complete the following information):

  • OS: Windows 10
  • IDE: IntelliJ Ultimate
  • IDE Version: 2023.2
  • Plugin Version: 0.0.8

Additional context
None

Dealing With Turnover

Should be able to answer the following:

  • Is there any point of companies trying to to keep their employees?
    • Perks are the main motivations, but are they enough?

    Turnover is a fact . Accept it and deal with it

  • What are the available tools to deal with it?
  • Types/methods of trainings, types of project docs?
  • Any best practices?
  • Deprecated info (i.e. prior to design decisions)?
  • Graded/Scaled training (overview, entry, sub-specialty etc)?

    Trying to apply common practices/processes (good for a single company but not all companies use the same. However, having a dev pool is a good idea i.e. to train them, have them ready in the pool, and assign them to projects on-demand)

Create a new Tour option, from anywhere in Tours Pane

Currently, if a User wants to create a new Tour, they should select the Root Node from Tours Pane.
It would be much more easier and intuitive if we made all the tree area clickable so that a new New Tour could be created more easily and faster. Also the same could be there for Reload as well.

Show total number of steps

The total number of Steps of a Tour should be visible in the following sections:

  • Tour item hover (on Tool Window tree)
  • Step Renderer in which can be combined as progress: e.g. current step 5/20 - 25%

Project Comprehensibility

Should be able to answer the following:

  • Are Design Patterns degrading project's comprehensibility?
    • Could SRP or Inheritance depth/width make a project more complex?
  • What about code quality?
  • Design decisions? Should they be documented/depicted somewhere?
    • UML usage in real projects nowadays?
  • Changes on the design? The may be reasonable at that time, but what about afterwards (i.e. for a newcomer)?

Turnover Effects - Cost

Should be able to answer the following:

  • What is the average time that a developer needs to join a project (per level probably)?
  • How much does it cost(the equivalent money amount, if possible)?
  • Overall delays (to projects across all companies)?
  • What could affect that time?

Publish Plugin to Intellij MarketPlace

We need to:

  • Submit the plugin for publishing
  • Create Documentation for End-Users
    • .gif for Tours Tool Window
    • .gif for New Tour
    • .gif for New Step
    • .gif for Tour/Step context menu
    • .gif for Step HTML support
    • .gif for Modal configuration
    • .gif for Navigation (+ shortcuts)
  • Create Samples for Tours Navigation
  • Update the README badges (link with Marketplace)

Tours Integration

Let's try to be compatible with VS Code Tours.

We should

  • Check file structure
  • Load them properly
  • Creating new Tours in the same way

Thesis Paper

All the related assets can be found on OneDrive

The goal is to apply for at least one publication. To do that we should mind for:

  • Availables magazines/conferences
    • It would be wise to check for IntelliJ and/or VSCode plugins related conferences to promote our work
  • Check the available dates for the publications (for submission)
  • Be accepted at least to one
  • Prepare the related paper document and any other assets

Conferences and Submissions in comments

Tours Validation checks

On Tours initial load (i.e. when Project is opened) we could perform some validation checks:

  • Are there any Tour Steps with non-valid location reference?
  • Is any Tour duplicate name or Step duplicate reference?

Order of Tours in Tours Pane and custom order options

Should support:

  • alphabetical order of Tours, based on their Title - default
  • Option to set Order based other Tour property
    • title - default option
    • tourFile - The name of the file
    • description - For custom prefixes, not visible anywhere
    • createdAt - The date of creation of each Tour
    • position - Custom set of order (may be changed with drag and drop)
  • Support both ASC/DESC
  • Settings for persisting User settings for order/sort

Kickoff Feedback

I need feedback on the following:

  • Thesis registration (students web) or other sign/paper actions?

    Not needed as it is done

  • Deliverable's language

    Up to me. Selected English

  • Tool Name

    Initial name: CodeTrailer. Renamed to CodeTour due to the similar VS Code existing great plugin

  • Project planning tool

    Initial using ZenHub. Not convenient for those who haven't installed it. We need our repo to be publicly available and friendly to anyone without extra dependencies

  • Timeline

    Timeline depicted in ZenHub is fine.

  • Research topics (questions to be answered)

    Great feedback! Almost each of suggested topics could be a Thesis on their own!

  • Design (quick overview)

    Thoughts are fine, but as a first step, lets integrate (be compatible) with VSCode CodeTours

  • Intellij vs VsCode plugin (priority)

    Up to me. Picked IntelliJ due to existing VSCode CodeTours

  • Paper / Publication feedback

    Try submitting as early as possible. Focus on Research findings

  • Progress? Recuring meetings or ad hoc?

    No need to schedule anything. Keep working and request feedback/meeting when

Step/subStep support

Steps' structure should not be strict. e.g. A step should act like a tour if there are some sub-steps below it.
This requires Structural changes.

Example Tree rendered Structure:

.
โ”œโ”€โ”€ 1st Step Group - Controller/
โ”‚   โ”œโ”€โ”€ Controller Step 1/
โ”‚   โ”‚   โ”œโ”€โ”€ Controller Step 1.1
โ”‚   โ”‚   โ””โ”€โ”€ Controller Step 1.2
โ”‚   โ”œโ”€โ”€ Controller Step 2
โ”‚   โ””โ”€โ”€ Controller Step 3
โ”œโ”€โ”€ 2nd Step Group - Service/
โ”‚   โ”œโ”€โ”€ Service Step 1
โ”‚   โ”œโ”€โ”€ Service Step 2
โ”‚   โ””โ”€โ”€ Service Step 3/
โ”‚       โ””โ”€โ”€ Service Step 3.1
โ””โ”€โ”€ 3rd Step Group - DB/
    โ”œโ”€โ”€ DB Step 1
    โ”œโ”€โ”€ DB Step 2/
    โ”‚   โ”œโ”€โ”€ DB Step 2.1/
    โ”‚   โ”‚   โ””โ”€โ”€ DB Step 2.1.1
    โ”‚   โ””โ”€โ”€ DB Step 2.2
    โ””โ”€โ”€ DB Step 3

Directory support (i.e. navigate to Project pane)

Steps currently require a file:line location reference. We could support navigating on a folder, which will open the Project Tool Window and select the target directory.

For example, a Step may provide some info about resources, and the location could be the src/main/resources director

Structure migration mechanism

As CodeTour plugin is in very early development stage, it is very likely that its structure will change.

That means, that Tour and Step classes may change and the persisted .tour files, would also need to change.
But what if a user has some .tours with the old structure?

  • A schema migration mechanism is required

Step select code area (if possible)

Currently the CodeTour plugin works with a file:line reference.
However this seems to be fragile and not easily maintainable as code will change sooner or later and Step's lines won't be aligned.

We could work with references (PSI elements). However the PSI elements may also change but the good news are that we can hear on PSI element changes and automatically update the Tour Step as well.

In addition, it would be nice, if user would be able to select a code block, instead of a single line, so that this block would be highlighted on Step Navigation.

Output Configuration - Thoughts

CodeTrailer should have a way of creating the trailer of the code.
The Trailer generation process is the Input Configuration #13 (i.e. user should select which files, code blocks, comments, etc will be included on the trailer) and all these information should be included on the Output Configuration #14 (i.e. the output config file that the plugin would read in order to play the trailer / perform the code navigation)

Should be able to answer the following:

  • File extension?

    .tour

  • Structure?

    Follow CodeTour and enhance it

  • Automated creation? or by Editor?

    Compatibility with VS Code Tours
    Parse from Breakpoint Groups
    Step by Step Creation from Gutter Editor (sidebar like breakpoints)

Extra thoughts/ideas for later versions

  • Supported extra assets (not necessarily for v1, but for later on)
    • Extra images
    • Extra video/gif
    • Extra voice/recording maybe
    • Input interaction? (i.e. on some steps of the trailer, some quiz-like questions may appear for training purposes)

Thesis Document

Thesis Document is under OneDrive: Thesis.docx

All the related assets can be found on OneDrive

The document should include:

  • State the issue
  • Related research (existing)
  • Related research results (outcome from my research)
  • CodeTour tool demonstration
  • Contributing on CodeTour
  • Vision and future research

Create Sample Tours

Let's create a couple of Sample Tours to demonstrate CodeTour functionality and structure:

  • Create a Sample Tour which will present the features that CodeTour supports
  • Create a high-level overview of CodeTour's source code

Support Navigation Reference Edit on Steps

Changing the location reference of Step is currently not supported.

  • We could have a drag n drop functionality through Editor Gutter Menu or -- will revisit in the future
  • Context menu with prompt of selecting the new location

Open Source Repository

CodeTrailer repository should be setup following open source guidelines in order to be friendly to any potential contributor. Thus, it should include:

  • License (probably MIT)
  • README.md
  • WIKI pages
  • Contribution instructions
  • Test suite with as much coverage as possible
  • Github Actions for automated:
    • testing suites
    • testing coverage (changes or new features should not degrade the total coverage)
    • code style/formating checks (e.g. sonarQube rules)
    • security checks
    • deployment
    • documentation update
  • Tours for the CodeTours source code (obviously)
  • Issue templates (for accurate issues descriptions)
  • Discussion area

Nice to have:

  • Promo video (for end users)

Public Questionnaires

To gather some feedback, we should create a Questionnaire.

Let's use Google Forms for it.

  • Finalize Questions
    • Collect #5 , #7 , #8 , #9
    • Try to limit the questions so that the total required time for a full response would be reasonable
  • Create English Version
  • Create Greek Version
  • Add introductionary statement about the Thesis. Promote UoM
  • Add section for Plugin (promote Repo)
  • Add option to share results/findings at the end of the Research (Optional obviously)
  • #25
  • At least 2 weeks
  • At least 100 responses. We got 81

Tour play - Navigation

Implement the initial Navigation from Steps

We should support:

  • Icons/Buttons for going to next/previous step (โ† and โ†’)
  • Shortcuts for going to next/previous step
  • Draggable and resizable description area for each step (ideally to support markdown or html)
  • Show total number of steps
  • Show progress (e.g. current step like 5/20 - 25%)
  • Return to current step point (if user manually scrolled somewhere else)
  • Close/End the navigation

Within the code, we should support:

  • Add (inline) any extra assets e.g. comments, links, images, .gifs, sound

Initial Plugin Structure

As an initial structure, we should do the following::

  • Initial Structure of Plugin (probably gradle)
  • Be able to run/debug it

Dynamic Update

When a tour is created, it holds the file name and the line number. Thus if the code a line changed

We should provide a more flexible logic.
Options:

  • Hold dynamic references (valid only for methods)
  • Listen to changing/refactoring events and adjust properly (the same way that breakpoints work)

Note: Maybe difficulty for the MVP version

Handover Challenges

Should be able to answer the following:

  • What information is being provided on a project handover? Level of detail?
  • How?
  • To whom?
  • Can handover be persisted and probably maintained?
  • Does handover includes Design decisions info? e.g. why feature A implemented that way, or why code refactor performed to deal with feature B etc

Note: Handover is the process of passing the knowledge of a project to another person upon the departure of the first one

Support Steps re-ordering on Tree

Currently, the Steps of a Tour cannot be rearranged.

  • Consider adding a drag n drop functionality or just moveUp/moveDown buttons on Steps of a Tour (on Tool Window tree)
  • Step Description editor should provide preview

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.