Difference between revisions of "Hackfest2015 Topics"

From Inkscape Wiki
Jump to navigation Jump to search
Line 109: Line 109:
=== Invert coordinate system (Tav) ===
=== Invert coordinate system (Tav) ===


If there was ever a good moment to do the coordinate system flip, this is it.
<p style="width:60em">If there was ever a good moment to do the coordinate system flip, this is it. (should coordinates be configurable in relation to the canvas?)</p>
(should coordinates be configurable in relation to the canvas?)
 
==== Comment from Krzysztof ====
 
<p style="width:60em">We need to decide whether we want to keep the 3D Box at all costs, or is the coordinate system inversion a more important goal than having 3D Box. Being unable to fix 3D Box was the main reason I didn't commit this change when I initially made it. FWIW, I think the 3D Box tool is nearly unusable and needs to be rewritten from scratch. It also pollutes the entire codebase with special handling for its perspective elements, indicating faulty
design.</p>


=== CMake (Bryce) ===
=== CMake (Bryce) ===

Revision as of 10:20, 20 March 2015

Please add topics you would like to discuss or work you would like to see done at the hackfest.

Other pages: Hackfest 2015, Hackfest2015 Attendees.

Discussions

SVG 2 strategy (Tav)

  • Overview/rundown of relevant new SVG2 features. What are they, what will need done to implement them?
  • How do we handle fallbacks?
  • When do we add things to the GUI? (When three browsers offers support?)


Program flow (Tav)

  • Diagram how Inkscape behaves/should behave on:
    • Opening a file.
    • Changing a style item (e.g. 'fill').
    • Moving a node.
    • Deleting an item.
      • Comment: Deleting an item causes Inkscape to create a new SVG document with containing the deleted item to allow pasting.

Motivation

Add a few random print statements in Inkscape and you'll see that Inkscape visits certain functions more often than one would think it should. Having well defined diagrams will allow developers to clean up existing code and to better understand what needs to be done to add new features. I've noticed that we suffer from "cargo cult programming" where people add functions without fully understanding if they are truly needed.

  • Ideas
    • Better, easily referenced API documentation
    • Code reviews
    • `linux perf` can be used to identify performance critical functions

Comments from Krzysztof

This is a pretty big problem right now. The flow looks like this:

Something is updated in the SP tree

  1. updateRepr() is called
  2. new XML is written
  3. XML modification listeners fire
  4. SP tree is re-read from the XML
  5. A recursive call to update() is made
  6. Each of those update calls updates the rendering tree in turn.

As a result, changing the document height triggers a full update of the rendering tree, even though almost nothing changes.

The current approach makes it impossible to introduce errors that cause the XML and the SP tree to go out of sync, at the cost of performance. We could discuss what to do about this.

Website (DoctorMO)

  • How do people feel about it's current functions
  • How should we move it forwards?
  • Plans for mailing list migrations.
  • Getting developers set up with local copies for hacking.

Refactoring (AV)

Can we decide on a roadmap to work with new APIs and compilers? How do we minimize breakages for downstream users? Can we balance risk with reward? How does each migration benefit the developers, package maintainers and end users?

Some possible changes to discuss:

  • Moving to C++11
    • code cleanup/maintainability
    • improved data structures/templating
  • Adding a hard Cairo 1.14 dependency
    • Fix bitmap downscaling issue
  • Gtk+ 3 migration
    • Get rid of lots of conditional code
    • Get rid of embedded GDK library fork
    • Some "cleaner" API available
    • How do we handle canvas flickering/rendering issues?
  • C++ification
    • Migrate widgets/dialogs to Gtkmm
    • Get rid of popt
    • Get rid of GObject usage
  • Removing 3rd party Library dependencies from version control
  • Change how we're utilizing 3rd party libraries

Refactoring (Krzysztof)

  • Unnecessary profileration of namespaces.

    Things like Inkscape::UI::View::View are excessive. I cannot imagine a scenario where we would need more than 2 levels of namespaces. Everything UI-related should sit in Inkscape::UI, without separate namespaces for widgets and dialogs which only serve to increase typing.

  • Directory structure. Let's make a directory for the SP tree, and namespace it as Inkscape::SVG (or maybe Inkscape::DOM).
  • Identify clever geometry code which can be cleaned up and moved to 2Geom.

Roadmap Planning (Bryce)

Prioritize feature and infrastructure development work for next several releases.

Fundraisers (Bryce)

Brainstorm future fundraising ideas.

Community Development (Bryce)

  • Championing FOSS ideals generally
  • Expanding userbase
  • Building up a strong evangelist user community
  • Recruiting newbie developers, encouraging involvement, and mentoring
  • Re-connecting with old timers
  • Promoting existing developers into leadership roles

Hacking

Invert coordinate system (Tav)

If there was ever a good moment to do the coordinate system flip, this is it. (should coordinates be configurable in relation to the canvas?)

Comment from Krzysztof

We need to decide whether we want to keep the 3D Box at all costs, or is the coordinate system inversion a more important goal than having 3D Box. Being unable to fix 3D Box was the main reason I didn't commit this change when I initially made it. FWIW, I think the 3D Box tool is nearly unusable and needs to be rewritten from scratch. It also pollutes the entire codebase with special handling for its perspective elements, indicating faulty design.

CMake (Bryce)

A while back someone made a valiant attempt to get Inkscape built with cmake, but if this ever worked it's bitrotted to where it doesn't work presently. Hack it back into working shape on Linux, Mac, and Windows. Write up evaluation.

Hardware Acceleration Experimentation (Bryce)

Create experimental branch using Cairo-GLX as the rendering backend. Evaluate rendering performance. Brainstorm follow up work.