Image bitdepth checks Thu, Feb 12. 2009
I'm back on track slowly working through the remaining Todo-List.
I worked on the bitdepth-checks today, coming to a conclusion which brings a rather bad feel in the stomach. The way I planed to do it, doesn't work out.
So what is the task at hand. ImageJ supports sevral different ImageTypes: RGB Color, 8-bit greyscale, 16-bit greyscale, 32-bit greyscale … Most ImageJ-Filters allow to process all of them, but some only allow one or more types. Connecting two non-compatible units at best gives an proper error as soon as you run the macro, but worse, can give you no good clue what's actually wrong. So I wanted to check durin graph-building that the correct imagetypes are ensured.
My discovered problem is now, that during the time of building the graph we don't actually know the Type the image will have when it is processed by ImageJ. Each unit knows which inputs it allows to process, but not what is actually passed threw. So a unit who DOES_ALL can connect to a unit which only allows 16bit, because DOES_ALL might pass 16bit, we don't know.
I could try to work through the graph to find, which image type is input at the sources. But the source itself also just returns DOES_ALL. It would require to actually check the input file to get its imagebitdepth. This takes alot more attention that thought. :/
Atm I begin to consider it rather nice-to-have. The basic check is included, the more sophisticated will need more time.
I worked on the bitdepth-checks today, coming to a conclusion which brings a rather bad feel in the stomach. The way I planed to do it, doesn't work out.
So what is the task at hand. ImageJ supports sevral different ImageTypes: RGB Color, 8-bit greyscale, 16-bit greyscale, 32-bit greyscale … Most ImageJ-Filters allow to process all of them, but some only allow one or more types. Connecting two non-compatible units at best gives an proper error as soon as you run the macro, but worse, can give you no good clue what's actually wrong. So I wanted to check durin graph-building that the correct imagetypes are ensured.
My discovered problem is now, that during the time of building the graph we don't actually know the Type the image will have when it is processed by ImageJ. Each unit knows which inputs it allows to process, but not what is actually passed threw. So a unit who DOES_ALL can connect to a unit which only allows 16bit, because DOES_ALL might pass 16bit, we don't know.
I could try to work through the graph to find, which image type is input at the sources. But the source itself also just returns DOES_ALL. It would require to actually check the input file to get its imagebitdepth. This takes alot more attention that thought. :/
Atm I begin to consider it rather nice-to-have. The basic check is included, the more sophisticated will need more time.
19 Tue, Feb 3. 2009
I'll continue the work on ImageFlow and beginn with the final phase of version 1.0 next week.
The writing Wed, Jan 7. 2009
I had another meeting with my professor. The time for writing my bachelor thesis has come now and although I have enough other courses to be occupied all week, my work on Imageflow is back up. We talked about the thesis, the future of the project and tested the current prototype. We identified (alot of) bugs and noted the todo-list I can base my work on. So I know what feature will be left to do till april. There are quite a few and many thoughts what could be added in the future.
Moving to AppFrameWork Sun, Dec 28. 2008
Shortly before christmas I finished the work on the prototype, tagged this version and began a major overhaul of the application structure. I based the application on Swinglab's AppFrame and SwingWorker. This Desktop-Framework allows me to have a unified multithread application with some good application guide lines.
So far I only developed my prototype around an application-structure, that a mix of the basics I learned in Java, some influences from my work with Ruby-on-rails and some evil work arounds to achieve my goals. AppFramework should optimise this and get the application in a better shape.
There are many new things I have to use with AppFramework, for example Introspection or Annotated Object creation for the Actions. So my app is changing alot at the moment.
I'm also thinking how the actual GUI will look like. I'd like to keep it clean and simple, but I have to see what will be used actually.
So far I only developed my prototype around an application-structure, that a mix of the basics I learned in Java, some influences from my work with Ruby-on-rails and some evil work arounds to achieve my goals. AppFramework should optimise this and get the application in a better shape.
There are many new things I have to use with AppFramework, for example Introspection or Annotated Object creation for the Actions. So my app is changing alot at the moment.
I'm also thinking how the actual GUI will look like. I'd like to keep it clean and simple, but I have to see what will be used actually.
Interfaces Fri, Dec 19. 2008
For another course I'm working on a PacMan-implementation in c++. For the graph realisation we thought about a small java editor to create the necessary XML-files. I spoke with Matthias about this editor and I got a bunch of new ideas and hints for Imageflow.
So today I reworked the Connection-Interface. Actually making it an Interface. The Pins (Inputs and Outputs) now implement the Connectable interface, which requires methods to connect this pins. This refactoring also cleaned alot of the old methods of registering connections using IDs. This is fully object-oriented now, using references.
Actually I found Interfaces are a nice thing once you start to use them. Changed the Parameters-implementation as well.
I wish VisualAp would've used more. I always get back to some small implementatoin issues when I enherite from an VisualAp-object and the variable I need is private and not protected. I did many of this small changes. I hope I find a good way to collect them, sort them, explain them and get them to the author, so he can add them tot he regular visualap version.
So today I reworked the Connection-Interface. Actually making it an Interface. The Pins (Inputs and Outputs) now implement the Connectable interface, which requires methods to connect this pins. This refactoring also cleaned alot of the old methods of registering connections using IDs. This is fully object-oriented now, using references.
Actually I found Interfaces are a nice thing once you start to use them. Changed the Parameters-implementation as well.
I wish VisualAp would've used more. I always get back to some small implementatoin issues when I enherite from an VisualAp-object and the variable I need is private and not protected. I did many of this small changes. I hope I find a good way to collect them, sort them, explain them and get them to the author, so he can add them tot he regular visualap version.
Warming up again Mon, Dec 15. 2008
I began to work in my code again yesterday. In January and February I will continue to work on it with more time at hand.
I'm working on several problems at the moment.
VisualAp already brought support for Copy-Cut-Paste, which I changed slightly, because there were some problems with my object-cloning. I do deep-copies by hand, so this had to be fixed and checked.
I'm working on some ways to make graph-checks on the fly and to prohibit illegal graphs when they are build. There is also some basic mechanism to show problems in the graph. It doesn't work nice yet, so I skip the screenshots.
I expand my unit-testing with every problem I got. I try to identify the problem, isolate it in tests and this way, my test-environment grows. It's not totally test-driven, but it's a great development support.
I'm still looking for a general programm structure I can work with. I should find one at the beginning of January, so I can really start with the final application then.
I'm working on several problems at the moment.
VisualAp already brought support for Copy-Cut-Paste, which I changed slightly, because there were some problems with my object-cloning. I do deep-copies by hand, so this had to be fixed and checked.
I'm working on some ways to make graph-checks on the fly and to prohibit illegal graphs when they are build. There is also some basic mechanism to show problems in the graph. It doesn't work nice yet, so I skip the screenshots.
I expand my unit-testing with every problem I got. I try to identify the problem, isolate it in tests and this way, my test-environment grows. It's not totally test-driven, but it's a great development support.
I'm still looking for a general programm structure I can work with. I should find one at the beginning of January, so I can really start with the final application then.
Inbetween Fri, Nov 28. 2008
I'm busy with my regular courses and some not-study related project, so I haven't programmed on Imageflow alot.
I did some clean up and refactoring, removing some of the old ballast, that survived through the versions. I added some small things, but mostly, I'm on feature-freeze right now. I want to clean and fix the functions I have and add the strongly required checks and controll mechanism. This includes all graph utilities to check the connections, validity, verfy input and outputs types, catch loops and bugs. My scrapbook is doing a good job helping me to note idea I have, but I haven't programmed everything yet. Especially the loops give me headaches. I set up a small testframework in JUnit to test my models and the functionality. I'm up to 35 tests now and it's really handy.
One of the features that will get some intention later is the saving and loading of flows. There is already some XML-representation I'm going to use, but alot of work is yet to to.
As Willy Wonka used to say, go on go on, there is so much time and so little to see.
I did some clean up and refactoring, removing some of the old ballast, that survived through the versions. I added some small things, but mostly, I'm on feature-freeze right now. I want to clean and fix the functions I have and add the strongly required checks and controll mechanism. This includes all graph utilities to check the connections, validity, verfy input and outputs types, catch loops and bugs. My scrapbook is doing a good job helping me to note idea I have, but I haven't programmed everything yet. Especially the loops give me headaches. I set up a small testframework in JUnit to test my models and the functionality. I'm up to 35 tests now and it's really handy.
One of the features that will get some intention later is the saving and loading of flows. There is already some XML-representation I'm going to use, but alot of work is yet to to.
As Willy Wonka used to say, go on go on, there is so much time and so little to see.
The scrapbook Thu, Nov 13. 2008
For the past few weeks, I always run around with a scrapbook. While, waiting I take it out and scribble strange stuff. Mostly related to this project. Sometimes, I just have no idea, other times, new ideas, arising problems or solutions just flyby and I note them down. Yesterday was very productive.
The fourth week Tue, Nov 4. 2008
Yesterday I met with my professor who supervises my Bachelor-project. I presented my current state and we added some basic Properties-editing function, which works quite well actually. Basically we took the GenericDialogs, that ImageJ offers and used them to create the UnitElements Properties-Window. Much simpler than I actually thought.
Apart from that, I continued some work on the algorithms. The algorithm uses SelectionSort. Not the most efficient, but fast enough here. I'm working to find ways, to run Unit-Checks as well, so for example, that not-connected Units are discarded as soon as possible, thereby cleaning the UnitList.
Some small things on the GUI, the Popup-Menu is reworked. I excluded all Actions in actual Action-Classes. The clipboard functions work nicely, except for the Cut. If a Unit is cut and pasted back in, the Unit's MacroElement, the part which holds the ImageJ-syntax is null. Strange thing, I haven't yet figured out while.
Apart from that, I build some basic menus.
One thing missing in the whole application are the proper MVC-handlers. Changes in the model don't call back to the UI at the moment. So to update the GraphPanel you have to click or repaint manually. Of course this isn't nice yet. So one of the next tasks will be to incorporate some proper application-structure. I've been looking for Desktop-Application-Frameworks for Java, but apart from Jazz, which only supports Java6, while I work in Java5, I found nothing. So I'm back own my own and trying to find some nice structure.
This week is the official ImageJ Conference in Luxembourg, I won't be attending, but there will be a lecture about the project with the presentation of this programm.
Apart from that, I continued some work on the algorithms. The algorithm uses SelectionSort. Not the most efficient, but fast enough here. I'm working to find ways, to run Unit-Checks as well, so for example, that not-connected Units are discarded as soon as possible, thereby cleaning the UnitList.
Some small things on the GUI, the Popup-Menu is reworked. I excluded all Actions in actual Action-Classes. The clipboard functions work nicely, except for the Cut. If a Unit is cut and pasted back in, the Unit's MacroElement, the part which holds the ImageJ-syntax is null. Strange thing, I haven't yet figured out while.
Apart from that, I build some basic menus.
One thing missing in the whole application are the proper MVC-handlers. Changes in the model don't call back to the UI at the moment. So to update the GraphPanel you have to click or repaint manually. Of course this isn't nice yet. So one of the next tasks will be to incorporate some proper application-structure. I've been looking for Desktop-Application-Frameworks for Java, but apart from Jazz, which only supports Java6, while I work in Java5, I found nothing. So I'm back own my own and trying to find some nice structure.
This week is the official ImageJ Conference in Luxembourg, I won't be attending, but there will be a lecture about the project with the presentation of this programm.
Featureflash Sat, Nov 1. 2008
During the last few days many new features arrived. Nodes can be added via a popup-menü. Existing nodes can be copied. Finally you can turn Nodes into DisplayUnits in the GUI. DisplayUnits show their results, while normal units just pass the result to the next unit. I'm just wondering, if it makes sense to add a bypass-function, although this can be done easily in the graph anyway.
Node deletion will be up next. One major task, that I haven't touched yet is the interface for changing the parameters of a unit. So far those can't changed. I know VisualAp has something, but I haven't checked if I can use it.
Node deletion will be up next. One major task, that I haven't touched yet is the interface for changing the parameters of a unit. So far those can't changed. I know VisualAp has something, but I haven't checked if I can use it.
To much to go into details Wed, Oct 29. 2008
Another day of work on the project. My major attention is at the algorithms, that check the workflow. It's still work in progress, but I don't have to pay attention to the order in which the units are listed. It's checked and sorted automatically.
I also did some work on the connections. Reconnecting nodes automatically creates new connections and deletes the old ones.
I added some simple FileDropper to the GPanel, so I can Drag'n drop image files and it creates a suited source unit. Obviously I develop on Mac, so these things look always nice while being handy.
Work will continue the next 4 days.
Here is the current GUI:
I also did some work on the connections. Reconnecting nodes automatically creates new connections and deletes the old ones.
I added some simple FileDropper to the GPanel, so I can Drag'n drop image files and it creates a suited source unit. Obviously I develop on Mac, so these things look always nice while being handy.
Work will continue the next 4 days.
Here is the current GUI:

The lower source was dragged on the GUI and manually connected to the nodes.
Connect() Tue, Oct 28. 2008
I can connect all units by hand and it still works at the end. 
I reworked some of the ways the connections are handled. It's not yet nice and not yet safe, but it works.
I reworked some of the ways the connections are handled. It's not yet nice and not yet safe, but it works.
Organisation Mon, Oct 27. 2008
Not that much work today, however I moved the whole project to a new SVN and cleaned up a bit. So some long waiting fixes to the unit-tests were added (although, they aren't complete yet and probably won't be till November). I added some more documentation, many small things.
One change you can actually see is, that the Graph now gets a list of units, which actually have locations and so I don't have to move them by hand anymore. The locations are hardcoded of course, as is the actual UnitList, but as I'm rebuilding the functionality it begins to work out step by step. Yet, still many steps ahead.
One change you can actually see is, that the Graph now gets a list of units, which actually have locations and so I don't have to move them by hand anymore. The locations are hardcoded of course, as is the actual UnitList, but as I'm rebuilding the functionality it begins to work out step by step. Yet, still many steps ahead.
Slightly off, but you see where it goes Thu, Oct 23. 2008
After a long and busy weekend and two days off, I continued the last two days. Here is the current status.

The nodes are being drawn and can be attached in the graph, though as you can see, the positioning is still off and I haven't yet figured out why. Also, if you do connect graphs, this new connection is not yet added to the backend representation of the flow-graph.
It can be noted, that I work iterative as you can see. I always keep a running version and and new features to this build. I refactor every now and then, but I guess I should do this more often. At the moment is function the main priority.
So far the application doesn't have any actions, during the weekend I will work on the implemenation of the "run"-button. Once this is done, you can start the app, it shows your hardcoded graph and on click you can make it work. I have some scribbles for the GUI, but I haven't spent much time on it yet.

The nodes don't attach correctly, but they attach, the GUI is starting to get some shape.
The nodes are being drawn and can be attached in the graph, though as you can see, the positioning is still off and I haven't yet figured out why. Also, if you do connect graphs, this new connection is not yet added to the backend representation of the flow-graph.
It can be noted, that I work iterative as you can see. I always keep a running version and and new features to this build. I refactor every now and then, but I guess I should do this more often. At the moment is function the main priority.
So far the application doesn't have any actions, during the weekend I will work on the implemenation of the "run"-button. Once this is done, you can start the app, it shows your hardcoded graph and on click you can make it work. I have some scribbles for the GUI, but I haven't spent much time on it yet.
daily routine Sat, Oct 18. 2008
The more I work in VisualAp, the more I understand the application. It's a natural thing. I also begin to see more parallels or more points, where my prototype and VisualAp are so similar, that I tend to try to merge it. I try to get as much functionality from VisAp, while I try to change as little as possible. There are still a few things wrecking my brain, but I hope to get them sorted soon.
While I was waiting for a train I doodled some sketches for the User Interface. for now this is neglectable, but in 2 weeks, it's supposed to look nice already.
While I was waiting for a train I doodled some sketches for the User Interface. for now this is neglectable, but in 2 weeks, it's supposed to look nice already.
« previous page
(Page 2 of 3, totaling 35 entries)
next page »
