As will have been observed, I've been thinking hard over the last few
weeks as to how we can make MPIR contribution easier. In short it
would be good to have more core developers. In particular I've been
working on, or planning:

* Set up a Git repo and encourage its use
* Write developer documentation
* Write an FAQ
* Write an MPIR digest detailing development progress every three weeks
* Write an MPIR most wanted list, of most needed contributions
* Write a set of scripts or a program which makes adding new files to MPIR easy

In this post I'll concentrate on the last of these which I've been
looking into for a couple of days.

The idea I had was to begin work on a cross platform windows program
for MS Windows, OSX, KDE, etc, which would take the pain out of adding
new files and modules to existing C maths libraries. With a little
configuration it would essentially write all the boilerplate for the
user, including stubs for test code, the function being added, and
basically do all the configure and make stuff that needs to be done
automatically.

I decided to look into writing a basic programmer's editor, linked
with Git, which would have this extra functionality of adding
boilerplate code for new functions. The first step was to write a
basic windows editor with C syntax highlighting and block folding.

As python is cross platform I looked for libraries for Windows
development. Initially I found:

* Python 2.6, which is cross platform
* pygments - for syntax highlighting text, outputting it to rich text format
* wxPython - a python port of wxWidgets, a cross platform windows library
* BoaConstructor - a RAD tool for fast development of wxPython code,
with a GUI designer and IDE

Here are my notes per package:

* Python 2.6 - installs fine on my Windows box. Has a command line and
a windows editor. No problems with this as far as I know.

* Pygments - is distributed as a python egg. There is a version for
python 2.6. So I look up how to install a python egg. Apparently the
easiest way is to use easy_tools. To get that you have to get
setup_tools. There is no Windows version of this for python 2.6. But
you can get setup_tools for python 2.6. It is distributed as a python
egg. Arggh!!

So I uninstal python 2.6 and install python 2.5. I install setup_tools
and pygments. If I need to use it, I probably can, but see below, as
stc may be a better option.

* wxPython - installs fine and appears to work. Implements a styled
text control (stc) widget which has a built in lexer for C++ and the
ability to syntax highlight C++. It also provides options for block
folding. It has essentially been designed specifically for writing a
programmer's editor with all the standard features. Documentation
however, sucks. In order to implement syntax highlighting, one needs
to make use of options such as STC_C_COMMENTLINE, which as far as I
can find, are basically undocumented.

In fact, there is basically no documentation on the wxPython website
for the stc control. However someone has gone to the trouble of
attempting to document it here:

http://www.yellowbrain.com/stc/index.html

However, the meaning of the various stc variables is not listed. Only
a list of possible variables is given, here:

http://www.yellowbrain.com/stc/varwrap.html

The stc also provides a lexer for asm syntax highlighting, though I
have no idea which asm format it highlights. Again that is
undocumented, and a google search does not help with finding proper
documentation for any of the stc.

* BoaConstructor - Installs fine. But full of bugs.

1) You have to put all graphical widgets down in precisely the correct
order first go in the GUI designer, otherwise you have to do your
entire project from scratch, as there is no easy way to change it once
it is down. For example you can't remove a panel and replace it with a
sash window if at some point you change your mind.

2) When any widgets are moved around, they do not render properly. You
can't see them or they cause blag drag marks across all the other
widgets.

3) There's no easy way to select a widget to delete it. The only way I
have found is to click on it in the inspector, hope that some black
sizer dots appear, click precisely on one of those dots, then click
delete. There's no way to graphically select the widget you want to
delete.

4) It's impossible to move some widgets. Even selecting them via the
workaround in 3 does not allow one to move the widgets, as you cannot
move them by clicking on the sizer dots, you have to click in the
widget's center, which causes another random widget to be selected.

5) BoaConstructor crashes frequently, losing your work. And I don't
mean that python just gives some kind of error message. The whole
thing actually segfaults and drops you back to the desktop.

6) If you rename any of the default names, like frame1, that
BoaConstructor gives the widgets, it loses track of them and you have
to start your entire project from scratch. This is irrespective of
whether you rename them in code, the inspector or otherwise.

7) It is very difficult, though not impossible to figure out how to
associate menus with options on menubars. The logical way of doing
this via the inspector has not been implemented.

8) Many widgets come up with default sizes of zero, or panes of size
zero. Thus there is no way to see them, resize them, add things to
them, etc.

9) BoaConstructor regularly loses the connections between various
widgets, e.g. if you add a sash window into a split window and a text
control the other side of the sash in the split window, the inspector
frequently loses the association.

10) BoaConstructor checks your code for you, and helpfully prevents
you from entering the GUI designer if you have written correct code,
by telling you that you have supplied the incorrect number of operands
to various functions. If you supply the incorrect number as it wants
you to, it either doesn't compile, or BoaConstructor simply thinks you
still have the incorrect number of operands.

So quite clearly BoaConstructor is still far too underdeveloped to be
stable. It's only a 10 year old project. Using it is pointless.

So perhaps I made the wrong choice. What else is available for GUI
design which operates with xwPython?

Two other highly recommended options are wxGlade and PythonCard. I
tried the latter.

* PythonCard - The Windows installer failed. I went back to an earlier
version of python card. The Windows installer failed. This tells me
they have precisely zero users on Windows, and they don't know about
it. Eventually I got the source. I opened the documentation and went
to the install instructions. I clicked on Windows install and got a
dead link. I clicked on OSX install and got a dead link. I eventually
found a document somewhere telling me how to install on some weird OSX
variant. I got just enough info from that to tell me how to install
PythonCard.

I started reading how to use it. Instead of being an IDE, it is a DE,
i.e. it is not integrated at all, but is a serious of completely
unrelated tools. The source code it emitted was also not doing import
wx, as I expected, but import card. So it is implemented as a library
on top of wxPython. Given that this was next to useless I gave up.

* wxGlade - admits on their website that it is not an IDE, but simply
a designer and the generated code only displays the widgets, and no
more. It recommends that people after an IDE use PythonCard,
BoaConstructor or spe.

So I look into that last option:

* spe - the website is shocking. I couldn't make head nor tail of it.
It appears that you have to download the source code from
subversion.... Haven't tried that out yet.

So I backtracked at this point and thought, perhaps wxPython is not
the best choice for a widget toolkit for cross platform windows
development.

Everywhere I look however, I see two main options recommended.
wxPython and TkInter, the standard GUI toolkit distributed with
Python. Apparently every year it is a standing tradition to affirm
TkIinter as the standard GUI library distributed with Python, however
numerous people think it is dead, because of wxPython.

Well maybe python is the wrong language for this sort of thing. But
what else is there Java? Yuck. C++, too much work, though wxWidgets is
available for C++ and was probably available for C++ first. But I've
looked for decent RAD and GUI designers for C++ before, and all the
good ones are commercial.

Probably these days, the hot area to develop such cool tools is over
the wire, i.e. browser based stuff. But I don't want to reinvent the
wheel, and I have little experience with anything web related other
than Javascript, which is far too slow and difficult to code, from
experience. Too many systems to learn there otherwise.

This is proving to be too frustrating. I'm going to look into spe, and
also see what the canonical option for RAD/GUI design with TkInter is,
including looking for an already implemented widget for source code
highlighting. If I don't find what I am looking for, I'm officially
giving up on the windows route.

That would leave bash scripts maybe, or a command line C or python
program. But I've no idea how to make the very complex feature I want
to eventually implement, work from a command line interface. If I
start this project, I obviously want it to go a lot further than just
allowing one to add a few files to maths libraries. I want to add
parsers which will allow for simplification of various repetitive and
boring things we have to do over and over again when writing C maths
libraries. At the very least it will need to parse C code and assembly
code, but there's a whole lot more to what I had been thinking
through.

Bill.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"mpir-devel" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/mpir-devel?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to