Thursday, December 14, 2006
Blogger in Beta
Just a quick note to let anyone who's interested know that I have moved my blog to the new "Blogger in Beta". This may have resulted in some strange side effects which I will try to correct as I find them.
Tuesday, November 14, 2006
NantShell
So following my last post I decided to get of my butt and see if I could make something to fill the need.
So....I've created this little program 'NantShell' which is basically a console app designed to evaluate commands entered and respond.
If the command entered is not recognised, then NantShell assumes that I am trying to specify a Nant 'Target' for it to run.
So it looks through it's list of directories and scripts to see if it has any target whose name matches the command entered (Note: command/target name match process is case sensitive.)
Well that was the start anyway. :)
Since then I have added a bunch of features to help make things easier.
1.> NantShell has it's own built-in help available by typing 'help' or '?'
2.> NantShell has commands for adding namespaces* (xml), scripts(*.build) and directories(with scripts in) to it's environment.
3.> NantShell has it's own config file (NantShell.config) (Crappy custom rubbish for now as I'm lazy. Yeah go figure :)) to list out namespaces*, directories and script-files which will be preloaded in to the environment at startup.
So basically the system understands that you want to run Nant targets but that you are way too lazy to want to create batch files or other launch mechanisms to trigger them.
Further, you might have these Targets spread over many files and have many Targets within each file.
So NantShell builds, what amounts to, a Path (or list) of (script) files which it is willing to search through each and every time you ask it, looking for the precious target you said it would find somewhere in there, and then it executes it for you.
Wow I'm sure there should have been more punctuation in there
*Note: Namespaces, in this context, are things which need to be removed from the DocumentElement of a XMLdocument before my XPath stuff would work :)
Yeah it's a hack because I am, for the moment at least, too lazy to work out why this doesn't work.
(Since I know next to nothing about xml namespaces, (and I was feeling impatient) I just thought
So give me some feedback.
What do you think?
Oh yeah and does anyone know how I might embed this in a toolwindow for DevExpress's CodeRush?
So....I've created this little program 'NantShell' which is basically a console app designed to evaluate commands entered and respond.
If the command entered is not recognised, then NantShell assumes that I am trying to specify a Nant 'Target' for it to run.
So it looks through it's list of directories and scripts to see if it has any target whose name matches the command entered (Note: command/target name match process is case sensitive.)
Well that was the start anyway. :)
Since then I have added a bunch of features to help make things easier.
1.> NantShell has it's own built-in help available by typing 'help' or '?'
2.> NantShell has commands for adding namespaces* (xml), scripts(*.build) and directories(with scripts in) to it's environment.
3.> NantShell has it's own config file (NantShell.config) (Crappy custom rubbish for now as I'm lazy. Yeah go figure :)) to list out namespaces*, directories and script-files which will be preloaded in to the environment at startup.
So basically the system understands that you want to run Nant targets but that you are way too lazy to want to create batch files or other launch mechanisms to trigger them.
Further, you might have these Targets spread over many files and have many Targets within each file.
So NantShell builds, what amounts to, a Path (or list) of (script) files which it is willing to search through each and every time you ask it, looking for the precious target you said it would find somewhere in there, and then it executes it for you.
Wow I'm sure there should have been more punctuation in there
*Note: Namespaces, in this context, are things which need to be removed from the DocumentElement of a XMLdocument before my XPath stuff would work :)
Yeah it's a hack because I am, for the moment at least, too lazy to work out why this doesn't work.
(Since I know next to nothing about xml namespaces, (and I was feeling impatient) I just thought
Screw It!... I'll just remove them.and what do you know.... it worked :) )
So give me some feedback.
What do you think?
Oh yeah and does anyone know how I might embed this in a toolwindow for DevExpress's CodeRush?
Thursday, November 09, 2006
Nant Runner/Console
I seem to be accumulating a lot of NAnt files which require arbitrary periodic running...
I was thinking the other night about how many NAnt files I seem to have with targets which do highly useful things when run without requiring any params.
RestoreDemoDatabase
RegenerateNantXSD
GoMakeMeACoffee <-- yeah I wish
It occurred to me that it would be really good if I had a sort of dos-box *interactive* nant console application.
This app would be launched with an optional list of build files.
I could interactively ask it to load further build files and then I could execute targets by name.
So I could just Type the name of a target and it would run.
Sounds like something PowerShell could do.
or perhaps just a simple .net console app.
I've never made an interactive console app before (I guess you might call this a shell of sorts)
Can someone point me in the direction of a small example?
What do ya'll think of this as an idea anyway?
NantShell.... yeah I like the sound of that
I was thinking the other night about how many NAnt files I seem to have with targets which do highly useful things when run without requiring any params.
RestoreDemoDatabase
RegenerateNantXSD
GoMakeMeACoffee <-- yeah I wish
It occurred to me that it would be really good if I had a sort of dos-box *interactive* nant console application.
This app would be launched with an optional list of build files.
I could interactively ask it to load further build files and then I could execute targets by name.
So I could just Type the name of a target and it would run.
Sounds like something PowerShell could do.
or perhaps just a simple .net console app.
I've never made an interactive console app before (I guess you might call this a shell of sorts)
Can someone point me in the direction of a small example?
What do ya'll think of this as an idea anyway?
NantShell.... yeah I like the sound of that
The Nant .XSD ( schema)
Jay Flowers sent me an email this morning, to remind me that you can recreate the NAnt XSD(Schema) at any time by running the 'nantschema' task.....Jay Flowers reminded me of nant's very clever built in 'nantschema' task which will create an xsd (named however you like) containing the schema for the entire suite of NAnt tasks present your copy.
This means that if you have downloaded NantContrib or have created your own tasks, then the 'nantschema' task will reflect over these and include them in the xsd it creates.
As Jay says you can have visual studio give you this information back as intellisense by setting the default namespace of your build file to the generated xsd.
Jay also gave a link to a good 'HowTo' which covers pretty much all you need to know
Thanks for the mail Jay
:)
This means that if you have downloaded NantContrib or have created your own tasks, then the 'nantschema' task will reflect over these and include them in the xsd it creates.
As Jay says you can have visual studio give you this information back as intellisense by setting the default namespace of your build file to the generated xsd.
Jay also gave a link to a good 'HowTo' which covers pretty much all you need to know
Thanks for the mail Jay
:)
Nant Task - Call2
Is anyone else sick of being unable to pass parameters to a Nant 'Call' task?
I am thinking about writing a new "Call2" Nant task. It would work like 'Call' but treat all extra attributes as properties to create or overwrite prior to execution of the referenced task.
It would effectively allow me the following shortcut:
Instead of....
-------------------------------------------------------------
-------------------------------------------------------------
...I would be able to type ...
-------------------------------------------------------------
-------------------------------------------------------------
For me at least this will be quite the time saver.
Is this a waste of time?
Has someone else already done this?
Is it already in NAnt somewhere under a different name?
I'd be glad to hear anyone's opinion on the subject.
If you're interested in this task, drop me a line at my GMail address or post in the comments.
I am thinking about writing a new "Call2" Nant task. It would work like 'Call' but treat all extra attributes as properties to create or overwrite prior to execution of the referenced task.
It would effectively allow me the following shortcut:
Instead of....
-------------------------------------------------------------
-------------------------------------------------------------
...I would be able to type ...
-------------------------------------------------------------
-------------------------------------------------------------
For me at least this will be quite the time saver.
Is this a waste of time?
Has someone else already done this?
Is it already in NAnt somewhere under a different name?
I'd be glad to hear anyone's opinion on the subject.
If you're interested in this task, drop me a line at my GMail address or post in the comments.
Templates in the Template editor (revisited)
So after a bit of thought (and some help from the relevant forum) I've come up with a way to use templates in the Coderush Template Editor.
You'll recall my post some several minutes ago where I declared that it would be really useful to be able to execute a template whilst editing another template.
You'll also recall (because it really wasn't so very long ago) that CodeRush, at the time of writing, does not support this.
Well I've found a solution. It's not perfect by any means but it does help quite significantly. It turns out that AutoHotKey mentioned in a previous post is nearly perfect for the job.
It cannot do 'Selection Embedding', but it can do simple text replacement based on HotStrings.
A HotString is like the key sequence that might trigger a CodeRush Template.
In this case, the simple scripts of...
-------------------------------------------------------------
:*?:<<::«
:*?:>>::»
::field::«Field»
::fieldstart::«FieldStart»
::fieldend::«FieldEnd»
-------------------------------------------------------------
... create 5 HotStrings which expand suitably from one form to another.
Thus << becomes «
and >> becomes »
The difference is that these templates are system-wide and will work in any textbox or word processor.
However there is much that these Templates cannot do.
There is no Linked Identifiers, No simple «Field» switching and I don't appear to be able to set a location for the caret to finish up at.
So while these HotStrings are very useful for setting up «cursor»_«BlockQuote» and «FieldStart»-«FieldEnd» combos, they are entirely incapable of replacing them.
Still they are useful.
You'll recall my post some several minutes ago where I declared that it would be really useful to be able to execute a template whilst editing another template.
You'll also recall (because it really wasn't so very long ago) that CodeRush, at the time of writing, does not support this.
Well I've found a solution. It's not perfect by any means but it does help quite significantly. It turns out that AutoHotKey mentioned in a previous post is nearly perfect for the job.
It cannot do 'Selection Embedding', but it can do simple text replacement based on HotStrings.
A HotString is like the key sequence that might trigger a CodeRush Template.
In this case, the simple scripts of...
-------------------------------------------------------------
:*?:<<::«
:*?:>>::»
::field::«Field»
::fieldstart::«FieldStart»
::fieldend::«FieldEnd»
-------------------------------------------------------------
... create 5 HotStrings which expand suitably from one form to another.
Thus << becomes «
and >> becomes »
The difference is that these templates are system-wide and will work in any textbox or word processor.
However there is much that these Templates cannot do.
There is no Linked Identifiers, No simple «Field» switching and I don't appear to be able to set a location for the caret to finish up at.
So while these HotStrings are very useful for setting up «cursor»_«BlockQuote» and «FieldStart»-«FieldEnd» combos, they are entirely incapable of replacing them.
Still they are useful.
Some CodeRush Template Editor Ideas
As my last post indicated, I've been playing around a lot more with CodeRush's 'Template' facility.
In my recent attempts to create all kinds of CodeRush templates, I have come across a few... items which could stand a little improvement in the template editor.
1.> «Cursor» and «BlockQuote» have little icons to represent them but «FieldStart» and «FieldEnd» do not.
I'm finding that I am using these 2 little gems more and more all the time and it's getting quite annoying to have to reach for the mouse in order to select these.
2.> My next thought was simple (like so many of them). I could create a template to create the phrases and so ease my task.
except that the template editor does not consider itself part of the IDE and as such cannot run templates within itself.
3.> One common situation is one where you have a prospective template in which you hope to embed several 'fields'. These should have temporary wording in place of each with a «FieldStart»-«FieldEnd» pair around each. Further, the first of these should have a «Cursor»-«BlockQuote» pair around the outside of it so that it becomes the initially selected field.
This leads us to a situation where one would like to do either of the following:
a.> Highlight some text and use a 'Selection Embedding' to wrap the text in a «FieldStart»-«FieldEnd» or a «Cursor»-«BlockQuote» combination or perhaps even both.
Or
b.> Click «Cursor», Select «FieldStart»,Type Some Text, Select «FieldEnd» and Click «BlockQuote»
The first case is simply not supported. I have raised it as a suggestion and am waiting to hear an answer from the support center
The second case works (Sort of). What I mean is that currently there is a bug (in my opinion) wherein after one selects an item from the dropdown list of commands, the cursor in placed to the left of the inserted command (rather than to the right).
Thus the insertion of further commands without first manually reseating the cursor, result in the commands being chosen in the order 1, 2, 3 and yet appearing in text as 3, 2, 1.
Initially it is hard to observe this behaviour because although the caret's virtual position appears to be to the left, the caret itself is not visible because the focus is on the command dropdown.
I believe that this bug is responsible for people creating templates like:
-------------------------------------------------------------
SomeText«Cursor»«FieldStart»Field«BlockQuote»«FieldEnd»EndText
-------------------------------------------------------------
...when they meant to create...
-------------------------------------------------------------
SomeText«Cursor»«FieldStart»Field«FieldEnd»«BlockQuote»EndText
-------------------------------------------------------------
Then (without noticing that something is amiss) they wonder why (and in some cases ask tech-support/newsgroup residents why) their template doesn't work.
This is a minor bug but I felt that since they seem so few and far between, I should mention it to prove that I am unbiased in things DXCore based :)
In my recent attempts to create all kinds of CodeRush templates, I have come across a few... items which could stand a little improvement in the template editor.
1.> «Cursor» and «BlockQuote» have little icons to represent them but «FieldStart» and «FieldEnd» do not.
I'm finding that I am using these 2 little gems more and more all the time and it's getting quite annoying to have to reach for the mouse in order to select these.
2.> My next thought was simple (like so many of them). I could create a template to create the phrases and so ease my task.
except that the template editor does not consider itself part of the IDE and as such cannot run templates within itself.
3.> One common situation is one where you have a prospective template in which you hope to embed several 'fields'. These should have temporary wording in place of each with a «FieldStart»-«FieldEnd» pair around each. Further, the first of these should have a «Cursor»-«BlockQuote» pair around the outside of it so that it becomes the initially selected field.
This leads us to a situation where one would like to do either of the following:
a.> Highlight some text and use a 'Selection Embedding' to wrap the text in a «FieldStart»-«FieldEnd» or a «Cursor»-«BlockQuote» combination or perhaps even both.
Or
b.> Click «Cursor», Select «FieldStart»,Type Some Text, Select «FieldEnd» and Click «BlockQuote»
The first case is simply not supported. I have raised it as a suggestion and am waiting to hear an answer from the support center
The second case works (Sort of). What I mean is that currently there is a bug (in my opinion) wherein after one selects an item from the dropdown list of commands, the cursor in placed to the left of the inserted command (rather than to the right).
Thus the insertion of further commands without first manually reseating the cursor, result in the commands being chosen in the order 1, 2, 3 and yet appearing in text as 3, 2, 1.
Initially it is hard to observe this behaviour because although the caret's virtual position appears to be to the left, the caret itself is not visible because the focus is on the command dropdown.
I believe that this bug is responsible for people creating templates like:
-------------------------------------------------------------
SomeText«Cursor»«FieldStart»Field«BlockQuote»«FieldEnd»EndText
-------------------------------------------------------------
...when they meant to create...
-------------------------------------------------------------
SomeText«Cursor»«FieldStart»Field«FieldEnd»«BlockQuote»EndText
-------------------------------------------------------------
Then (without noticing that something is amiss) they wonder why (and in some cases ask tech-support/newsgroup residents why) their template doesn't work.
This is a minor bug but I felt that since they seem so few and far between, I should mention it to prove that I am unbiased in things DXCore based :)
Wednesday, November 08, 2006
Nant Templates
Some Nant CodeRush Templates I've created. Available to all.
I've been doing a lot of work with Nant recently and quite frankly there is nothing quite so annoying as having to type all those angle brackets. I just don't know how a c# guy puts up with having to do that sort of thing all the time :P
Thankfully CodeRush makes this a lot easier. Within seconds I had created several useful templates which, as usual, I have chosen to share with the rest of you.
Aren't you all so very lucky :P
The file is available here
Update(09 Nov 2006) Jay Flowers points out that I have made no mention of just what templates I created (DOH!)
So.....
FYI: Templates include:- Property, Target, Copy, Delete, Exec, mkdir as well as a few aliases to help with some default uses. These should import into a Template folder of Custom\NAnt.
Also included is my most used template $ which expands to ${} with the caret in the brackets.
On closer inspection I don't seem to have included a 'Project' Template which would be good. I'll have a look at adding that.
I've been doing a lot of work with Nant recently and quite frankly there is nothing quite so annoying as having to type all those angle brackets. I just don't know how a c# guy puts up with having to do that sort of thing all the time :P
Thankfully CodeRush makes this a lot easier. Within seconds I had created several useful templates which, as usual, I have chosen to share with the rest of you.
Aren't you all so very lucky :P
The file is available here
Update(09 Nov 2006) Jay Flowers points out that I have made no mention of just what templates I created (DOH!)
So.....
FYI: Templates include:- Property, Target, Copy, Delete, Exec, mkdir as well as a few aliases to help with some default uses. These should import into a Template folder of Custom\NAnt.
Also included is my most used template $ which expands to ${} with the caret in the brackets.
On closer inspection I don't seem to have included a 'Project' Template which would be good. I'll have a look at adding that.
Friday, November 03, 2006
Bugzilla?!?! You gotta be Sh*tting me
It's been suggested that I look into BugZilla..
Ok.. So I've just been to look at...
http://www.bugzilla.org/docs/win32install.html
Holy crap but that's complicated.
That's just the sort of time I don't have.
The reason I mentioned FogBugz is that although it costs money (and yeah I already approached Joel for a freebie Single-User Support-the-Open-Source-Movement edition. But that wasn't going to happen.), It is very simple to setup and it is very intuitive to use.
How do I know this? Well my company (erm well ... the one I work for) bought a copy of FogBugz a few months back for our own use and I have to say it's wonderful. Not perfect (what is?) but really very good.
But hey, asking people for donations is still a bit lame I know. So I tripped out to the Bugzilla site and well how should I put this....?
I tend to judge the maintainability/security(and in fairness flexibility) of something by how many parts it is made up of and how long those parts take to setup initially.
Shall we say that Bugzilla was clearly developed with the *nix style user/developer in mind.
I couldn't in clear conscience install that software on any machine which wasn't mine unless I was spending all day every day learning about just how it worked so that I could be sure it didn't have any gapping security holes in it.
It might very well have none. I freely admit that it probably doesn't.
But I'd much rather stick to something based on MS SQL server and IIS.
(Probably because I know a little about how they work)
Oh and if I didn't mention it already, My company had already volunteered to host this little project for me (back when I asked Joel for a copy) as long as I could give them reasonable assurances as to the security, Lack of conflicts and generally not mashing up their machine for them.
With Bugzilla I'd have to spend far too long trying understand enough to appease my conscience.
Any other ideas?
Ok.. So I've just been to look at...
http://www.bugzilla.org/docs/win32install.html
Holy crap but that's complicated.
That's just the sort of time I don't have.
The reason I mentioned FogBugz is that although it costs money (and yeah I already approached Joel for a freebie Single-User Support-the-Open-Source-Movement edition. But that wasn't going to happen.), It is very simple to setup and it is very intuitive to use.
How do I know this? Well my company (erm well ... the one I work for) bought a copy of FogBugz a few months back for our own use and I have to say it's wonderful. Not perfect (what is?) but really very good.
But hey, asking people for donations is still a bit lame I know. So I tripped out to the Bugzilla site and well how should I put this....?
I tend to judge the maintainability/security(and in fairness flexibility) of something by how many parts it is made up of and how long those parts take to setup initially.
Shall we say that Bugzilla was clearly developed with the *nix style user/developer in mind.
I couldn't in clear conscience install that software on any machine which wasn't mine unless I was spending all day every day learning about just how it worked so that I could be sure it didn't have any gapping security holes in it.
It might very well have none. I freely admit that it probably doesn't.
But I'd much rather stick to something based on MS SQL server and IIS.
(Probably because I know a little about how they work)
Oh and if I didn't mention it already, My company had already volunteered to host this little project for me (back when I asked Joel for a copy) as long as I could give them reasonable assurances as to the security, Lack of conflicts and generally not mashing up their machine for them.
With Bugzilla I'd have to spend far too long trying understand enough to appease my conscience.
Any other ideas?
Bug Reports (and Donations :P)
With work on my plugins being so sporadic, it's sometimes difficult to keep track of what I should be working on next....
Yup its my own fault really. I asked people to contact me anyway and anyhow but in truth the best way to submit bugs and feature requests is simple.
Just send them to my Gmail address RoryBecker[At]Gmail[Dot]Com
I will then file them and deal with them as well as I can in order.
Of course if anyone wants to fund me a copy of FogBugz ( which would solve all of these issues) then feel free to donate some money:
(I believe FB costs around $120 total :P )
But for now, my GMail address is probably best for reports.
Yup its my own fault really. I asked people to contact me anyway and anyhow but in truth the best way to submit bugs and feature requests is simple.
Just send them to my Gmail address RoryBecker[At]Gmail[Dot]Com
I will then file them and deal with them as well as I can in order.
Of course if anyone wants to fund me a copy of FogBugz ( which would solve all of these issues) then feel free to donate some money:
(I believe FB costs around $120 total :P )
But for now, my GMail address is probably best for reports.
Visual Studio hotfixes available without contacting support!!
From the DailyGrid 1005 - Mike Gunderloy (my delayed congratulations by the way Mike), News that the VS.Net team are making VS.net hotfixes available for download without having to go through product support.
Thursday, November 02, 2006
DX_ContextContrib now available
My first Context-Providing plugin created to fill a need first suggested by Dan Avni in the DevExpress's Coderush newsgroup
In response to a post by Dan Avni in DevExpress's CodeRush newsgroup, I've created a new but very simple plugin which provides the developer with 3 new contexts.
Editor\Clipboard\IsMultiLine
Editor\Clipboard\Contains Literal
Editor\Clipboard\Contains RegEx
Dan's post required the first of these and I just decided to add the others for the fun of it :)
The addition of IsMultiLine allows us to create a duplicate of the 're' Template and change it so that it detects that the Clipboard string is Multi-line and therefore place this string, not in the region name, but as the region body.
The template...
--------------------------
#Region "«Caret»"
«Paste»
#End Region
--------------------------
.... seems to work great :)
Assuming of course that you tick the right contexts
Duplicate the original template (and name it 're' also) then change the body of the duplicate to the above code and add the (Clipboard)isMultiline context. Further you can either assign a negative isMultiline requirement to the original or alternatively move the priority of the new template above the old one.
Questions... comments
Again I hope this helps someone :)
In response to a post by Dan Avni in DevExpress's CodeRush newsgroup, I've created a new but very simple plugin which provides the developer with 3 new contexts.
Editor\Clipboard\IsMultiLine
Editor\Clipboard\Contains Literal
Editor\Clipboard\Contains RegEx
Dan's post required the first of these and I just decided to add the others for the fun of it :)
The addition of IsMultiLine allows us to create a duplicate of the 're' Template and change it so that it detects that the Clipboard string is Multi-line and therefore place this string, not in the region name, but as the region body.
The template...
--------------------------
#Region "«Caret»"
«Paste»
#End Region
--------------------------
.... seems to work great :)
Assuming of course that you tick the right contexts
Duplicate the original template (and name it 're' also) then change the body of the duplicate to the above code and add the (Clipboard)isMultiline context. Further you can either assign a negative isMultiline requirement to the original or alternatively move the priority of the new template above the old one.
Questions... comments
Again I hope this helps someone :)
Friday, September 29, 2006
Contacting Me
What ways are there to contact me, and when should you use each ....
I've been getting some very helpful comments from several people regarding bugs that they have found in some of my plugins.
Thanks very much BTW.
However the problem with this is that when I fix and of these bugs I have no idea who to contact, since most people comment anonymously ( at least as far as an amail address is concerned)
So I thought spell out the alternative ways of contacting me :)
1.> EMail: RoryBecker AT gmail DOT com
Useful for general "whazup", "Hey there" or "You and your plugins Suck big-time!" type messages. It's also where notifications of your blog comments get forwarded. I'm plugged into this address whether at home or work. So I'll definitely get your message. Please don't spam me though.
2.> Email: RoryB AT DXSquad DOT com
My DXSquad.com email address, donated by the kind folks at DevExpress.
3.> Developer Express Newsgroups (Plugins, Coderush, RefactorPro). If it's related to these forums then feel free to contact me here.
On the flip side I don't want to hijack said forums with a deluge of mails about my plugins (unless they are wonderful endorsements of how my wonderful plugins have singlehandedly saved your life etc)
Also I encourage anyone out there to email me direct at my gmail address just to let me know you're using a plugin of mine :)
I've been getting some very helpful comments from several people regarding bugs that they have found in some of my plugins.
Thanks very much BTW.
However the problem with this is that when I fix and of these bugs I have no idea who to contact, since most people comment anonymously ( at least as far as an amail address is concerned)
So I thought spell out the alternative ways of contacting me :)
1.> EMail: RoryBecker AT gmail DOT com
Useful for general "whazup", "Hey there" or "You and your plugins Suck big-time!" type messages. It's also where notifications of your blog comments get forwarded. I'm plugged into this address whether at home or work. So I'll definitely get your message. Please don't spam me though.
2.> Email: RoryB AT DXSquad DOT com
My DXSquad.com email address, donated by the kind folks at DevExpress.
3.> Developer Express Newsgroups (Plugins, Coderush, RefactorPro). If it's related to these forums then feel free to contact me here.
On the flip side I don't want to hijack said forums with a deluge of mails about my plugins (unless they are wonderful endorsements of how my wonderful plugins have singlehandedly saved your life etc)
Also I encourage anyone out there to email me direct at my gmail address just to let me know you're using a plugin of mine :)
Friday, September 08, 2006
DX_Contrib Bugs fixed in version 0.2.1
The latest version of DX_Contrib fixes PaintIt and UnusedVariables.
Yup that's the beauty of library dlls. They can be used to fix or introduce bugs to several apps/plugins at once. In this case lets hope that the net result is more positive than negative. :)
Specifically fixed in version 0.2.1 of DX_Contrib are
These bugs would have affected any plugin attempting to call PaintElementName. Which includes PaintIt and UnusedVariables.
Anyway hopefully we can now resume our <cough/> usual high service. :)
Yup that's the beauty of library dlls. They can be used to fix or introduce bugs to several apps/plugins at once. In this case lets hope that the net result is more positive than negative. :)
Specifically fixed in version 0.2.1 of DX_Contrib are
- An InvalidcastException which was being caused when PaintElementName was instructed to use the OverlayText PaintStyle (and posibly others)
- An attempt to decorate elements even when they were hidden inside colapsed regions. Oops :)
These bugs would have affected any plugin attempting to call PaintElementName. Which includes PaintIt and UnusedVariables.
Anyway hopefully we can now resume our <cough/> usual high service. :)
Wednesday, September 06, 2006
I want Multi-language projects in Visual Studio
I want multi-language projects in Visual Studio and Here's why...
(NB: this post made from a VS 2003/Framewoirk v1.1 point of view)
VB.Net doesn't cut it ..... but then again neither does C#.
The truth is that both languages compete with each other.
I know Microsoft would have us believe that all languages are equal in the eyes of the framework and to some extent, this is true.
But how eay is it to create an application using both C# and VB.Net?
For example one of the nicer features of C# is operator overloading which vb simply does not have. (not in v1.1 anyway)
Likewise there are things which C# does not have. Like a background compiler.
A reasonable ( but by no means comprehensive list of differences exist here :http://www.advisor.com/Articles.nsf/aid/SHERP42
Anyway the point is this...
The languages are different but each have advantages over the other. Now we find that we have J# F# CAML Python Ruby (I have not looked at any of these directly but at least some of them compile to IL)
So why am I forced to pick a language for a project. I have often found myself wishing that I had operator overloading in VB.net but I shudder when I think of moving permanently to c# as I think of all the things that I might loose.
Now i appreciate that VB.Net 2.0 has operator overloading and further introduces the MY namespace (a seperate debate of it's own) but the truth is that these languages will always have things that the other doesn't.
and yet I still need to create a new project in studio, reference the project or the created dll from wherever it needs to be found from, and ensure that these references are maintained for the life of the project. further there are known to be issues in studio where Project A(VB.net) references Project B(c#) references Project C(VB.Net) again.
And so I ask.....
Why can't I have a Multi Language project where language is specified on a per file basis (probably by looking at the extension). The project properties could have a c# page, a vb.net page. in fact one page for any language that whose files might be included.
We used to be able to compile object files from different languages and then link them together to form cohesive dlls and exes.
Give me back my linking :) Automated of course :)
Ok over to everyone else. Just why is this a bad idea? :P
(NB: this post made from a VS 2003/Framewoirk v1.1 point of view)
VB.Net doesn't cut it ..... but then again neither does C#.
The truth is that both languages compete with each other.
I know Microsoft would have us believe that all languages are equal in the eyes of the framework and to some extent, this is true.
But how eay is it to create an application using both C# and VB.Net?
For example one of the nicer features of C# is operator overloading which vb simply does not have. (not in v1.1 anyway)
Likewise there are things which C# does not have. Like a background compiler.
A reasonable ( but by no means comprehensive list of differences exist here :http://www.advisor.com/Articles.nsf/aid/SHERP42
Anyway the point is this...
The languages are different but each have advantages over the other. Now we find that we have J# F# CAML Python Ruby (I have not looked at any of these directly but at least some of them compile to IL)
So why am I forced to pick a language for a project. I have often found myself wishing that I had operator overloading in VB.net but I shudder when I think of moving permanently to c# as I think of all the things that I might loose.
Now i appreciate that VB.Net 2.0 has operator overloading and further introduces the MY namespace (a seperate debate of it's own) but the truth is that these languages will always have things that the other doesn't.
and yet I still need to create a new project in studio, reference the project or the created dll from wherever it needs to be found from, and ensure that these references are maintained for the life of the project. further there are known to be issues in studio where Project A(VB.net) references Project B(c#) references Project C(VB.Net) again.
And so I ask.....
Why can't I have a Multi Language project where language is specified on a per file basis (probably by looking at the extension). The project properties could have a c# page, a vb.net page. in fact one page for any language that whose files might be included.
We used to be able to compile object files from different languages and then link them together to form cohesive dlls and exes.
Give me back my linking :) Automated of course :)
Ok over to everyone else. Just why is this a bad idea? :P
New versions of Plugins
I have released new versions of PaintIt, MoveIt, DeclareIt, UnusedVariables and DX_Contrib
That's right I have released new versions of my plugins.
PaintIt has had it's guts ripped out yanked around and replaced including a new caaching system to help deal with some performance issues.
UnusedVariables has now been altered to depend on DX_Contrib and so allow you the user to pick the decoration style that is used with this plugin.
MoveIt and DeclareIt have both been changed to depend also on DX_Contrib. They have not changed much although some methods previously held in their "Utils/Utility" regions have moved into DX_contrib instead. There may also have been some minor adjustments in other areas. In truth I intend to have a closer look at the functionality in these 2 plugins over the next week or so.
Finally DX_Contrib itself has been updated to veriosn 0.2 (It should be noted that all the previously mentioned plugins now depend on version 0.2.)
I have included more decoration types for the Stylepicker and I have introduced some Element helper methods many of which have migrated from other plugins.
One of the more interesting things in the latest version of DX_Contrib, is a new LanguageElementIterator.
This object takes a Delegate in it's constructor which is then used as an evaluator for each element it passes over. This makes it very simple for you, the plugin developer, to write a CapitalizedVariables or PrivateMethodsWithUnderScoresInName delegate and pass over this list at any point in your code.
This is how the new versions of PaintIt and UnusedVariables generate their caches.
Anyway...download and have fun. (http://www.rorybecker.me.uk/)
Questions? Comments???
Feel free to comment here on the blog and I will try to respond as quick as I can.
If theis blog has a facility for you to monitor comments of a given post (Ala RSS), then I am unaware of it. As such you will have to check back regularly in order to determine if I have responded to you.
Of course you could just leave your email address or just mail me direct ( RoryBecker AT GMail.com)
That's right I have released new versions of my plugins.
PaintIt has had it's guts ripped out yanked around and replaced including a new caaching system to help deal with some performance issues.
UnusedVariables has now been altered to depend on DX_Contrib and so allow you the user to pick the decoration style that is used with this plugin.
MoveIt and DeclareIt have both been changed to depend also on DX_Contrib. They have not changed much although some methods previously held in their "Utils/Utility" regions have moved into DX_contrib instead. There may also have been some minor adjustments in other areas. In truth I intend to have a closer look at the functionality in these 2 plugins over the next week or so.
Finally DX_Contrib itself has been updated to veriosn 0.2 (It should be noted that all the previously mentioned plugins now depend on version 0.2.)
I have included more decoration types for the Stylepicker and I have introduced some Element helper methods many of which have migrated from other plugins.
One of the more interesting things in the latest version of DX_Contrib, is a new LanguageElementIterator.
This object takes a Delegate in it's constructor which is then used as an evaluator for each element it passes over. This makes it very simple for you, the plugin developer, to write a CapitalizedVariables or PrivateMethodsWithUnderScoresInName delegate and pass over this list at any point in your code.
This is how the new versions of PaintIt and UnusedVariables generate their caches.
Anyway...download and have fun. (http://www.rorybecker.me.uk/)
Questions? Comments???
Feel free to comment here on the blog and I will try to respond as quick as I can.
If theis blog has a facility for you to monitor comments of a given post (Ala RSS), then I am unaware of it. As such you will have to check back regularly in order to determine if I have responded to you.
Of course you could just leave your email address or just mail me direct ( RoryBecker AT GMail.com)
Thursday, August 31, 2006
I'm back but the plugins have moved
Yup after more than 2 weeks without home broadband, I'm back.... what have I been doing and why are my plugins moving? (and more importantly where to ?)
Well it's all very simple...
I recently moved house to a much nicer location with a bigger garden and more space within for my wife and kids to occupy with more stuff.
In so moving, I needed to cancel every known service directed at my old place and inform said people of where my new address would be located.
This included of course... my home landline and thus my broadband.
Noooooo........
In the process of doing this, I discovered that I was not under contract with Pipex ( my previous provider) any longer and I could elect to move with no surcharge.
Interesting.
I enquired of pipex support what would happen if I decided to remain with them in my new abode.
They informed me (in a slightly cryptic manner) that things would be just as difficult as if I move to a different provider (new Landline, new account with pipex, difficulty in maintaining email aliases).
Additionally they would not be able to offer me the same rates as before because I would be having to start a new contract with them rather than transfer the existing one.
This would have the surprising effect of forcing me to choose from their new range of offerings, of which only one could possible suit me due to my bandwidth requirements. and oh shame this new package was somehow more expensive than the previous model.
Oh well that was it.
I have now changed providers to demon.net
They don't give me any web space but I don't need that as I have some spare elsewhere. However the rorybecker.co.uk domain name was more of an issue.
I bought rorybecker.co.uk from quidnames.com which to this point has been a very good purchase.
I needed now however to change the redirection on said domain so that it would point at my new web space.
This proved a little difficult.
Normally one logs in to their system through the use of the registered email and password.
Since I could remember neither of these, the system felt required to deny me the access which was rightfully mine.
I hurled massive abuse (verbal) at the site but this seemed to do no good. I decided that there would in all good sense be a method to retrieve said information since I am in fact the rightful owner of said domain.
It turns out that quidnames do, in fact, have such a method.
They simply require that you visit the appropriate page on their site and enter the domainname whose information you require and the registered email associated with said domain name.
And there-in lay the problem. I of course had no idea which email of mine was the correct one. I have "many".
I proceeded to mail "support" explaining (repeatedly) that if they would just email the details to whichever email address happened to be associated with the account, then I would be able to collect them as I forward most things to my gmail account these days.
My emails met with no response whatsoever for the next 8 days, where upon support got back to me to tell me which email address was in fact assigned to the account.
And that is where things get complicated :)
You see (if I understand this correctly)....
Can you see where all this is going?
ya gotta love the net :)
So now I have instructed Company1 to point set the domains nameservers to the 2 nameservers supplied by Company2.
This so it is said will take 24 to 48 hours
48 hours was sunday.
I am led to believe that the process was however only started yesterday evening so this time tommorow I should be able to retrieve email send from that point onward tro the domain in question.
After this I hope to request my password from quidnames and then retrieve said password and redirect rorybecker.co.uk to rorybecker.me.uk
and all, I think, will be well again :)
So the upshot is that my plugins have moved temporarily, to http://www.rorybecker.me.uk
Well it's all very simple...
I recently moved house to a much nicer location with a bigger garden and more space within for my wife and kids to occupy with more stuff.
In so moving, I needed to cancel every known service directed at my old place and inform said people of where my new address would be located.
This included of course... my home landline and thus my broadband.
Noooooo........
In the process of doing this, I discovered that I was not under contract with Pipex ( my previous provider) any longer and I could elect to move with no surcharge.
Interesting.
I enquired of pipex support what would happen if I decided to remain with them in my new abode.
They informed me (in a slightly cryptic manner) that things would be just as difficult as if I move to a different provider (new Landline, new account with pipex, difficulty in maintaining email aliases).
Additionally they would not be able to offer me the same rates as before because I would be having to start a new contract with them rather than transfer the existing one.
This would have the surprising effect of forcing me to choose from their new range of offerings, of which only one could possible suit me due to my bandwidth requirements. and oh shame this new package was somehow more expensive than the previous model.
Oh well that was it.
I have now changed providers to demon.net
They don't give me any web space but I don't need that as I have some spare elsewhere. However the rorybecker.co.uk domain name was more of an issue.
I bought rorybecker.co.uk from quidnames.com which to this point has been a very good purchase.
I needed now however to change the redirection on said domain so that it would point at my new web space.
This proved a little difficult.
Normally one logs in to their system through the use of the registered email and password.
Since I could remember neither of these, the system felt required to deny me the access which was rightfully mine.
I hurled massive abuse (verbal) at the site but this seemed to do no good. I decided that there would in all good sense be a method to retrieve said information since I am in fact the rightful owner of said domain.
It turns out that quidnames do, in fact, have such a method.
They simply require that you visit the appropriate page on their site and enter the domainname whose information you require and the registered email associated with said domain name.
And there-in lay the problem. I of course had no idea which email of mine was the correct one. I have "many".
I proceeded to mail "support" explaining (repeatedly) that if they would just email the details to whichever email address happened to be associated with the account, then I would be able to collect them as I forward most things to my gmail account these days.
My emails met with no response whatsoever for the next 8 days, where upon support got back to me to tell me which email address was in fact assigned to the account.
And that is where things get complicated :)
You see (if I understand this correctly)....
- The address in question was in a domain owned by the company I work for.
- This domain was bought through Company 1.
- Company 1 was instructed (not by me) to set the name servers of the domain to the IP address of a dedicated server we controlled.
- The dedicated server ran a nameserver of it's own. (NameServer1)
- NameServer2 (for some ungodly reason) pointed at dyndns.org which then pointed back at nameserver1, thus giving us a very neat single point of failure. (NameServer1)
- Nameserver1 pointed at a nameserver held by Company2 (NameServer3)
- The NameServer3(at company2) held instructions for distributing email.
- Company2 also held some pop3 boxes into which it was instructed to sort the email from the domain in question.
Can you see where all this is going?
- We ceased renting the dedicated server.
- The dedicated server was formatted/mangled/otherwise destroyed.
- NameServer1 vanishes like a fart in a tornado.
- The chain is broken and now the email from quidnames now forwards into the ether never to return.
ya gotta love the net :)
So now I have instructed Company1 to point set the domains nameservers to the 2 nameservers supplied by Company2.
This so it is said will take 24 to 48 hours
48 hours was sunday.
I am led to believe that the process was however only started yesterday evening so this time tommorow I should be able to retrieve email send from that point onward tro the domain in question.
After this I hope to request my password from quidnames and then retrieve said password and redirect rorybecker.co.uk to rorybecker.me.uk
and all, I think, will be well again :)
So the upshot is that my plugins have moved temporarily, to http://www.rorybecker.me.uk
Saturday, August 05, 2006
My plugin site has been Refactored
Yeah my plugin site has been Refactored. Hopefully it now provides all that it once did whilst managing to do so with a 'little' more style and a little less noise :)
(For those that still think it looks crap (I'm still in that camp), my books on css should be arriving in a week or so (there seems to have been a little delay), so hopefully I'll start to be able to do something a 'little' better.)
So check it out at http://www.rorybecker.co.uk
(For those that still think it looks crap (I'm still in that camp), my books on css should be arriving in a week or so (there seems to have been a little delay), so hopefully I'll start to be able to do something a 'little' better.)
So check it out at http://www.rorybecker.co.uk
Refactoring PaintIt -> DX_Contrib v0.1
I've realised that perhaps some of my PaintIt Code could be useful elsewhere.
I have spent the past couple of days refactoring PaintIt so as to extract the actual painting code (Including the ColorPicker and PaintPicker(yes they are crap names) from the Original PaintIt plugin and into a new Common Dll called DX_Contrib.
I am releasing this project like all my others, complete with source.
It is my intention to initially maintain control over this project but to accept code snippets in vb.net (feel free to submit in c# if examples are short enough for me to translate without too much difficulty) and to include them for everyone's benefit.
I would like to say up front that at this early stage, I have no plans to honour backward compatibility in any way. However like all my plugins, I will not be deleting past version from my site.
In addition, I will be including the version number in the dll itself (thus the first version is DX_Contrib0.1.dll) and in this way allow past versions to work side by side with newer ones.
For Example, PaintIt v1.3 (the current latest version) uses v0.1 of DX_Contrib. (naturally enough). I have release both. Some developer 'A' might choose also to develop against v0.1 of DX_Contrib. Later I might decide, or indeed have it subtley pointed out with a sledgehammer, that a give method is either in the wrong class or a class is in the wrong namespace. At this time corrections and enhancements will be made and a new version will be released with version 0.2. This new dll will be called DX_Contrib
As I said, it is my init plan to maintain control of this myself, but if it proves in some way successful then I think we will have to consider sourceforge or some similar facility instead. :)
Feel free to submit code to me either by email or newsgroup for potential inclusion in a future version of this dll.
Oh yeah, if you don't already know, DX_Contrib and my other real(ish) plugins can be found at http://www.rorybecker.co.uk
I have spent the past couple of days refactoring PaintIt so as to extract the actual painting code (Including the ColorPicker and PaintPicker(yes they are crap names) from the Original PaintIt plugin and into a new Common Dll called DX_Contrib.
I am releasing this project like all my others, complete with source.
It is my intention to initially maintain control over this project but to accept code snippets in vb.net (feel free to submit in c# if examples are short enough for me to translate without too much difficulty) and to include them for everyone's benefit.
I would like to say up front that at this early stage, I have no plans to honour backward compatibility in any way. However like all my plugins, I will not be deleting past version from my site.
In addition, I will be including the version number in the dll itself (thus the first version is DX_Contrib0.1.dll) and in this way allow past versions to work side by side with newer ones.
For Example, PaintIt v1.3 (the current latest version) uses v0.1 of DX_Contrib. (naturally enough). I have release both. Some developer 'A' might choose also to develop against v0.1 of DX_Contrib. Later I might decide, or indeed have it subtley pointed out with a sledgehammer, that a give method is either in the wrong class or a class is in the wrong namespace. At this time corrections and enhancements will be made and a new version will be released with version 0.2. This new dll will be called DX_Contrib
As I said, it is my init plan to maintain control of this myself, but if it proves in some way successful then I think we will have to consider sourceforge or some similar facility instead. :)
Feel free to submit code to me either by email or newsgroup for potential inclusion in a future version of this dll.
Oh yeah, if you don't already know, DX_Contrib and my other real(ish) plugins can be found at http://www.rorybecker.co.uk
Tuesday, August 01, 2006
PaintIt v1.2
Ok version 1.2 of PaintIt is out. Well what are you waiting for? Download now from http://www.rorybecker.co.uk where full details of the changes can be found.
Subscribe to:
Posts (Atom)