[Qt][PoC] introduce "core-pulse" #5896

pull jonasschnelli wants to merge 1 commits into bitcoin:master from jonasschnelli:2015/03/core-pulse changing 10 files +559 −1
  1. jonasschnelli commented at 10:50 AM on March 14, 2015: contributor

    --- this implementation if totally rought and for conceptual reviews only ---

    This is more or less a gimmick.

    bildschirmfoto 2015-03-14 um 11 48 41

    I started this PR because i'd like to get some ideas and likes/dislikes to see if its worth continuing this.

    Adds live information about the full node within a new Qt window.

    • show the last recent blocks (3 blocks)
    • show changes of the mempool
    • show connected peers and sent/recv bytes in form of a line

    Further ideas:

    • calculate and show mempool rate (tx/s)
    • color of the peer could change based on CNode->nLastSend and CNode->nLastRecv
    • animation when updating (fading, move-in, etc.)
    • mousover interaction (view only), tx details, peer details, etc.

    Implementation Cleanup:

    • data should go over ClientModel
    • peers should use
    • avoid updating of all elements
    • make use of CNodeCombinedStats
    • leak checking and performance opti.
  2. jonasschnelli force-pushed on Mar 14, 2015
  3. jonasschnelli force-pushed on Mar 14, 2015
  4. luke-jr commented at 2:20 PM on March 14, 2015: member

    This looks like data that should be in the debug window (there's already a tab with peer info). Also should use the default/normal/user-preferred fonts, rather than overriding it with something.

  5. gmaxwell commented at 5:53 PM on March 14, 2015: contributor

    I think having some fun, gimmicky sort of visualization would be fine and useful-- maybe even something that can run as a screensaver. The knowledge that the program is busy doing interesting and important things is a reward for running the software that not everyone is already receiving.

    I'm not sure about having a window that is so visually unlike the rest of the software; but I suppose it's better the more it moves to being a kind of screensaverish thing.

    A big emphasis should be on having a lot of motion to make it clear that the software is doing a lot, I think...

    There should be part to show active information about mining (e.g. hashrate, best share found so far) which otherwise gets filled with a You're not mining.

  6. dgenr8 commented at 3:55 AM on March 16, 2015: contributor

    @jonasschnelli Super nice. Some ideas...

    Highlight wallet txes in the mempool and maybe block flyovers, user will be looking for them.

    To @gmaxwell's idea about "motion," maybe it could represent the activity that interrelates the three objects shown. New txes and blocks visually fly from the received-from node to their lists. A gaggle of txes bunches up and flies into a new block (I guess many would fly in from off-screen). A reorg'ed block spits them back out. Maybe little 1-pixel tx bullets and 3-pixel blocks fly from txes and blocks to each peer when they are advertised.

    Requires more node<->wallet communication but bitcoin core is suited for it.

  7. sipa added the label GUI on Mar 16, 2015
  8. laanwj commented at 10:40 AM on March 16, 2015: member

    Nice. This gives the node GUI something more to show. +1 on making it a screensaver/fullscreen visualization.

    Requires more node<->wallet communication but bitcoin core is suited for it.

    Let's not add anything wallet related here. I like @jonasschnelli's idea of basing this on ClientModel only, so this will work with --disable-wallet builds as well.

  9. ajweiss commented at 5:29 PM on March 16, 2015: contributor

    This is cool. I can imagine I'd call this up during initial sync since it takes a while and it's doing a bunch of stuff, so maybe it would be interesting to visualize more of that process? (eg: blocks in flight from each peer, current height of the header chain along with current downloaded height)

  10. jonasschnelli commented at 7:44 PM on March 16, 2015: contributor

    Okay. I'll continue with this and try to make the screen layout flexible and add a fullscreen-size by default. I'd like to stick to the limit of not changing core code for now. A first version should be a independent new window with just a few lines of changes in the existing code. This will avoid risks of introducing new issues in the UI or the core.

  11. sipa commented at 3:06 PM on June 16, 2015: member

    Needs rebase.

  12. jonasschnelli force-pushed on Jun 16, 2015
  13. jonasschnelli commented at 4:10 PM on June 16, 2015: contributor
  14. [Qt][PoC] introduce "core-pulse"
    --- this implementation if totally rought and for conceptual reasons only ---
    
    This is more or less a gimmick.
    
    Adds live information about the full node within a new Qt window.
    * show the last recent blocks (3 blocks)
    * show changes of the mempool
    * show connected peers and sent/recv bytes in form of a line
    
    Further ideas:
    * calculate and show mempool rate (tx/s)
    * color of the peer could change CNode->nLastSend and CNode->nLastRecv
    * animation when updating (fading, move-in, etc.)
    * mousover interaction (view only), tx details, peer details, etc.
    
    Implementation Cleanup:
    * data should go over ClientModel
    * peers should use
    * avoid updating of all elements
    * make use of CNodeCombinedStats
    * leak checking and performance opti.
    6c2f37b351
  15. jonasschnelli force-pushed on Jun 16, 2015
  16. luke-jr commented at 6:26 AM on June 24, 2015: member

    @jonasschnelli How about getting rid of the custom fonts?

  17. jonasschnelli commented at 6:33 AM on June 24, 2015: contributor

    @luke-jr: The custom font is about 50% of the UX feeling. If i would go back to Arial or something which is available on OSX/Win/Linux it would really look bad. The font is totally embedded. No need to install or anything like this. You have to trust me here. :)

  18. luke-jr commented at 6:50 AM on June 24, 2015: member

    As a user, I always consider inconsistency in fonts to be bad UX. This one is particularly ugly IMO. Even in your screenshots, it's unreadable unless I get my face really close to my monitor and strain my eyes at it. You can't just assume everyone has the same tastes as you...

    This font is also non-free..

    This does not render it correctly on my system: http://luke.dashjr.org/tmp/screenshots/snapshot135.png

    Finally, it caused Bitcoin-Qt to hang in an infinite(?) loop:

    [#0](/bitcoin-bitcoin/0/)  0xf6854cb3 in QVector<QGraphicsItem*>::indexOf (this=0xf816da48, t=@0xfff5cb74: 0xb1ca068, from=0)
        at ../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.6/src/corelib/tools/qvector.h:705
    [#1](/bitcoin-bitcoin/1/)  0xf683d2e3 in QGraphicsScenePrivate::removeItemHelper (this=0xf816d990, item=0xb1ca068)
        at /var/tmp/portage/dev-qt/qtgui-4.8.6-r4/work/qt-everywhere-opensource-src-4.8.6/src/gui/graphicsview/qgraphicsscene.cpp:669
    [#2](/bitcoin-bitcoin/2/)  0xf684483a in QGraphicsScene::removeItem (this=0xf808c9e8, item=item@entry=0xb1ca068)
        at /var/tmp/portage/dev-qt/qtgui-4.8.6-r4/work/qt-everywhere-opensource-src-4.8.6/src/gui/graphicsview/qgraphicsscene.cpp:2983
    [#3](/bitcoin-bitcoin/3/)  0xf6e7e279 in PulseDialog::DrawRecentTx (this=this@entry=0xf81a5fb0) at qt/pulsedialog.cpp:124
    [#4](/bitcoin-bitcoin/4/)  0xf6e81164 in PulseDialog::UpdateOnMainThread (this=this@entry=0xf81a5fb0) at qt/pulsedialog.cpp:92
    [#5](/bitcoin-bitcoin/5/)  0xf6ecf93f in PulseDialog::qt_static_metacall (_o=0xf81a5fb0, _c=QMetaObject::InvokeMetaMethod, _id=1, 
        _a=0xcd2cf038) at qt/moc_pulsedialog.cpp:52
    [#6](/bitcoin-bitcoin/6/)  0xf5c8123a in QMetaCallEvent::placeMetaCall(QObject*) () from /usr/lib/qt4/libQtCore.so.4
    [#7](/bitcoin-bitcoin/7/)  0xf5c8908b in QObject::event(QEvent*) () from /usr/lib/qt4/libQtCore.so.4
    [#8](/bitcoin-bitcoin/8/)  0xf61c87ec in QWidget::event (this=0xf81a5fb0, event=0xd0486978)
        at /var/tmp/portage/dev-qt/qtgui-4.8.6-r4/work/qt-everywhere-opensource-src-4.8.6/src/gui/kernel/qwidget.cpp:8859
    [#9](/bitcoin-bitcoin/9/)  0xf616c154 in QApplicationPrivate::notify_helper (this=0xf782b9d8, receiver=0xf81a5fb0, e=0xd0486978)
        at /var/tmp/portage/dev-qt/qtgui-4.8.6-r4/work/qt-everywhere-opensource-src-4.8.6/src/gui/kernel/qapplication.cpp:4565
    [#10](/bitcoin-bitcoin/10/) 0xf616bea4 in QApplication::notify (this=0xfff5d714, receiver=0xf81a5fb0, e=0xd0486978)
        at /var/tmp/portage/dev-qt/qtgui-4.8.6-r4/work/qt-everywhere-opensource-src-4.8.6/src/gui/kernel/qapplication.cpp:4530
    [#11](/bitcoin-bitcoin/11/) 0xf5c6fd4a in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/qt4/libQtCore.so.4
    [#12](/bitcoin-bitcoin/12/) 0xf5c7315d in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) ()
       from /usr/lib/qt4/libQtCore.so.4 <------- this never returns
    [#13](/bitcoin-bitcoin/13/) 0xf5ca1555 in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
       from /usr/lib/qt4/libQtCore.so.4
    [#14](/bitcoin-bitcoin/14/) 0xf622f270 in QEventDispatcherX11::processEvents (this=0xf7827db8, flags=...)
        at /var/tmp/portage/dev-qt/qtgui-4.8.6-r4/work/qt-everywhere-opensource-src-4.8.6/src/gui/kernel/qeventdispatcher_x11.cpp:152
    [#15](/bitcoin-bitcoin/15/) 0xf5c6e7b3 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
       from /usr/lib/qt4/libQtCore.so.4
    [#16](/bitcoin-bitcoin/16/) 0xf5c6ead9 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/qt4/libQtCore.so.4
    [#17](/bitcoin-bitcoin/17/) 0xf5c7436e in QCoreApplication::exec() () from /usr/lib/qt4/libQtCore.so.4
    [#18](/bitcoin-bitcoin/18/) 0xf61694f2 in QApplication::exec ()
        at /var/tmp/portage/dev-qt/qtgui-4.8.6-r4/work/qt-everywhere-opensource-src-4.8.6/src/gui/kernel/qapplication.cpp:3823
    [#19](/bitcoin-bitcoin/19/) 0xf6e2c57d in main (argc=3, argv=0xfff5d804) at qt/bitcoin.cpp:636
    
  19. jonasschnelli commented at 6:55 AM on June 24, 2015: contributor

    @luke-jr : agreed. It really looks bad on your system. It probably because the resizing window feature is totally unfinished and was included halfway in the last rebase. :)

    Font: i really like to have a custom font here. Sure ist must be free and according to our license. But to give "pulse" the right look, the font should and can be inconsistence. Many good looking projects/app live with font inconsistency and increase the UX feeling.

  20. jgarzik commented at 6:09 PM on September 15, 2015: contributor

    Trying to push back a bit on long-lived proof-of-concept pull requests... would prefer to close this and discuss on the mailing list.

    P.S. Looks cool! :)

  21. jonasschnelli commented at 6:12 PM on September 15, 2015: contributor

    I have plans to continue this. Also maybe someone else jumps up on this. But agreed, PoCs should come out of the PoC stage quick or they should be closed. Closing for now we a chance of reopening.

  22. jonasschnelli closed this on Sep 15, 2015

  23. btcdrak commented at 11:22 AM on December 17, 2015: contributor

    I hope this gets revived.

  24. MarcoFalke commented at 12:06 PM on December 17, 2015: member

    @jonasschnelli Did you already consider coin join transactions in this pull? I think we can nicely visualize (such) transactions in general to make bitcoin easier to understand for new users.

  25. MarcoFalke locked this on Sep 8, 2021

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-04-13 21:15 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me