Menu

#560 Reviving Task Coach development

Release_1.4
accepted
None
linux
9
2024-06-03
2023-11-13
Vit Kucera
No

Dear Task Coach developers,

First of all I want to thank you for creating such a wonderful tool with a clean yet flexible interface and efficient task manipulation.
I have been using it for the last two months and I can see that it's the closest to what I need among the applications I have found, as it comes with a unique combination of practical features which I have not found anywhere else and it allows me to focus on the most important tasks to do next.

I was wondering why the latest version was four years old and found in the discussions here that the main showstopper for further development was the pending porting to Python 3 [1-3].
I think it will be a great pity if the project is abandoned for good because of this.
I fully agree with Aaron that Task Coach has a future potential and it's definitely worth getting it back to being a maintained program and upgrading it with a modern framework as Jerome planned.
I also really appreciate Christophers's effort with porting the code base to Python 3 and I think what he started should be finished.

In my attempt to give the development another spark, I did some first preparation steps that I want to share with you.

  • I converted the Mercurial repository into a Git repository (hopefully preserving all the history and branches) and pushed it to GitHub: https://github.com/vkucera/task-coach. Since collaboration on GitHub has become a de facto standard, I think it makes it easier to convince other potential contributors to help.
  • I converted the taskcoach-python3 branch using the conversion tool 2to3 (https://docs.python.org/3/library/2to3.html) which should take care of a great deal of the porting to Python 3. See the commit in https://github.com/vkucera/task-coach/tree/taskcoach-python3.
  • Since the taskcoach-python3 and the master branches have diverged (and I am not sure which one should be the starting point for the resumed development), I also converted the master branch and committed the result in a new branch (see https://github.com/vkucera/task-coach/tree/python3).
  • I haven't tried testing or building anything yet.
  • I am happy to add and configure linters for CI checks on GitHub.

For your information, Linux Mint is the only desktop OS I am using so I can only help with code writing/testing for Ubuntu-compatible platforms.

Before spending more time on this, I would like to hear from you whether you are willing to give it a shot and make Task Coach the best updated todo list app for desktops. :-)

Cheers,
Vít

Refs.
[1] https://sourceforge.net/p/taskcoach/support-requests/499/
[2] https://sourceforge.net/p/taskcoach/support-requests/540/#f122
[3] https://sourceforge.net/p/taskcoach/support-requests/549/#acca/9792/9c8b

Related

Support Requests: #560

Discussion

1 2 > >> (Page 1 of 2)
  • Aaron Wolf

    Aaron Wolf - 2023-11-14
    • status: unread --> accepted
    • assigned_to: Aaron Wolf
    • Priority: 1 --> 9
     
  • Aaron Wolf

    Aaron Wolf - 2023-11-14

    Wow, thanks for this effort. I hope Jerome sees this and speaks up about his views. I know he historically has had a strong preference for Mercurial (and, I'm ignorant about it, but I suspect he's right about Mercurual being better, but it's like VHS vs Betamax videotape — better technology does not always win the market, and it's tragic, but we have to deal with the reality of it).

    I hope that at the least, Jerome would be willing to respond to code questions, provide input and guidance to those helping to revive Task Coach.

    For my part, I am very busy (see my Task Coach file!) but I would prioritize Task Coach enough to test releases, mention the revival of the project to anyone I encounter who might want to help, and answer any questions I can about anything other than the code (which I've never dealt with). Since first volunteering for Task Coach, I have other additional experience with managing free/libre/open projects and could put in some time toward helping structure the project, bringing it to more contemporary development methods (from my perspective being documentation, recruiting, project managing etc, not code process).

    Even still, I think there's more than Python3 in terms of both technical and design debt and legacy in Task Coach. I'm not sure how optimistic to be about revitalizing. But the more it seems feasible, the more I'm in on doing what I can to help.

    I think my vote at this point would be toward making this fork (Python3 and Git is already a shift) be free to drop some backwards-compatibility as long as there's a transfer process. It might be cleanest to be willing to cut out features that have messier code and consider other ways to reimplement or just to drop functions that are costly and extraneous in order to get a leaner version of Task Coach that still would have the essential things that make it unique… I'm happy to discuss what this might mean if we get to where actual detailed decisions arise.

    Thank you so much for the effort this far, and I guess we'll see. A journey of 1,000 miles begins with a single step…

     
  • SZYDLOWSKI Sylvain

    Bonjour,

    J'utilise taskcoach après avoir lâché ThinkingRock aux environs de 2013-2014, cherchant quelque-chose collant plus à la fameuse méthode et de ce que j'avais appris des techniques d'ingénieurs.
    Ce projet me plaît tellement que je cherchais le moment pour y contribuer. Depuis septembre, je tente d'apprendre le python sur ce code en tentant de le porter sur Python3.
    Je suis resté bloqué aux import de class inexistantes tel que desktop!

    Il y a quinze jours, je suis tombé sur cette article: https://docs.python.org/fr/3.11/howto/pyporting.html qui m'a un peu plombé.
    Ma question est :
    -doit-on tenter de créer un nouveau logiciel en pur python3 , ce qui me parrait être une lourde tâche;
    -ou essayons-nous de porter le logiciel qui fonctionne en python 2.7 vers python 3 via futurize ou modernize avant de continuer à le faire évoluer ?

     
    • Aaron Wolf

      Aaron Wolf - 2023-12-24

      I used translation help to understand, but Jerome speaks French and might possibly reply.

      For my view, I will just say that updating Task Coach to Python3 would really be helpful, it would allow it to continue being used by people to use it now, and it could open up the possibility of improving it in the future. I can't say that it is definitely better than starting a new Python3 project, but porting Task Coach would definitely be a helpful thing and would also help you in understanding Python.

       
  • Aaron Wolf

    Aaron Wolf - 2024-02-19

    Any progress?

     
  • SZYDLOWSKI Sylvain

    Well, After reviewing each taskcoach file (without thirdparty and test) in order to no longer have errors, I am currently fighting with thirdparty (choice between thirdparty to translate, change in the Makefile, or use of Packages with pip). To take my mind off things, I created a config/arguments.py file based on options.py to use argparse instead of optparse (soon to be obsolete).
    https://github.com/freedomsha/task-coach/blob/master/taskcoach/taskcoachlib/config/arguments.py

     
    • Aaron Wolf

      Aaron Wolf - 2024-03-07

      Thanks for the update!

       
  • SZYDLOWSKI Sylvain

    I reached a dead end.
    When trying to run python taskcoach.py, here is the error message:
    `Traceback (most recent call last):

    File "/home/sylvain/Téléchargements/src/TaskCoach-future3/taskcoach/taskcoach.py", line 81, in <module> start()
    File "/home/sylvain/Téléchargements/src/TaskCoach-future3/taskcoach/taskcoach.py", line 72, in start
    app = application.Application(options, args)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/home/sylvain/Téléchargements/src/TaskCoach-future3/taskcoach/taskcoachlib/patterns/singleton.py", line 39, in call
    cls.instance = super().call(args, kwargs)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/home/sylvain/Téléchargements/src/TaskCoach-future3/taskcoach/taskcoachlib/application/application.py", line 125, in init
    self.init(
    *kwargs)
    File "/home/sylvain/Téléchargements/src/TaskCoach-future3/taskcoach/taskcoachlib/application/application.py", line 223, in init
    from taskcoachlib import gui, persistence
    File "/home/sylvain/Téléchargements/src/TaskCoach-future3/taskcoach/taskcoachlib/gui/init.py", line 27, in <module>
    from .mainwindow import MainWindow
    File "/home/sylvain/Téléchargements/src/TaskCoach-future3/taskcoach/taskcoachlib/gui/mainwindow.py", line 31, in <module>
    from taskcoachlib.gui import viewer, toolbar, uicommand, remindercontroller, \
    File "/home/sylvain/Téléchargements/src/TaskCoach-future3/taskcoach/taskcoachlib/gui/viewer/init.py", line 26, in <module>
    from .task import TaskViewer, TaskStatsViewer, CheckableTaskViewer, \
    File "/home/sylvain/Téléchargements/src/TaskCoach-future3/taskcoach/taskcoachlib/gui/viewer/task.py", line 48, in <module>
    from . import base
    File "/home/sylvain/Téléchargements/src/TaskCoach-future3/taskcoach/taskcoachlib/gui/viewer/base.py", line 43, in <module>
    class Viewer(patterns.Observer, wx.Panel, metaclass=patterns.NumberedInstances):
    TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases`</module></module></module></module></module></module>

    Reading http://www.phyast.pitt.edu/~micheles/python/metatype.html, I pretty much understand the concept but I don't see how to fix it!
    The only path I followed is to look at the result of pyreverse, example:
    pyreverse -o pdf -p base-all-names-wlibs -my -A -b -L -S base.py --colorized.
    Oddly, I see taskcoachlib.patterns.oberver.Observer as a child class of taskcoachlib.gui.viewer.base.Viewer when it should be the other way around!?

    So, to continue learning, I found out about unittest. I am testing tests-py3/tctest.py.

     

    Last edit: SZYDLOWSKI Sylvain 2024-03-20
  • SZYDLOWSKI Sylvain

    User
    voici ce que j'ai ajouté dans taskcoach.py pour :

        tcoptions, args = config.ApplicationArgumentParser().parse_known_intermixed_args()
        # en utilisant l'astuce de The Namespace object dans https://docs.python.org/3.11/library/argparse.html
        options = vars(tcoptions)
    
     
  • Hongshe Liang

    Hongshe Liang - 2024-05-21

    Oh, hell, before I found you are discussing here, I had make a workable version from Sylvain's python3 branch these days T_T ....

    My Fork at GitHub

    My original purpose just want to fix some issues that boring me when using 1.4.6, but seems before doing that I had to port it to python3 & wxPyhton4 first. After jumping in the code like a monkey, and finally I had make a smoking car from that: It run, GUI show up, but exceptions might pump out of nowhere ....

     

    Last edit: Hongshe Liang 2024-05-21
  • SZYDLOWSKI Sylvain

    Wow, I try when I can. I still have a lot of bugs!

     
  • SZYDLOWSKI Sylvain

    In the meantime, I haven't changed some things on my fork yet. Notably, NewId changes to NewIdRef and some wx functions.

     
    • Hongshe Liang

      Hongshe Liang - 2024-05-28

      I'm glad to hear from you, Sylvain! It's feel lonely when doing this interesting thing.
      Bugs are same on my fork either, NewId/Deprecated wx stuffs might still hiding somewhere until they bump on my face O.o ... Now the drag & drop function seems already broken, other stuffs are seem ok (but not fully perfect yet). I'm trying to make drag & drop work again now ... (I'm expert of c & c++ & python but not familar with wxWidgets or wxPython framework)

      My develop environment is linux mint on x64 intel cpu, I don't know if the fork still works in other system now :P, I think get to the working point is the more important things before compatibility issues.

       
      • Hongshe Liang

        Hongshe Liang - 2024-05-28

        Correct me if I'm wrong, is this your github repository fork? : https://github.com/freedomsha/task-coach

         
  • SZYDLOWSKI Sylvain

    Yes, absolutely but being alone working on it, it's been a long time since I updated it and I still can't get it to work.

    My config on Manjaro is a venv in pycharm with python 3.12 with wxpython 4.2.1. But I know/can't synchronize with github, it's annoying!

    So I tried your version and this is what came out:

    I have a first problem with make prepare:
    make prepare ✔

    cd thirdparty; tar xzf python-dateutil-1.5.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty python-dateutil-1.5/dateutil

    cd thirdparty; tar xzf desktop-0.4.2.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty desktop-0.4.2/desktop

    cd thirdparty; tar xzf keyring-3.7.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty keyring-3.7/keyring
    cd thirdparty; tar xzf lockfile-0.12.2.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty lockfile-0.12.2/lockfile
    cd thirdparty; tar xzf PyPubSub-3.3.0.tar.gz --strip-components=2 -C ../taskcoachlib/thirdparty PyPubSub-3.3.0/src/pubsub
    cd thirdparty; tar xzf SquareMap-1.0.3.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty SquareMap-1.0.3/squaremap

    cd thirdparty; tar xzf python-ntlm-40080cff37ab32570f9bb50bad0a46b957409c18.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty python-ntlm/ntlm

    cd thirdparty; tar xzf wxScheduler-r151.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty wxScheduler/wxScheduler

    cd thirdparty; tar xzf aui-r72315.tar.gz -C ../taskcoachlib/thirdparty

    cd thirdparty; tar xzf WMI-1.4.9.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty WMI-1.4.9/wmi.py

    cd thirdparty; tar xzf pyparsing-1.5.5.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty pyparsing-1.5.5/pyparsing_py2.py

    mv taskcoachlib/thirdparty/pyparsing_py2.py taskcoachlib/thirdparty/pyparsing.py

    cd thirdparty; tar xzf pybonjour-1.1.1.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty pybonjour-1.1.1/pybonjour.py

    cd thirdparty; tar xzf agw-r70845.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty agw/customtreectrl.py

    cd thirdparty; tar xzf agw-r70819.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty agw/hypertreelist.py

    cd thirdparty; tar xzf gntp-d639fa2e981fe41196a5115ad64320b5061f004b.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty gntp/gntp
    cd thirdparty; tar xzf pyxdg-0.25.tar.gz --strip-components=1 -C ../taskcoachlib/thirdparty pyxdg-0.25/xdg
    cd taskcoachlib/thirdparty; patch -p1 < ../../thirdparty/patches/customtreectrl.diff
    can't find file to patch at input line 4
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:


    |diff -r -U 4 agw/customtreectrl.py agw-patched/customtreectrl.py
    |--- agw/customtreectrl.py 2012-10-14 17:50:36.000000000 +0200
    |+++ agw-patched/customtreectrl.py 2014-03-09 14:32:25.000000000 +0100

    which I still haven't fixed! (since currently, I no longer work with thirdparties. Only with packages)

    Then in taskcoachlib/i18n/init.py

    imp is deprecated, replace with 'from importlib.machinery import SourceFileLoader as load_source'

    and replace imp.load_source with load_source.

    as well as in tools/pygettext.py(which has changed quite a bit!),

    I replaced import imp with:

    import importlib.machinery
    
    import importlib.util
    

    then see with which we can replace imp in _def_visit_pyfile and following...
    it is explain there: "https://stackoverflow.com/questions/61622881/transition-from-imp-to-importlib"

     

    Last edit: SZYDLOWSKI Sylvain 2024-05-29
    • Hongshe Liang

      Hongshe Liang - 2024-05-29

      Okay,,, Sorry for that, may be because I jump into the codebase after a success "make prepare" then without look back. Maybe something broken at the preparation stage.

      I will now re-checkout from the fresh source codebase and fix those problems, please wait.

      I hope I can fix it tonight ...

       
      • Hongshe Liang

        Hongshe Liang - 2024-05-29

        I have fixed that make prepare problem, you could try after pull the new commits.

        Just notice that you are using python 3.12, that make things different, I'm working on python 3.10, seems some function will disappear on 3.12.

        I'm trying to create a new environment base on 3.12

         
        • Hongshe Liang

          Hongshe Liang - 2024-05-29

          Thanks you provide the information about porting "imp" to "importlib", I have fix that deprecated warnings by that. Could you try again and check if it works?

           
  • SZYDLOWSKI Sylvain

    je ne peux pas ce soir mais demain

     
  • SZYDLOWSKI Sylvain

    Une idée me viens vu que tu es sur 3.10.
    Je vais bientôt envoyer mes commits sur mon git. je vais tester ta version. dès que ça fonctionne, je l'intègre dans mon git.
    tu verras, ma version est pleine d'annotations pensant à la rétrocompatibilité avec 2.7 mais plus j'avance plus je me dis que c'est inutiles. N'est ce pas ?

     
    • Hongshe Liang

      Hongshe Liang - 2024-05-30

      Thanks for checking:) I think you are right, python2 already obsolated and no reason to keep compatible even with 3.8. There so many libraries already not working on python2 now, and the wxPython4 does not have a python2 version either.

      I hope that merge won't boring you, because I have format all sources by formatter "black" and use it's standard with a line length 79 (Original I don't expect there have someone merge it and I want to have a fresh starts:P).

       
  • SZYDLOWSKI Sylvain

    make prepare has a problem in pycharm:

    Embedded splash.png using 'splash' into ../taskcoachlib/gui/icons.py
    make: *** [Makefile:197: icons] Segmentation fault (core dump created)
    on my system I get better:
    ...
    Embedded splash.png using "splash" into ../taskcoachlib/gui/icons.py
    cd templates.in; "python" make.py
    "python" tools/pygettext.py --output-dir i18n.in taskcoachlib
    cd i18n.in; "python" make.py
    Traceback (most recent call last):
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/i18n.in/make.py", line 24, in <module>
    from taskcoachlib.i18n import po2dict
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/i18n/init.py", line 26, in <module>
    from taskcoachlib import patterns, operating_system
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/patterns/init.py", line 20, in <module>
    from .observer import *
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/patterns/observer.py", line 21, in <module>
    from taskcoachlib.thirdparty.pubsub import pub
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/pub.py", line 35, in <module>
    from .core import (
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/init.py", line 45, in <module>
    from .publisher import Publisher
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/kwargs/publisher.py", line 7, in <module>
    from .publisherbase import PublisherBase
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/publisherbase.py", line 6, in <module>
    from .topicmgr import (
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/topicmgr.py", line 16, in <module>
    from .callables import getID
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/callables.py", line 15, in <module>
    from inspect import getargspec, ismethod, isfunction
    ImportError: cannot import name 'getargspec' from 'inspect' (/usr/lib/python3.12/inspect.py). Did you mean: 'getargs'?
    make: *** [Makefile:241: taskcoachlib/i18n/nl.py] Error 1</module></module></module></module></module></module></module></module></module></module>

    For
    

    python taskcoach.py
    I have in pycharm:
    Process finished with exit code 139 (interrupted by signal 11:SIGSEGV)
    and in my system:
    /home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/kwargs/listenerimpl.py:13: SyntaxWarning: invalid escape sequence '*'
    """ Wraps a callable so it can be stored by weak reference and introspected
    Traceback (most recent call last):
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoach.py", line 84, in <module>
    start()
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoach.py", line 69, in start
    from taskcoachlib import config, application
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/config/init.py", line 19, in <module>
    from .settings import Settings
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/config/settings.py", line 19, in <module>
    from taskcoachlib import meta, patterns, operating_system
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/patterns/init.py", line 20, in <module>
    from .observer import *
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/patterns/observer.py", line 21, in <module>
    from taskcoachlib.thirdparty.pubsub import pub
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/pub.py", line 35, in <module>
    from .core import (
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/init.py", line 45, in <module>
    from .publisher import Publisher
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/kwargs/publisher.py", line 7, in <module>
    from .publisherbase import PublisherBase
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/publisherbase.py", line 6, in <module>
    from .topicmgr import (
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/topicmgr.py", line 29, in <module>
    from .topicargspec import (
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/topicargspec.py", line 10, in <module>
    from .listener import getArgs as getListenerArgs
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/listener.py", line 18, in <module>
    from .listenerimpl import (
    File "/home/sylvain/Téléchargements/src/task-coach-ex/taskcoach/taskcoachlib/thirdparty/pubsub/core/kwargs/listenerimpl.py", line 8, in <module>
    from ..listenerbase import ListenerBase, ValidatorBase
    ModuleNotFoundError: No module named 'taskcoachlib.thirdparty.pubsub.listenerbase'</module></module></module></module></module></module></module></module></module></module></module></module></module>

    I no longer remember how I managed to resolve these implicit import errors in my other project.

     
  • SZYDLOWSKI Sylvain

    WAWOOH! IT STARTED ! SO HAPPY

     
    👍
    1
  • SZYDLOWSKI Sylvain

    Well, there is still a way to go.

     
    👍
    1
    • Hongshe Liang

      Hongshe Liang - 2024-05-31

      Congratulations! Just enjoy yourself:)

      I just come back from company, dog tired a day. It's 21:13 here, I have to sleep next day for recover T_T.

       
1 2 > >> (Page 1 of 2)

Log in to post a comment.