Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2012-02

OT: Amazing new development tools

20 messages · 13 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Juha Manninen
to Vinzent Höfler

2012/2/26 Vinzent Höfler

Show quoted text 10 lines
On Sat, 25 Feb 2012 19:15:54 +0100, ik wrote: I found the following amazing lecture that present a new idea of a > development tool, that I think will interest you all: > > http://vimeo.com/36579366 > Impressive, indeed. And I am usually not that easily impressed.

Yes it is!
Has this one guy made himself all the tools he demonstrated? He is quite a super-human then. :)

Juha

Reply by email

Michael Van Canneyt
to Vinzent Höfler: Impressive, indeed. And I am usually not that easily impressed. Vinzent.
Vinzent Höfler wrote 8 lines
On Sat, 25 Feb 2012 19:15:54 +0100, ik wrote: > I found the following amazing lecture that present a new idea of a > development tool, that I think will interest you all: > > http://vimeo.com/36579366 Impressive, indeed. And I am usually not that easily impressed.

Impressed indeed. But IMHO limited to a certain kind of programming. The binary search part could probably be done for any kind of programming, I suppose.

I don't see him doing this in huge corporate administrative business programs where hundreds of database tables are involved. They are hard to connect to or visualize :-)

But visionary nonetheless.

Michael.

Reply by email

Mattias Gaertner
to Michael Van Canneyt
Show quoted text 15 lines
On Sun, 26 Feb 2012, Vinzent Höfler wrote: > On Sat, 25 Feb 2012 19:15:54 +0100, ik wrote: > >> I found the following amazing lecture that present a new idea of a >> development tool, that I think will interest you all: >> >> http://vimeo.com/36579366 > > Impressive, indeed. And I am usually not that easily impressed. Impressed indeed. But IMHO limited to a certain kind of programming. The binary search part could probably be done for any kind of programming, I suppose.

I doubt that "any kind of programming".
He showed the simplest case: a function that only receives base types. But most functions work on complex parameters - classes. These need to be set up.
Either by writing a test environment or by taking a snapshot with the debugger. Then you can run the function repeatedly.

The next step is to "compile" the function on every change. Easy with an interpreter.
How to compile only one function of a big program and insert/replace it?

The next step is to run the function and read every value change. Easy in an interpreter.
For a compiled program you have to single step with the debugger.

Show quoted text 5 lines
I don't see him doing this in huge corporate administrative business programs where hundreds of database tables are involved. They are hard to connect to or visualize :-) But visionary nonetheless.

+1

Mattias

Reply by email

ik
to zeljko
zeljko wrote 10 lines
On Sunday 26 of February 2012 11:43:38 Michael Van Canneyt wrote: > I don't see him doing this in huge corporate administrative business > programs where hundreds of database tables are involved. and that tables can contain billion of rows ... so visualisation won't be so snappy :)

It depends on your tests. That visualization is for test driven development (http://en.wikipedia.org/wiki/Test-driven_development).

In Ruby I use Cucumber for such things, and then you can provide also a table with possible values to see how it will react.

Show quoted text 8 lines
zeljko _______________________________________________ fpc-pascal maillist  -   http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply by email

Roland Schäfer
to ik

That was the seventh message on a subject which is not related to FPC in any recognizable way. Although not a very frequent poster, I still need to be on this list because I chose FPC for some of my professional work, and I usually learn a lot from following some of the discussions on the list. Why does this type of discussion not go on fpc-other?

I know I'm not a moderator or anything. I am just very busy and really just beg you to respect my decision to be on the "fpc-pascal" list and not "visions-other".

Thanks,
R.

ik wrote 10 lines
On Sun, Feb 26, 2012 at 13:25, zeljko wrote: > and that tables can contain billion of rows ... so visualisation won't be so > snappy :) It depends on your tests. That visualization is for test driven development (http://en.wikipedia.org/wiki/Test-driven_development). In Ruby I use Cucumber for such things, and then you can provide also a table with possible values to see how it will react.

Reply by email

Jürgen Hestermann
to Roland Schäfer
I am just very busy and really just beg you to respect my decision to be on the "fpc-pascal" list and not "visions-other".

Then why don't you simply ignore (delete) the posts with the subject "Amazing new development tools"?
That's what I am doing: Just open posts which look interesting to me from the subject line.
I doubt that anybody else (a moderator) can do this selection for me by sorting such posts into categories.
In the end it's the same as a spam filter: It does not work.

Reply by email

Michael Van Canneyt
to ik: It depends on your tests. That visualization is for test driven development…
ik wrote 17 lines
On Sun, Feb 26, 2012 at 13:25, zeljko wrote: > On Sunday 26 of February 2012 11:43:38 Michael Van Canneyt wrote: > > >> I don't see him doing this in huge corporate administrative business > >> programs where hundreds of database tables are involved. > > > and that tables can contain billion of rows ... so visualisation won't be so > snappy :) It depends on your tests. That visualization is for test driven development (http://en.wikipedia.org/wiki/Test-driven_development). In Ruby I use Cucumber for such things, and then you can provide also a table with possible values to see how it will react.

That is childs play; good for some simple website stuff.

We're talking corporate RDBMS here.

Take a school. To be able to test for example data entry of a pupil who comes to inscribe, I need to create and set up the whole eco-system for my pupil:
- Table with schools
- Table with countries
- Table with cities
- Table with addresses
- Table with nationalities
- Tables with values for all kinds of parameters.
- Table with groups in my school.
- Table with teaching subjects.
- Table with teachers teaching the subject.
All these tables have constraints, time dependencies, whatnot.

I cannot even start testing anything pupil-related without having properly set up all this first :/

To be able to visualize or test all that, you need detailed knowledge of the system; a simple "test table with possible values" is unusable; all tables are linked together somehow. For the same reason I never understood the use of 'test data generators' functionalities in database modeling tools. The generated data is utterly useless...

Michael.

Reply by email

Jonas Maebe
to Jürgen Hestermann: Then why don't you simply ignore (delete) the posts with the subject "Amazing new…
Jürgen Hestermann wrote 6 lines
Roland Schäfer schrieb: > I am just very busy and really > just beg you to respect my decision to be on the "fpc-pascal" list and > not "visions-other". > Then why don't you simply ignore (delete) the posts with the subject "Amazing new development tools"?

The whole reason we have four different lists is to minimise cases where people have to do that. This topic indeed belongs on the fpc-other list, not on fpc-pascal (since it's not about programming in or getting help with FPC).

Jonas
FPC mailing lists admin

Reply by email

Graeme Geldenhuys
to Michael Van Canneyt: That is childs play; good for some simple website stuff. We're talking corporate RDBMS…
Michael Van Canneyt wrote 9 lines
Take a school. To be able to test for example data entry of a pupil who comes to inscribe, I need to create and set up the whole eco-system for my pupil: ...snip... linked together somehow. For the same reason I never understood the use of 'test data generators' functionalities in database modeling tools. The generated data is utterly useless...

I haven't viewed the video yet, I will
everybody's comments, it sounds very interesting.

Regarding your comment on data generators. I can say that I have (in our company product) a very similar data structure as you described above. I have created a "data generator" for our product and it does work with our complex data model. It generates realistic data, not just random text garbage (that is indeed useless - maybe this is what you were referring too). We used the data generator for performance testing. Populating for example our Learner table with 500 000 learners (and there related data - like addresses, subjects, schools etc), and then see where any bottlenecks occur in our UI or SQL.

I think tiOPF's demo 21 uses a similar data generator to what I created in our Master Maths product. Our company product just uses a much greater scale of generated data. So bottom line - a realistic data generator can be very useful.

Regards,   - Graeme - _______________________________________________ fpGUI - a cross-platform Free Pascal GUI toolkit http://fpgui.sourceforge.net

Reply by email

Lukasz Sokol
to Mattias Gaertner: On Sun, 26 Feb 2012 11:43:38 +0100 (CET) I doubt that "any kind of programming". He…
Mattias Gaertner wrote 30 lines
On Sun, 26 Feb 2012 11:43:38 +0100 (CET) Michael Van Canneyt wrote: > > > On Sun, 26 Feb 2012, Vinzent Höfler wrote: > >> On Sat, 25 Feb 2012 19:15:54 +0100, ik >> wrote: >> >>> I found the following amazing lecture that present a new idea >>> of a development tool, that I think will interest you all: >>> >>> http://vimeo.com/36579366 >> >> Impressive, indeed. And I am usually not that easily impressed. > > Impressed indeed. But IMHO limited to a certain kind of > programming. The binary search part could probably be done for any > kind of programming, I suppose. I doubt that "any kind of programming". He showed the simplest case: a function that only receives base types. But most functions work on complex parameters - classes. These need to be set up. Either by writing a test environment or by taking a snapshot with the debugger. Then you can run the function repeatedly. The next step is to "compile" the function on every change. Easy with an interpreter. How to compile only one function of a big program and insert/replace it?

Sorry for a plug, but MS VC++ 6.0 (!)* allowed for Pause->Edit Code-> Quick compile->Resume Execution kind of workflow...

Yes, in Debug/Pause mode, you COULD write a {code block} and then go Debug->Apply and Continue (or something like that) and voila, you could totally change code paths ...
(Not that I know much about internals/constraints of this, to be honest, but of all, i found that a very cool feature)

Is there a way to add THAT to FPC/Lazarus/GDB world ?

(especially simulation/image/OpenGL Artists would be grateful :) )

Show quoted text 6 lines
The next step is to run the function and read every value change. Easy in an interpreter. For a compiled program you have to single step with the debugger.

Lukasz

* Yes, Microsoft Visual C++ Six Point Zero. Mine (dating from before my times where I work now) is from 1998. *

Reply by email

Jonas Maebe
to Lukasz Sokol
Lukasz Sokol wrote 16 lines
On 26/02/2012 11:17, Mattias Gaertner wrote: > The next step is to "compile" the function on every change. Easy with > an interpreter. How to compile only one function of a big program and > insert/replace it? Sorry for a plug, but MS VC++ 6.0 (!)* allowed for Pause->Edit Code-> Quick compile->Resume Execution kind of workflow... Yes, in Debug/Pause mode, you COULD write a {code block} and then go Debug->Apply and Continue (or something like that) and voila, you could totally change code paths ... (Not that I know much about internals/constraints of this, to be honest, but of all, i found that a very cool feature) Is there a way to add THAT to FPC/Lazarus/GDB world ?

Apple supported that in older versions of their development tools, and it worked as well (or as badly) with FPC as it did with GCC. It required changes to their dynamic linker (for the code replacement) and to GDB. It was extremely flakey and limited though, and they abandoned it fairly quickly.

Since the required support is generally not part of the compiler but of the environment (you need a way to inject the new code, and possibly data, into the process, and link up everything with the new version), I don't think this is something that can be added as an "FPC" feature.

Jonas

Reply by email

Martin
to Lukasz Sokol: Sorry for a plug, but MS VC++ 6.0 (!)* allowed for Pause->Edit Code-> Quick…
Lukasz Sokol wrote 38 lines
On 26/02/2012 11:17, Mattias Gaertner wrote: > On Sun, 26 Feb 2012 11:43:38 +0100 (CET) Michael Van Canneyt > wrote: > >> >> On Sun, 26 Feb 2012, Vinzent Höfler wrote: >> >>> On Sat, 25 Feb 2012 19:15:54 +0100, ik >>> wrote: >>> >>>> I found the following amazing lecture that present a new idea >>>> of a development tool, that I think will interest you all: >>>> >>>> http://vimeo.com/36579366 >>> Impressive, indeed. And I am usually not that easily impressed. >> Impressed indeed. But IMHO limited to a certain kind of >> programming. The binary search part could probably be done for any >> kind of programming, I suppose. > I doubt that "any kind of programming". He showed the simplest case: > a function that only receives base types. But most functions work on > complex parameters - classes. These need to be set up. Either by > writing a test environment or by taking a snapshot with the debugger. > Then you can run the function repeatedly. > > The next step is to "compile" the function on every change. Easy with > an interpreter. How to compile only one function of a big program and > insert/replace it? Sorry for a plug, but MS VC++ 6.0 (!)* allowed for Pause->Edit Code-> Quick compile->Resume Execution kind of workflow... Yes, in Debug/Pause mode, you COULD write a {code block} and then go Debug->Apply and Continue (or something like that) and voila, you could totally change code paths ... (Not that I know much about internals/constraints of this, to be honest, but of all, i found that a very cool feature) Is there a way to add THAT to FPC/Lazarus/GDB world ?

I wonder where the limits of that are.

Sure one *could* record *all* variables, and the callstack... But what if
- you add a new variable, what to initialize it with?
- remove the function that called the current code, or even delete the line where you just paused?

Or one could record all input, and replay the app. But that has limits too.

Neither of those are likely to happen....

btw on some platforms, gdb can step backwards (again limitations apply). But it's not integrated in Lazarus yet...

Reply by email

Lukasz Sokol
to Jonas Maebe: Apple supported that in older versions of their development tools, and it worked as well…
Jonas Maebe wrote 33 lines
On 27 Feb 2012, at 13:32, Lukasz Sokol wrote: > On 26/02/2012 11:17, Mattias Gaertner wrote: >> The next step is to "compile" the function on every change. Easy >> with an interpreter. How to compile only one function of a big >> program and insert/replace it? > > Sorry for a plug, but MS VC++ 6.0 (!)* allowed for Pause->Edit > Code-> Quick compile->Resume Execution kind of workflow... > > Yes, in Debug/Pause mode, you COULD write a {code block} and then > go Debug->Apply and Continue (or something like that) and voila, > you could totally change code paths ... (Not that I know much about > internals/constraints of this, to be honest, but of all, i found > that a very cool feature) > > Is there a way to add THAT to FPC/Lazarus/GDB world ? Apple supported that in older versions of their development tools, and it worked as well (or as badly) with FPC as it did with GCC. It required changes to their dynamic linker (for the code replacement) and to GDB. It was extremely flakey and limited though, and they abandoned it fairly quickly. Since the required support is generally not part of the compiler but of the environment (you need a way to inject the new code, and possibly data, into the process, and link up everything with the new version), I don't think this is something that can be added as an "FPC" feature. Jonas

(Un)fortunately I don't know much about the internals, as I mentioned :)

The closest idea that looks similar is a loadable library: you can unload a dll (or a .so), edit/recompile/rebuild it while the caller program is paused/waiting, then reload it (with an obvious constraint that you can't modify the interfaces that the already-running program knows)
- now imagine each code/data block is separate 'object' that can be loaded/unloaded...?

(Did I just hit on the unmentionable feature of loadable modules :) )

Lukasz

Reply by email

Jonas Maebe
to Lukasz Sokol
Lukasz Sokol wrote 20 lines
On 28/02/2012 10:45, Jonas Maebe wrote: > > Apple supported that in older versions of their development tools, > and it worked as well (or as badly) with FPC as it did with GCC. It > required changes to their dynamic linker (for the code replacement) > and to GDB. It was extremely flakey and limited though, and they > abandoned it fairly quickly. (Un)fortunately I don't know much about the internals, as I mentioned :) The closest idea that looks similar is a loadable library: you can unload a dll (or a .so), edit/recompile/rebuild it while the caller program is paused/waiting, then reload it (with an obvious constraint that you can't modify the interfaces that the already-running program knows) - now imagine each code/data block is separate 'object' that can be loaded/unloaded...?

That is basically what Apple did. But if you want to do that at a reasonable speed and with support for e.g. existing addresses in memory (someone may have taken the address of a routine you are about to replace, and if the new code is larger it may get stored somewhere else), then you need lots of extra support (e.g. via trampolines for code; for data it's even harder). Not to mention that your debugger has to be able to deal with code changing addresses all the time and debug info changing.

In the end, people spent more time debugging the inconsistencies and limitations of "fix and continue" than it helped them. Maybe Microsoft's implementation is better, but
a) it is extremely hard to get right
b) as mentioned, it cannot be implemented in FPC itself; it mainly requires support from a lot of other things (and if that support is in place and requires some help from the compiler, then we can talk about making FPC support such an environment)

Jonas

Reply by email

Mark Morgan Lloyd
to Martin: I wonder where the limits of that are. Sure one *could* record *all* variables, and the…
Martin wrote 55 lines
On 27/02/2012 12:32, Lukasz Sokol wrote: > On 26/02/2012 11:17, Mattias Gaertner wrote: >> On Sun, 26 Feb 2012 11:43:38 +0100 (CET) Michael Van Canneyt >> wrote: >> >>> >>> On Sun, 26 Feb 2012, Vinzent Höfler wrote: >>> >>>> On Sat, 25 Feb 2012 19:15:54 +0100, ik >>>> wrote: >>>> >>>>> I found the following amazing lecture that present a new idea >>>>> of a development tool, that I think will interest you all: >>>>> >>>>> http://vimeo.com/36579366 >>>> Impressive, indeed. And I am usually not that easily impressed. >>> Impressed indeed. But IMHO limited to a certain kind of >>> programming. The binary search part could probably be done for any >>> kind of programming, I suppose. >> I doubt that "any kind of programming". He showed the simplest case: >> a function that only receives base types. But most functions work on >> complex parameters - classes. These need to be set up. Either by >> writing a test environment or by taking a snapshot with the debugger. >> Then you can run the function repeatedly. >> >> The next step is to "compile" the function on every change. Easy with >> an interpreter. How to compile only one function of a big program and >> insert/replace it? > Sorry for a plug, but MS VC++ 6.0 (!)* allowed for Pause->Edit Code-> > Quick compile->Resume Execution kind of workflow... > > Yes, in Debug/Pause mode, you COULD write a {code block} and then go > Debug->Apply and Continue (or something like that) and voila, > you could totally change code paths ... > (Not that I know much about internals/constraints of this, to be honest, > but of all, i found that a very cool feature) > > Is there a way to add THAT to FPC/Lazarus/GDB world ? > I wonder where the limits of that are. Sure one *could* record *all* variables, and the callstack... But what if - you add a new variable, what to initialize it with? - remove the function that called the current code, or even delete the line where you just paused? Or one could record all input, and replay the app. But that has limits too. Neither of those are likely to happen.... btw on some platforms, gdb can step backwards (again limitations apply). But it's not integrated in Lazarus yet...

Noting what I described looking at in
http://lists.freepascal.org/lists/fpc-other/2012-February/000670.html, I found myself wondering whether the IDE could tweak (writable?) constants at runtime, or possibly closures once they exist.

Being able to tune e.g. the exact position of visible components could be rather useful.

Mark Morgan Lloyd markMLl .AT. telemetry.co .DOT. uk [Opinions above are the author's, not those of his employers or colleagues]

Reply by email

Martin
to Mark Morgan Lloyd
Mark Morgan Lloyd wrote 24 lines
Martin wrote: > Sure one *could* record *all* variables, and the callstack... > But what if > - you add a new variable, what to initialize it with? > - remove the function that called the current code, or even delete > the line where you just paused? > > Or one could record all input, and replay the app. But that has > limits too. > > Neither of those are likely to happen.... > > > btw on some platforms, gdb can step backwards (again limitations > apply). But it's not integrated in Lazarus yet... Noting what I described looking at in http://lists.freepascal.org/lists/fpc-other/2012-February/000670.html, I found myself wondering whether the IDE could tweak (writable?) constants at runtime, or possibly closures once they exist. Being able to tune e.g. the exact position of visible components could be rather useful.

The evaluate dialog, offers a way to change values. Yes it is not at all comfortable ...

And be warned, it performs no checks. Trying to change managed types (string, dyn array) will almost certainly crash your app.

I guess, if you have a Form you can change it's values. Only to make those thinks visible on screen, it is not enough to change them. You need to call the setter. And calling functions from the debugger is not yet there...

-----
If you work on the IDE itself try the package IdeInspector (it adds itself to "view" > "Ide Internals" if installed)

Reply by email

Mark Morgan Lloyd
to Martin
Martin wrote 36 lines
On 29/02/2012 11:44, Mark Morgan Lloyd wrote: > Martin wrote: >> Sure one *could* record *all* variables, and the callstack... >> But what if >> - you add a new variable, what to initialize it with? >> - remove the function that called the current code, or even delete >> the line where you just paused? >> >> Or one could record all input, and replay the app. But that has >> limits too. >> >> Neither of those are likely to happen.... >> >> >> btw on some platforms, gdb can step backwards (again limitations >> apply). But it's not integrated in Lazarus yet... > > Noting what I described looking at in > http://lists.freepascal.org/lists/fpc-other/2012-February/000670.html, > I found myself wondering whether the IDE could tweak (writable?) > constants at runtime, or possibly closures once they exist. > > Being able to tune e.g. the exact position of visible components could > be rather useful. > The evaluate dialog, offers a way to change values. Yes it is not at all comfortable ... And be warned, it performs no checks. Trying to change managed types (string, dyn array) will almost certainly crash your app. I guess, if you have a Form you can change it's values. Only to make those thinks visible on screen, it is not enough to change them. You need to call the setter. And calling functions from the debugger is not yet there...

Thanks, noted. I must admit that I've never really "got my head around" evaluation of anything other than simple variables, but I'm sure that's because I've not spent enough time really getting to grips with it.

----- If you work on the IDE itself try the package IdeInspector (it adds itself to "view" > "Ide Internals" if installed)

Thanks, I'll make a point of looking at that, but it leads my into another question which I'll post in the Lazarus ML since I think it's out of place here.

Mark Morgan Lloyd markMLl .AT. telemetry.co .DOT. uk [Opinions above are the author's, not those of his employers or colleagues]

Reply by email