Tuesday, May 4, 2010

Web based build bots don't work for me

For MonoDevelop we want a stable trunk - many people use the trunk version of MonoDevelop for their daily work.
Unfortunately I tend to break the trunk from time to time (I think every developer does). Sometimes I just break some unit tests.

Therfore we set up a web based build bot for monodevelop:

This automates the build process & unit testing. In theory this will help all developers to stabilize the trunk.

But my experience said: WRONG

Before we had a build bot a build failure was recognized mostly by Lluis Sanchez (thanks lluis) or some users who informed me in IRC that there is something not working.

Now with the bild bot build failures are recognized mostly by Lluis Sanchez (thanks again) or some users who try to build monodevelop trunk and infom me on IRC that something isn't working.

How can this happen now that we've a build bot ?

-> I have to go to that page and check if I broke something.

This isn't really an improvement ... I have always to manually check, if I broke something.
I always wanted that the build bot send me an e-mail in case of build failure.
... but I think I would've missed that mail as well).

Then I had the idea:

Just write a little monodevelop addin which informs me, if the build bot found something. This way:
  • I would get informed without doing manual checks (-> saves time)
  • I wouldn't svn up a non working version (-> saves more time)
  • Maybe I would be more careful with check ins, if the build bot guard has some form of punishment when I break something (-> may save time for our user)
With this in mind I just wrote a small addin for us monodevelop authors (and maybe other MonkeyWrench users) I call 'Build bot Guard'.


It just displays a little icon in the monodevelop status bar (I like it simple).

If the build is ok it looks like:


When there is something not ok the monkey becomes sad:


Is somebody out there that wants to make the monkey sad ? I doubt that. This is really simple ... just an icon at the bottom.

But I need some more detailed info about the build bot results.
Therefore I added a inform window on the icon click:

So far so good.

But I want to get informed if I broke the build.
(And I don't think that the small icon in the lower right corner informs me well about this)

For doing this the addin needs to know my svn user name - I added a small option panel. (There it's possible to set other MonkeyWrench projects by URL as well.) And if the user broke something a dialog appears:

I really hope that this is enough that I'll fix the trunk ASAP. If I've some more time & there is interrest I'll improve the addin. Maybe even make it more flexible so that it'll be possible to add other web based build bots to it.

Currently the addin has a down side: It can just track ONE project. We need something like user specific project policies. Maybe it's easer that the addin just tracks the solutions by itself. But that's something for future development.

Do you think too that build bots belong INSIDE the IDE ?

Friday, November 20, 2009

More bubble fun

Ok I've now overworked the bubble drawing. And scrapped my old approach with the virtual lines.

I need to add an ability to influence the line height & drawing. But the gui is somewhat working. I'll continue next week to finish the bubble thing. The coordinate translation may be a bit tricky.

Error bubbles in MonoDevelop

MonoDevelop will have error bubbles in the next version. Currently it looks like this.

The changes are not committed yet, but I want to give an update on what I'm currently working.

Currently the coordinate translation doesn't work correctly - it'll take some days before I commit it. I hope it'll look good at this time :)


Sunday, October 11, 2009

Living during SVN downtime

We had a svn downtime at the weekend and I decided to work on something different. I was bored because I don't like to work on monodevelop without svn.
I've decided to do something useful and made a little hex editor user control using spare parts of the text editor control and it was very fun.
















The control feels fast (at least compared to the other hex editors I tested). It could re-use red-black tree for data storage and almost all data structures used by the text editor.

Some of the code changed, for example it's no longer needed to have locations as line/columns.
Instead just the offset is used (btw. all calculations done by the hex editor are much simpler than in the text editor). It still needs some work, for example the undo/redo logic and cut&paste needs to be 'translated'. But this should be easy - I may do it during the next svn downtime :)














From the user point of view it feels like the monodevelop text editor. It re-uses some of the drawing code and event handler logic.
  • Styling (could share style files with the text editor)
  • "Margin" model
  • Caret blinking/drawing
  • Bookmarks
  • Mouse behavior (selection etc.)
  • It can do bookmarks, selection, zooming, group bytes, words, longs
After the 2.2 release I'll include a hex editor view in monodevelop. From time to time I need to view the hex code of files, then I can do this without leaving monodevelop.

I wonder if anybody dares to make a stand alone version of the monodevelop hex editor and text editor. Both controls can easily be re-used in a standalone application.

Wednesday, August 5, 2009

Code Generation Popup

One feature I always wanted to have is the code generation pop up. I'm currently working on the refactoring part of MonoDevelop and I take the chance implementing the code generation popup.
This is a real time saver, if you know how to use it.
What can it do for you ? It can:
  • Create constructors and initialize members
  • Create properties
  • Create event OnXXX methods
  • Create ToString() method
  • Create Equals & HashCode
See the Quick Code Generation entry in the mono develop wiki for more details on that feature.

Wednesday, July 29, 2009

Twitter

I've now created a twitter account. I'll post there more up to date infos what I'm currently developing. My username there is mikrueger.

Thursday, July 9, 2009

Refactoring, refactoring, refactoring

I'm in the process improving the refactoring in MonoDevelop.

I hope that refactoring in MonoDevelop will be in a good shape 'really soon' (maybe in 1-2 months). I've looked at other tools eclipse, netbeans, intellij and michael hutchinson pointed me to some VS.NET plugins that add refactoring to VS.NET.

I've created a new refactoring plug in and have thrown any refactoring stuff in there, we've a basic refactoring infrastructure. The refactoring system is based on single changes. That means that refactorings generate a list of replacement operations which the user can view in a preview dialog (mostly the same as eclipse). However this preview dialog doesn't make sense for very small inline refactorings - they can be done without any dialog.

Now I'm improving the infrastructure by writing some small refactorings. I first thought writing extract method is enough. But that isn't the case, other refactorings need different stuff. Therefore I'll implement some more. Wanna help ?

I try to get my wife on board to help out with refactorings. She helped me to improve the refactoring infrastructure quite a bit (but the infrastructure needs some evolvement before I can write it down). And she tries to implement some refactorings. It's really helpful to have someone which I can see working with mono develop. Some of the more advanced mono develop editing features alienate users ... that's something I need to think over.
The features are really cool but are unpredictable for developers who don't know them.

I was a bit lazy with writing new features in the last few weeks, but I think that adding some refactorins is worth introducing a ton of new bugs. The other IDEs offer a wide range of refactorings that I found really useful - stay tuned for some cool refactorings the next few weeks.