Previous holidays was rather productive: I've made a lot of thing especially in programming and in study. That was a three good days. After that I've got not very good working week: I've studied a lot, made homework but that took a lot of time, I was tired and bored toward evening. As a result I haven't done much progress in my tasks.
So now are another holidays. This day wasn't rather productive, though I've made more than on workdays. And moreover my favorite football team FC Zenit became a champion of Russian Premier League!!! :)
Hope, next days (I haven't got study hours on Monday) will be more productive.
Sunday, November 11, 2007
Pragmatic Programmer
Pragmatic Programmer is a classic book for many programmers. It has valuable advices and techniques, which aren't linked to any language or environment, they are applicable to programming as it is, without any additional conditions.
I've read it in September and was highly delighted with it. I think there are two main things I've got from that reading: serious attention to automation and taking responsibility about your decision and having proud of your work.
I've read about automation before PP in "Code Complete" and understood it advantages, but didn't use it actively. Though in PP I haven't read anything new about it I've understood it better and decided to use it more.
Moreover authors of PP actively convince programmers to proud of their work, not think "it is the best program in the world!" but always left your sign on it, never lie that "it's not mine!", taking responsibility about its errors. It is applicable not only to programmers, but also other people who's work is about crafting something new.
I highly recommend PP to all programmers, who haven't read it already and for those who already has a copy of it to read it again, I'm sure you still can get something new from it. :)
I've read it in September and was highly delighted with it. I think there are two main things I've got from that reading: serious attention to automation and taking responsibility about your decision and having proud of your work.
I've read about automation before PP in "Code Complete" and understood it advantages, but didn't use it actively. Though in PP I haven't read anything new about it I've understood it better and decided to use it more.
Moreover authors of PP actively convince programmers to proud of their work, not think "it is the best program in the world!" but always left your sign on it, never lie that "it's not mine!", taking responsibility about its errors. It is applicable not only to programmers, but also other people who's work is about crafting something new.
I highly recommend PP to all programmers, who haven't read it already and for those who already has a copy of it to read it again, I'm sure you still can get something new from it. :)
Thursday, November 01, 2007
My Own Scripting Language for .NET Framework
I've wrote about dynamic languages and that they are good at combining already written components into full application. As I'm programming at C# now which isn't very laconic and simple language I have an idea of scripting language for .NET Framework. There are a lot of languages ported on it, among them: Python, Ruby, etc. But I still has an idea of implementing my own interpreter. It will be very useful in implementation of DSLs for my own applications. At least if I wouldn't be .NET programmer I'll get a lot of experience in developing interpreters. It's not a simple task but very interesting and useful.
Currently I'm working on library of common classes for .NET. I wasn't pleased with standard implementation because I didn't find a way for customization, e.g. changing path of saving configuration file.
Also there is a LogFile class, which implements DebugListener abstract class. I attach it to Debug to write down messages about errors.
P.S. I've passed all laboratory works in programming and think now I'll have more time for non-study programming.
Currently I'm working on library of common classes for .NET. I wasn't pleased with standard implementation because I didn't find a way for customization, e.g. changing path of saving configuration file.
Also there is a LogFile class, which implements DebugListener abstract class. I attach it to Debug to write down messages about errors.
P.S. I've passed all laboratory works in programming and think now I'll have more time for non-study programming.
Monday, October 29, 2007
My reason for blogging
Why I blog? There are some reasons, but they are connected with each over:
- Develop my skills in English language — many people think I'm rather good in English, but I think there is enough space for me to develop in this direction. May be my friend think that I'm good at English but this comes mush more from that they know it worse than me, not from that I'm good.
- Develop my speech writing capabilities. This is close to previous but it isn't connected to particular language. This is ability to shape idea into clear explanation. And the language is a tool to express it to others.
- Develop my mind. When I write about something I think about it. And what is more I watch this from different angles and have different points of view on it. As a result my brain works and moreover I could make my opinion about something having different points of view as a base. Overall blogging trains my brain so it will give ideas. And this links to previous reason: these ideas needs to be shaped into explanation.
- Specially for programming blog: by blogging I share my knowledge (if anybody is interested in it), that will help myself not to forget results of my programming experiments and of course as in previous reason while wring post I analyze topic and shape my opinion and develop me programming mind.
[Update] Well, as you see sharing knowledge isn't my goal. But I think that is a very good use of blogs. So in future I think I'll add this to my reasons. Probably after I'll train myself in English :-)
Winter session exams: Programming is already passed
It's not a secret that I love programming :). And I'm rather good at it. So I've decided not to wait end of semester to pass all laboratory works on programming and passed last this Saturday! 9 works in 8 weeks — good result I think. And I won't need to pass exam on it. Now I only need to make a documentation to my coursework. So now I'll have more free time. :)
Dynamic and static languages
As I've mentioned I'm reading a "Design Patterns" by Erich Gamma. Yesterday I've finished reading about structural patterns. I have to say that this book contributed a lot to my understanding of object-oriented programming, not only in a way of giving information about patterns, but also about whole programming. While reading I've often found examples of difference between dynamic programming languages and static ones.
In most cases dynamic languages looked better that static. Some methods hard to implement in static languages are easy to implement or built in dynamic languages: creating prototypes, changing behavior of object on-the-fly, programming by interface not implementation. It's not a secret dynamic languages such as Perl, Python, Ruby, etc. usually require less amount of code lines than static like C++. This mainly provided by different approaches to code handling: static languages are usually compiled, while dynamic are interpreted.
Dynamic nature of languages like Python provide rather wide abilities to work with classes and objects but in most cases programmers doesn't need available but rather low-level features (does we need very often put definition of function in if-statement?). And the cost is slow execution speed. Moreover if there is an error in program developer will know about it only when interpreter will reach this piece of code, while some of such errors could be caught during compilation.
As I think, is that in most cases interpreted languages are enough good for very big range of application what is proved by current trends in programming. But compiling languages still are rather popular. They are much better in implementing complex algorithms which uses a lot of resources. I agree with J. Ousterhout in article "Scripting", that static languages are useful for complex data structures from basic data types, which are often accompanied by low-level difficult to understand algorithms; and with dynamic (scripting) languages we can combine this elements to systems. Present dynamic languages (at least as I know Python and Ruby) provide an ability to plug into program modules written on C/C++. Thomas and Hunt in "Pragmatic Programmer" wrote a lot about DSL (Domain-Specific Languages). They can be thought as scripting languages with very tight integration into application. I think in future we can expect not only the expansion of using of dynamic languages but also developing of more tight integration between them and static languages.
In most cases dynamic languages looked better that static. Some methods hard to implement in static languages are easy to implement or built in dynamic languages: creating prototypes, changing behavior of object on-the-fly, programming by interface not implementation. It's not a secret dynamic languages such as Perl, Python, Ruby, etc. usually require less amount of code lines than static like C++. This mainly provided by different approaches to code handling: static languages are usually compiled, while dynamic are interpreted.
Dynamic nature of languages like Python provide rather wide abilities to work with classes and objects but in most cases programmers doesn't need available but rather low-level features (does we need very often put definition of function in if-statement?). And the cost is slow execution speed. Moreover if there is an error in program developer will know about it only when interpreter will reach this piece of code, while some of such errors could be caught during compilation.
As I think, is that in most cases interpreted languages are enough good for very big range of application what is proved by current trends in programming. But compiling languages still are rather popular. They are much better in implementing complex algorithms which uses a lot of resources. I agree with J. Ousterhout in article "Scripting", that static languages are useful for complex data structures from basic data types, which are often accompanied by low-level difficult to understand algorithms; and with dynamic (scripting) languages we can combine this elements to systems. Present dynamic languages (at least as I know Python and Ruby) provide an ability to plug into program modules written on C/C++. Thomas and Hunt in "Pragmatic Programmer" wrote a lot about DSL (Domain-Specific Languages). They can be thought as scripting languages with very tight integration into application. I think in future we can expect not only the expansion of using of dynamic languages but also developing of more tight integration between them and static languages.
Wednesday, October 24, 2007
My Example of Factory Method Pattern
I found rather useful reading a "Design Patterns" and found some examples of those patterns in programs I've written or read. And some days ago I've used one of the patterns - Factory Method.
What was the case? I've wrote two types of collections for C#: Vector (casual array) and LList (Linked List). They have the same interface ISequence and sane base abstract class SequenceBase which implements most of operations leaving virtual only basic operations, such as Insert, Remove, etc. And I wanted to have tests for all methods for both implementations. I'm using NUnit, and I didn't wanted to have two test classes with identical content, in except of operation new. So what I've made:
Whats is good, as I think, is that such an approach could be used to test all implementations of each interface. Write tests for interface in abstract class, write tool to search implementations and generate required test classes and you can be sure that this interface work well in all cases, or in other case you get a pointer(s) to error(s).
I think I'll try to use this approach in my practice and write such a tool to make concrete classes for tests of interface implementations.
Off-topic: While writing this post I again faced the question: why implement array and linked list with same interface? The difference in the way they work make some operations unsuitable for one type while be good for other, so why include these operation in common interface? I think it's the question worth its own article, so I'll explore this question in future.
What was the case? I've wrote two types of collections for C#: Vector (casual array) and LList (Linked List). They have the same interface ISequence and sane base abstract class SequenceBase which implements most of operations leaving virtual only basic operations, such as Insert, Remove, etc. And I wanted to have tests for all methods for both implementations. I'm using NUnit, and I didn't wanted to have two test classes with identical content, in except of operation new. So what I've made:
- Wrote an abstract class with all test cases (e.g. SequenceTester). All test methods have their Test tag.
- Class defines an abstract method Instance, which returns an object of tested interface, ISequence in my case.
- In all test methods I use Instance instead of operation new.
- For each tested class I define a test class derived from SequenceTester. In have to implement only Instance method that returns an instance of tested class and tests for an implementation of interface is ready!
Whats is good, as I think, is that such an approach could be used to test all implementations of each interface. Write tests for interface in abstract class, write tool to search implementations and generate required test classes and you can be sure that this interface work well in all cases, or in other case you get a pointer(s) to error(s).
I think I'll try to use this approach in my practice and write such a tool to make concrete classes for tests of interface implementations.
Off-topic: While writing this post I again faced the question: why implement array and linked list with same interface? The difference in the way they work make some operations unsuitable for one type while be good for other, so why include these operation in common interface? I think it's the question worth its own article, so I'll explore this question in future.
Monday, October 15, 2007
What I've done and haven't done
Firstly, I had written this post to my software blog, but then I've decided that it isn't software-specific and should be posted here. However I'm too lazy to revise it and remove "programmisms" from beginning part.
It is useful sometimes to take a pause and look at what you wanted to make some time ago, what you have done, what you are doing, what's the progress on it and what you want to do.
What I've wanted and what's the result?
It is useful sometimes to take a pause and look at what you wanted to make some time ago, what you have done, what you are doing, what's the progress on it and what you want to do.
What I've wanted and what's the result?
- I've wanted to pass all these labs in different subjects. Success.
- Successfully finish study at courses of databases. Success.
- Daily read news from internet. Successful in whole, thought I've sacrificed some news-feeds because it is too hard to read 'em all. Success (may be not full, not sure)
- Regularly write to my blog (now I have two blogs). Not very good results: I don't write much to them. Thought I haven't dropped and forgotten them, so Partial Success.
- I've wanted to read a lot of books. From those in list I've read only "Code Complete". But I've read two another books: about C# and "Pragmatic programmer" (Aahh, I haven't written about that! Need to fix that in near future!). And now I'm reading "Design Patterns". And I really want to read any book about UML. Result: All in all I think that's a success, however not following first plan.
- Write some software to practice. During summer I worked on Egnoly text editor. And now I continue to work with .NET Framework, have some projects in mind and write some code for libraries on C#. Success, not 100% but about 90%... :) Or I'm not objective and too love myself??? May be...
- I still haven't got a girlfriend. It isn't programming of course but has an effect on mind and mental condition.
- I still have got chaos on shelves I don't use regularly. Terrible, but there is a relative order on my desk :)
- I haven't made my programming language. May be I'm too young for that. But this idea still in my head and don't want to go away, instead it becomes stronger and stronger after reading Pragmatic Programmer.
- I wanted to use Test-Driven Development, nut still don't use it actively. However I regularly try to write tests for my applications. And they give the result! So I think that's a matter of time. May be I'll not become a TDD programmer, but the one who actively and properly uses tests. Result: 40% of Success.
- I've taught myself to actively use scheduling. Now I use not a calendar but a Todoist and I often don't follow it but I've already have a place where my wishes and plans on this day are written.
- Something more that a achieved and haven't achieved. Couldn't remember all of them.
What I'm doing by now?
- Studying
- Writing some soft on C#, not very useful, but some practice
- Also reading Design Patterns: useful book, sure I'll write review about it!
- Participating in open source project Battle for Wesnoth as a translator.
What I want?
- Make such list and judgement of results rather regular.
- Follow schedule that I'm making for myself. And make this schedule more wisely and realistic!
- Develop my relations with human beings :). I don't want to communicate only with computers.
- Still want to make scripting programming language.
- Write software on C#: develop Egnoly, common stuff for .NET, and something new, i.e. tool to synchronise my desktop PC and laptop.
- Study well in university.
- Continue and develop my participation in OSS projects. May soon I'll be able to contribute to Wesnoth as a programmer? Or contribute to another project either as a programmer or translator.
- Start project with my fellows. There is no concrete plans on it, now it's a long-distance target.
[Update] Add target to communicate more with people. Just forgot about it :(.
Labels:
books,
planning,
programming,
self discipline,
study,
thoughts
Thursday, October 11, 2007
Some major tasks for close period finished
During last week I've spent much time visiting hospital and passing some physical examinations. It took rather a lot of time especially because of long distance between my home and hospital.
During last weekend I've made a lot of study work and for now has lesser major tasks to do. I've done functionality of my coursework on programming and now need to make program look good and make report for it.
Coursework is one of big projects that lasts more than a few days. What other big projects do I have? At first it is reading books. Now I'm reading "Design Patterns" about programming. My programming projects got some attention on last week but on this week they have lacked it. Hope I'll correct this in next days.
Eh... No any ideas more for now, I'm going to sleep... I've slept rather a small time during last days.
During last weekend I've made a lot of study work and for now has lesser major tasks to do. I've done functionality of my coursework on programming and now need to make program look good and make report for it.
Coursework is one of big projects that lasts more than a few days. What other big projects do I have? At first it is reading books. Now I'm reading "Design Patterns" about programming. My programming projects got some attention on last week but on this week they have lacked it. Hope I'll correct this in next days.
Eh... No any ideas more for now, I'm going to sleep... I've slept rather a small time during last days.
Sunday, October 07, 2007
Implementing custom tool in Visual Studio 2008
I've recently wrote about making tool to generate C# code. We may say that are macros for C# (it fact it is only one defined macro — for fields and properties).
And how to implement this tool? There can be two ways: write tool on scripting language that generates C# code file and is called before compilation. Another way is to use ability of Visual Studio to switch user custom tool for generating files. Firstly I've implemented tool by first way on Python and now I want to make a custom tool for Visual Studio written on C#. But how to plug custom tools in Visual Studio? Now I've got an answer, though I've spent much time to understand this.
Firstly, to develop plug-ins for Visual Studio it is needed to download Visual Studio SDK (for appropriate version of Visual Studio). I have to say that after installing it my Visual Studio 2008 Beta 2 became very unstable: IntelliSense regularly produces errors which crashes the whole Visual Studio.
After that Visual Studio will add templates of its addins. That's a base for future project (although may be addin can be created without all that stuff that is in template).
To make custom tool for generation of files the one must implement IVsSingleFileGenerator interface. I've spent a lot of time trying to make this and fails mainly because if this problem: in some places of documentation it is said that function generate gets a parameter of type out IntPtr[], in some it is said that it is out IntPtr and in fact interface has just IntPtr[]. Not any out! So how should I return value of pointer? Ok, I'm not a great specialist in .NET and arrays a sent be reference. Even if this is not a problem why there is an array not one pointer? Another outgoing parameter of function on exit must contain an amount of bytes in that array but how this will help if I'll allocate a different amount of bytes in different pointers in array. However I don't see a use for an array and just tried to allocate it and use only index 0. But this doesn't helped me and I failed in implementing that interface. May be that a bug in SDK and interface must have out IntPtr[]? Don't know I'm not a guru in Visual Studio.
I've failed to get a proper answer from MSDN documentation and my attempts so I've googled this problem.I've found some solutions but the most notable part is that in Visual Studio 2003 there was an abstract class which covered that horrible interface under much more comfortable interface. However "evil" Microsoft removed that class from version 2005. But good guys placed dll with it in Internet, i.e. here. So It's needed to implement function GetCode from that class and tool is ready to use!
However it is still needed to plug it in Visual Studio. First step is to register it as a package. This can be done by tool regpkg. It is placed in <%MVS SDK Dir%>\Tools\Bin\ directory. Just run it with a path to our compiled tool as a argument. This step can also be done manually,
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\<%MVSVersion%>\CLSID\{<%guid%>}]
@=<%Tool name%>
"InprocServer32"="C:\\WINDOWS\\system32\\mscoree.dll"
"ThreadingModel"="Both" "Class"=<%class name of tool%>
"Assembly"="<%asm name%>, Version=<%asm version%>, Culture=<%culture%>, PublicKeyToken=<%public key%>"
As you may noticed custom tool must be in GAC. May be there is a way to keep it somewhere else but I don't know.
What is next? Registered custom tool need to be registered as a generator. In registry dir of Visual Studio there is a directory Generators. There is some dirs in it: FA... is a C#, 16... is a VB.NET. It is needed to register tool for each language separately. In directory of proper language add directory with name of your tool, i.e. for my tool called CSGen:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators\{fae04ec1-301f-11d3-bf4b-00c04f79efbc}\CSGen] @="CSGen tool to generate code on C#"
"CLSID"="{<%clsid registed in \CLSID\%>}"
"GeneratesDesignTimeSource"=dword:00000001
After that start Visual Studio choose file in project and in properties type name of custom tool. After each save file will be regenerated. It is also can be forced manually: right-click on file in Solution Explorer and "Run custom tool".
These articles with examples could be helpful (I'm not a good explainer, just learning):
And how to implement this tool? There can be two ways: write tool on scripting language that generates C# code file and is called before compilation. Another way is to use ability of Visual Studio to switch user custom tool for generating files. Firstly I've implemented tool by first way on Python and now I want to make a custom tool for Visual Studio written on C#. But how to plug custom tools in Visual Studio? Now I've got an answer, though I've spent much time to understand this.
Firstly, to develop plug-ins for Visual Studio it is needed to download Visual Studio SDK (for appropriate version of Visual Studio). I have to say that after installing it my Visual Studio 2008 Beta 2 became very unstable: IntelliSense regularly produces errors which crashes the whole Visual Studio.
After that Visual Studio will add templates of its addins. That's a base for future project (although may be addin can be created without all that stuff that is in template).
To make custom tool for generation of files the one must implement IVsSingleFileGenerator interface. I've spent a lot of time trying to make this and fails mainly because if this problem: in some places of documentation it is said that function generate gets a parameter of type out IntPtr[], in some it is said that it is out IntPtr and in fact interface has just IntPtr[]. Not any out! So how should I return value of pointer? Ok, I'm not a great specialist in .NET and arrays a sent be reference. Even if this is not a problem why there is an array not one pointer? Another outgoing parameter of function on exit must contain an amount of bytes in that array but how this will help if I'll allocate a different amount of bytes in different pointers in array. However I don't see a use for an array and just tried to allocate it and use only index 0. But this doesn't helped me and I failed in implementing that interface. May be that a bug in SDK and interface must have out IntPtr[]? Don't know I'm not a guru in Visual Studio.
I've failed to get a proper answer from MSDN documentation and my attempts so I've googled this problem.I've found some solutions but the most notable part is that in Visual Studio 2003 there was an abstract class which covered that horrible interface under much more comfortable interface. However "evil" Microsoft removed that class from version 2005. But good guys placed dll with it in Internet, i.e. here. So It's needed to implement function GetCode from that class and tool is ready to use!
However it is still needed to plug it in Visual Studio. First step is to register it as a package. This can be done by tool regpkg. It is placed in <%MVS SDK Dir%>\Tools\Bin\ directory. Just run it with a path to our compiled tool as a argument. This step can also be done manually,
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\<%MVSVersion%>\CLSID\{<%guid%>}]
@=<%Tool name%>
"InprocServer32"="C:\\WINDOWS\\system32\\mscoree.dll"
"ThreadingModel"="Both" "Class"=<%class name of tool%>
"Assembly"="<%asm name%>, Version=<%asm version%>, Culture=<%culture%>, PublicKeyToken=<%public key%>"
As you may noticed custom tool must be in GAC. May be there is a way to keep it somewhere else but I don't know.
What is next? Registered custom tool need to be registered as a generator. In registry dir of Visual Studio there is a directory Generators. There is some dirs in it: FA... is a C#, 16... is a VB.NET. It is needed to register tool for each language separately. In directory of proper language add directory with name of your tool, i.e. for my tool called CSGen:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators\{fae04ec1-301f-11d3-bf4b-00c04f79efbc}\CSGen] @="CSGen tool to generate code on C#"
"CLSID"="{<%clsid registed in \CLSID\%>}"
"GeneratesDesignTimeSource"=dword:00000001
After that start Visual Studio choose file in project and in properties type name of custom tool. After each save file will be regenerated. It is also can be forced manually: right-click on file in Solution Explorer and "Run custom tool".
These articles with examples could be helpful (I'm not a good explainer, just learning):
Labels:
automation,
C#,
microsoft,
programming,
source code,
visual studio,
workspace
Wednesday, October 03, 2007
Tool to generate code on C#
While reading in "Pragmatic programmer" chapter about automation I've formed an idea of creating a tool for C# which will reduce amount of manual typed code and as a result help to avoid errors.
Now I've got only one idea for this tool, but maybe in future I've got some more. So that's an idea? In many cases I've needed to create a public property and private field to keep value of property. In some cases I also need to create an event which will happen when value of property is changed. It is a lot of similar typing work. Of course it can be made easier by Visual Studio snippets and I've used them, but this still leaves much work during maintenance:
Is an original code on C#. Most of these tokens are just speaking what is already said by others. It can be replaced by just one line:
Note that name is written not as identifier but as a casual name. My tool automatically forms valid identifiers for field, property and event. And if field is renamed all identifiers are changed by program not by programmer. Moreover 10 lines are replaced by 1! Of course not in all cases such tool can give so good results.
Moreover my tool already can read some parameters of created field. Want to have set be private? No problem:
And tool will make the rest. The same way I can command it not to generate event (and of course not to call it!). Of course both options can be combined together.
My tool (arrrhhh... I call it csgen!) also provides basic customization to format of output identifiers. But now csgen couldn't make complex generations. In some cases it is needed to manually create all of this code on C#.
Though I nave some ideas of making csgen more useful. For example if set needs to check incoming value. Just add to description something like: // @Field: set requires Checker.IsValid(value) and throw an ArgumentException in case of invalid value. To implement this feature I csgen will need all text after requires and paste it into if condition. Moreover in such way can be implemented some other features.
But there will be a problem: compiler will point to errors in generated code and show its line numbers. So programmer have to read faulty code in generated file and then match it with content of original file and fix errors there. Not very good.
However to finish on good news I have to say that tried to implement this feature as a 'custom tool' in Visual Studio. I'll soon write post about it, but I can say that succeeded to write module that returns IDE text and it works with it!
Now I've got only one idea for this tool, but maybe in future I've got some more. So that's an idea? In many cases I've needed to create a public property and private field to keep value of property. In some cases I also need to create an event which will happen when value of property is changed. It is a lot of similar typing work. Of course it can be made easier by Visual Studio snippets and I've used them, but this still leaves much work during maintenance:
- while renaming I need to rename field, property and if exists event. Of course refactoring capabilities of IDE free me from necessity to search of uses of this names, but I still have to rename 2-3 elements of class.
- I have to have separate snippets to cases when I don't want to have an event, or want to make set private. Also when this details are changed during refactoring it is needed to make them by hand.
- It takes a lot of locs. If it be possible to write all of necessary data in one line it will be much better to read and understand.
public event EventHandler DoubleFieldChanged;
private double _doubleField;
public double DoubleField {
get { return _doubleField; }
set {
this._doubleField = value;
if ( this.DoubleFieldChanged != null )
this.DoubleFieldChanged(this, new EventArgs());
}
}
Is an original code on C#. Most of these tokens are just speaking what is already said by others. It can be replaced by just one line:
// @Field double Double Field
Note that name is written not as identifier but as a casual name. My tool automatically forms valid identifiers for field, property and event. And if field is renamed all identifiers are changed by program not by programmer. Moreover 10 lines are replaced by 1! Of course not in all cases such tool can give so good results.
Moreover my tool already can read some parameters of created field. Want to have set be private? No problem:
// @Field double Double Field( private set )
And tool will make the rest. The same way I can command it not to generate event (and of course not to call it!). Of course both options can be combined together.
My tool (arrrhhh... I call it csgen!) also provides basic customization to format of output identifiers. But now csgen couldn't make complex generations. In some cases it is needed to manually create all of this code on C#.
Though I nave some ideas of making csgen more useful. For example if set needs to check incoming value. Just add to description something like: // @Field: set requires Checker.IsValid(value) and throw an ArgumentException in case of invalid value. To implement this feature I csgen will need all text after requires and paste it into if condition. Moreover in such way can be implemented some other features.
But there will be a problem: compiler will point to errors in generated code and show its line numbers. So programmer have to read faulty code in generated file and then match it with content of original file and fix errors there. Not very good.
However to finish on good news I have to say that tried to implement this feature as a 'custom tool' in Visual Studio. I'll soon write post about it, but I can say that succeeded to write module that returns IDE text and it works with it!
Labels:
automation,
C#,
programming,
source code,
visual studio
Sunday, September 30, 2007
I've found free time!
Yeah... During last days I've spent rather a lot of time doing non-university work. Although it was programming and nothing more. Not very good for psyche for now I have no ideas what to do else. Moreover I've broke up with girl friend a month ago, so I've even didn't meet any friend in September (in except of in university). Eh... Sp for mow I've only have the ability to sit behind my computer until 2 o'clock at night...
Tuesday, September 25, 2007
Some free time coming?
It's the end of September and I'm rising my study activity. On last Saturday I've passed two laboratory works in programming and today I've passed one work in physics. Badly only for 4 points from 5. But that was a result of that I didn't remember one formula, so I'll try in future to understand information better.
Also I've finished reading book "Pragmatic programmer". I think the next book will be "Design Patterns". It content looks rather good and was mentioned some times in PP.
Also at these days I'm collecting some medical documents for me to be approved as unsuitable to serve in Russian Army. It's makes some problems because I need to visit a lot of organizations only to be sent to organization of lower level.
Thought, I hope in close time I'll finally could make me give myself more free time from university study. Apparently writing this post is a result of that intention. :-)
Also I've finished reading book "Pragmatic programmer". I think the next book will be "Design Patterns". It content looks rather good and was mentioned some times in PP.
Also at these days I'm collecting some medical documents for me to be approved as unsuitable to serve in Russian Army. It's makes some problems because I need to visit a lot of organizations only to be sent to organization of lower level.
Thought, I hope in close time I'll finally could make me give myself more free time from university study. Apparently writing this post is a result of that intention. :-)
Monday, September 17, 2007
Pareto principle
Pareto principle is a well-known rule of effectiveness. It also called 80-20 rule. In brief: you get 80% of result from 20% of effort.
It means that to get good result you don't need to work very hard. Just work and do only necessary things. To use computer you don't need to know details of its construction, you only need to know it's user manual. Of course knowledge of it's CPU specifications can make you a better user but in most cases it is spare. You need much lesser time to get most important knowledge than to become an expert. And the use of Pareto principle is that you don't need to be an expert in most cases. But what is also very useful: you can get a lot by little effort. So even if you read a small book about unknown theme you can get rather much knowledge.
Of course that don't mean that you needn't to be an expert at all. I think to be successful you need to be an expert in something. For example in getting much knowledge without great efforts... Or, what is much better, be an expert in living your life.
It means that to get good result you don't need to work very hard. Just work and do only necessary things. To use computer you don't need to know details of its construction, you only need to know it's user manual. Of course knowledge of it's CPU specifications can make you a better user but in most cases it is spare. You need much lesser time to get most important knowledge than to become an expert. And the use of Pareto principle is that you don't need to be an expert in most cases. But what is also very useful: you can get a lot by little effort. So even if you read a small book about unknown theme you can get rather much knowledge.
Of course that don't mean that you needn't to be an expert at all. I think to be successful you need to be an expert in something. For example in getting much knowledge without great efforts... Or, what is much better, be an expert in living your life.
Asciidoc
I've recently found new tool for me: asciidoc. It is intended to create documentation in various formats from plain text. What is good that markup elements are not like but more simple symbols so text can be easily written and read without conversion to other formats. I think I'll find use for asciidoc in my projects. Documentation is always needed.
Labels:
automation,
programming,
review,
source code,
workspace
Sunday, September 16, 2007
Again and again: where is time?
So I've recently written that I have a lot of work and now I've realized that now I couldn't find time for my own activities, i.e. programming. I was constantly working during this week and made a lot of work, but it all was about university. And next week doesn't promise to be different. What to do? How to make all university staff and made something for yourself? Again I meet this problem. Of course "myself" isn't only programming, it is also other thing but this is the first about which I think. Tomorrow I will visit big book market with my friend. It is better than sitting at home all day.
What to do?
And also about my current activities: some of my time is spent on working with book for one of our professors. He has a book about his subject but it exists only in one instance. So I've scanned it and now make text recognition. Rather dull work because my OCR is rather simple (but free).
And idea of a day: Do something meaningful :)
What to do?
- Firstly, now I'm actively using Todoist to manage my tasks and time arrangement. I still couldn't use calendars or organizers but I found a good use for that simple webapp.
- On next week I'll try to find time to do something that is not-university. Surely it will be some programming (and what you awaited from me? :).
- May be found some non-computer activity? Or at least non-programming? I couldn't guess what it can be.
And also about my current activities: some of my time is spent on working with book for one of our professors. He has a book about his subject but it exists only in one instance. So I've scanned it and now make text recognition. Rather dull work because my OCR is rather simple (but free).
And idea of a day: Do something meaningful :)
Labels:
day-by-day,
planning,
programming,
thoughts,
university
Wednesday, September 12, 2007
A lot of work
Eh... I've started new studying year, and now have a lot of homework. And I'm trying to do it as soon as possible. Before new tasks will come. For a previous day I haven't found a time for programming, but hope soon I'll allocate my time better and find some time for my hobbies :). And I've bought book "Pragmatic programmer" by Andy Hunt and Dave Thomas!
Update: add a link to http://www.pragmaticprogrammer.com/ on book title.
Update: add a link to http://www.pragmaticprogrammer.com/ on book title.
Monday, September 03, 2007
Home network
As I've already posted I had bought a notebook. An now I'm writing from it. I get a wifi card to my desktop computer. It's a D-Link DWL-G510. Both notebook and card supports 802.11g so I've expected rather speedy communication (54 Mbps). I've got it. But only after some "adventures".
However after a lot of clicking-and-typing I've got my computers connected in a network. But there was another problem: I wanted my notebook to be connected to internet through desktop PC. I shared my internet connection on it, as my friend advised, but this gave me nothing. After some stumbling with that problem I found that the solution is to set correct IP-addresses on wireless connection on notebook. May be something is spare but for know I haven't got a desire to make new experiments: set DNS-server IP to same as in internet connectio; set mane gateway to IP-address of wifi-card on desktop. After that my connection started to work!
I have to say that there is no significant slowdown on working with internet on notebook. Despite added wireless connection all works fine and rather fast. Sometimes there are pauses in connection to internet but they also exist on desktop so I think they are the result of a work of an ISP (or my software).
All in all I'm pleased that I've got a wireless connection at home and now can work with internet both on PC and notebook.
Thursday, August 30, 2007
My notebook
Today I have bought a notebook. It's an Acer Extensa 5610. And it is with Vista Home Premium. So soon I will be able to say me opinion about Vista. At first it looks impressively. I hope my new notebook will improve my productivity: now I'm not wired to any particular workplace and can even work in university in my preferred environment.
Soon I'll write about my first impressions!
Soon I'll write about my first impressions!
Friday, August 24, 2007
My source code library
Next programming book I want to read is "The Pragmatic Programmer" by A. Hunt and D. Thomas. While watching through it I found advice: "Never drop to garbage not-working or unused code. It will help you to avoid same mistakes" (of course that isn't very exact cite). So I've take my step to keep my knowledge base — I've started on Google Code my own project. There I'll keep my code, feeling sure that it will not disappear with hard-drive crush. And also, I'll have access to it from any place, that will have internet connection. Rather useful.
Google search through source code is also can be good to find information.
Google search through source code is also can be good to find information.
My recent .NET programming
A month ago I was writing about bugs in Visual Studio 2008 Beta 2. All in all I've escaped trouble and for a month I was using it. Professional edition to be exact. Of course when the Beta will expire I'll be forced to move to free Express Edition. And know I'm studying .NET and C#.
Book of Andrew Troelsen is almost at the end: only 2.5 chapter remain for me. They are all about ASP.NET and Web.
Moreover my text editor became much better. Though it is still have not vast functionality. I have an idea of turning it into IDE for any computer language (Python and Ruby are first candidates), but as I think this is not the matter of near future.
Programming for .NET on C# was good and effective, though there are some things that I don't like in it and want to replace them by equivalents from scripting languages. Of course that relates to new computer language. I made it to parse arithmetic expressions with integer numbers and make *.exe file that performs all these calculations. Not very much and I've stopped on trying to implement print function. The problem is not in the implementing particular built-in function but much more in whole mechanism of implementing functions. I've decided not to make thinking about it, but to take a pause. Though this idea firmly seats in my head so I think I'll return to it after gaining some experience. And moreover I'll need some time to feel pace of study on second year!
Furthermore now I'm working on .NET library to create diagrams. I've wanted to have one to make colourful diagrams from my data which is output from scripts, not in Excel format. For now it already can make proper diagram! So in future I need to add much more customisation to it.
Moreover, I've tried Ruby. It looks rather interesting and has simple solutions for problems which I've already faced in other languages(and not yet faced). I'll study it more deeply and try use it in my projects. For now if I need to make some routine tasks I prefer Python. Hope in near future I'll write more on computer languages.
— Buy! :)
Book of Andrew Troelsen is almost at the end: only 2.5 chapter remain for me. They are all about ASP.NET and Web.
Moreover my text editor became much better. Though it is still have not vast functionality. I have an idea of turning it into IDE for any computer language (Python and Ruby are first candidates), but as I think this is not the matter of near future.
Programming for .NET on C# was good and effective, though there are some things that I don't like in it and want to replace them by equivalents from scripting languages. Of course that relates to new computer language. I made it to parse arithmetic expressions with integer numbers and make *.exe file that performs all these calculations. Not very much and I've stopped on trying to implement print function. The problem is not in the implementing particular built-in function but much more in whole mechanism of implementing functions. I've decided not to make thinking about it, but to take a pause. Though this idea firmly seats in my head so I think I'll return to it after gaining some experience. And moreover I'll need some time to feel pace of study on second year!
Furthermore now I'm working on .NET library to create diagrams. I've wanted to have one to make colourful diagrams from my data which is output from scripts, not in Excel format. For now it already can make proper diagram! So in future I need to add much more customisation to it.
Moreover, I've tried Ruby. It looks rather interesting and has simple solutions for problems which I've already faced in other languages(and not yet faced). I'll study it more deeply and try use it in my projects. For now if I need to make some routine tasks I prefer Python. Hope in near future I'll write more on computer languages.
— Buy! :)
Labels:
C#,
egnoly,
microsoft,
programming,
up,
visual studio
University is coming
That was a long time since I've write last time. And my new study year is coming soon. Now I'm having a two-week vacation. And relax at home. Err.. relax means do some programming :). I've made something that is text editor. May be i near future I'll advance it be something like IDE for a computer language. But I don't know which language :(. Or may be I should better just use Eclipse and Visual Studio? All in all, if even my text editor will never be useful, I already have got some experience from it.
Moreover I've joined team of developers of computer game Battle for Wesnoth... not as a programmer, but as a Russian translator. Who knows... may be in future I'll help as a programmer. But future is in future and now is today :).
Hey! And soon is my birthday — 18 years!
Moreover I've joined team of developers of computer game Battle for Wesnoth... not as a programmer, but as a Russian translator. Who knows... may be in future I'll help as a programmer. But future is in future and now is today :).
Hey! And soon is my birthday — 18 years!
Thursday, August 02, 2007
Microsoft Visual Studio 2008 Beta 2 — too bugy
I've recently started to try latest release of upcoming Visual Studio 2008 — Beta 2. But I found it having much problems on my system: Visual C# Express Edition crashed on compiling of my project and I've needed to reinstall it. After installing Express Editions I've tried to install Professional version. After installing MSDN I've experienced problems with my context menus in explorer — Explorer was just crashing after right mouse click. Of course may be not MSDN was a source of problem, but all in all I was needed to Recover my system. And what is more Professional stopped in the end and even refused to perform command to abort installation. After that I've recovered my system to morning state.
What is more bad, that now Visual Studio refuses to load my projects! I again trying to reinstall it... I've liked C# and .NET Framework (not in all, but in whole) and I'm wanting to program on them more, but... May be the solution is to come back from Visual Studio 2008 (all in all it is beta) to 2005. Another way is to practice on Java. The latter is better in aspect of migrating to another platforms, for example of I would want to work on Linux more that now (now it is equivalent to zero...)
Morale? I was trapped by my aptitude to use the latest versions of software... It isn't problem in many cases but not in that...
What is more bad, that now Visual Studio refuses to load my projects! I again trying to reinstall it... I've liked C# and .NET Framework (not in all, but in whole) and I'm wanting to program on them more, but... May be the solution is to come back from Visual Studio 2008 (all in all it is beta) to 2005. Another way is to practice on Java. The latter is better in aspect of migrating to another platforms, for example of I would want to work on Linux more that now (now it is equivalent to zero...)
Morale? I was trapped by my aptitude to use the latest versions of software... It isn't problem in many cases but not in that...
Labels:
microsoft,
programming,
visual studio,
workspace
Tuesday, July 24, 2007
Writing a book
That could sound weirdly, but I started to write a book. I was writing only for one evening, so I couldn't even say if I will be writing it regularly or it's just a short-time activity. The book isn't about computers, it a fiction book in fantasy genre. I even couldn't understand about what is it. I can only say that it is about 3 friends :)
Ubuntu — first try
Recently I've tried to use Ubuntu Feisty Fawn. On virtual machine.
I've tried Linux and FreeBSD a few times before. Not very successful. Though I have to say that these attempts make my brain to think how to use, not just simply "install and use". However I wasn't able to move from familiar Windows environment to unknown *nix.
Some days ago I've decided to try Ubuntu on virtual machine. I've used two of them: VM and VirtualBox.
VirtualBox was the first. What was bad: progress bar of user interface which must be orange was instead almost invisible. But that is not serious bug. Much worse was that while installing OS on virtual HDD it failed on some step without any warning and I wasn't able to start OS from hard drive, the only choice was live-cd but that is not very good because I need to install some software on my OS to feet my purposes.
Then I've tried VM player. It hadn't got problems with progress bar and it installed successfully and now I can run it from virtual HDD. But... I couldn't find how to switch my audio card to OS (that was rather easy on VirtualBox) and, what is much more worse, it had problems with Internet. Internet is too much important for me to use OS without access to it.
As a result of this faulty attempts I've putted Ubuntu on virtual machine in a long-term box and decided.... to try it on real machine. I've already wrote that I'm studying C# now, so I don't think I could leave Windows for a long time, but I could try Ubuntu as an OS for browsing Internet :) Time will show...
I've tried Linux and FreeBSD a few times before. Not very successful. Though I have to say that these attempts make my brain to think how to use, not just simply "install and use". However I wasn't able to move from familiar Windows environment to unknown *nix.
Some days ago I've decided to try Ubuntu on virtual machine. I've used two of them: VM and VirtualBox.
VirtualBox was the first. What was bad: progress bar of user interface which must be orange was instead almost invisible. But that is not serious bug. Much worse was that while installing OS on virtual HDD it failed on some step without any warning and I wasn't able to start OS from hard drive, the only choice was live-cd but that is not very good because I need to install some software on my OS to feet my purposes.
Then I've tried VM player. It hadn't got problems with progress bar and it installed successfully and now I can run it from virtual HDD. But... I couldn't find how to switch my audio card to OS (that was rather easy on VirtualBox) and, what is much more worse, it had problems with Internet. Internet is too much important for me to use OS without access to it.
As a result of this faulty attempts I've putted Ubuntu on virtual machine in a long-term box and decided.... to try it on real machine. I've already wrote that I'm studying C# now, so I don't think I could leave Windows for a long time, but I could try Ubuntu as an OS for browsing Internet :) Time will show...
Thursday, July 19, 2007
Texter
I've found a good tool from Lifehacker: Texter. What does it do? It watches on input from keyboard and if it find special combination of symbols it replaces if with text snippet. For example I've setted replace MS with Microsoft. So bow I don't need to type full name but only some letters by the result is the full name not the acronym.
This application can be extremely useful in programming if your editor doesn't support code snippets (or supports them badly, or you want to share snippets between different application without some "import/export"). These can be not just simple snippets but full templates of code.
What is more Texter support bundles: groups of text replacements that can be exported and imported. So if you can share your bundles with your friends and colleagues.
And finally: Texter can perform not just text replacement but scripts: it can imitate key commands (for example Tab). This can be useful when filling some forms in which you definitely know tab order of fields.
In conclusion I think Texter is rather a good tool (it provides statistics on how much letters was replaced and how much time this saved to you).
Links:
This application can be extremely useful in programming if your editor doesn't support code snippets (or supports them badly, or you want to share snippets between different application without some "import/export"). These can be not just simple snippets but full templates of code.
What is more Texter support bundles: groups of text replacements that can be exported and imported. So if you can share your bundles with your friends and colleagues.
And finally: Texter can perform not just text replacement but scripts: it can imitate key commands (for example Tab). This can be useful when filling some forms in which you definitely know tab order of fields.
In conclusion I think Texter is rather a good tool (it provides statistics on how much letters was replaced and how much time this saved to you).
Links:
- Lifehacker [Site with tips and downloads for getting things done]
- Texter [text substitution app]
Thursday, July 12, 2007
Butterflies
There is a popular story about ugly duck who became a swan. There is also a popular example of such transformations: caterpillars become butterflies. What most of us think about caterpillars? They are ugly and nasty. I hate them. Especially when they are on my fruits... :( Some caterpillars become insects which are also nasty, but some caterpillars become beautiful butterflies. Don't you think we can say the same about people? Some become "butterflies" (good people?), some become disgusting bugs (bad people?), and others, probably most of people, become other insects, for example hard-working people can be compared with bees...
What's the morale? When you look at a young person look at what she "eats": that's will be a building material for her mind and personality during period of cocoon. If she eats mostly not good building material (rudeness, abuse language, violence, and lack of culture, etc.) then we will get another "bad brick" in our society. If she fills herself with something good (mind training, some books that may be are idealistic but shape mind in a way useful for society, etc) then we will get "good brick" in society. Or not the brick but mason?..
What's the morale? When you look at a young person look at what she "eats": that's will be a building material for her mind and personality during period of cocoon. If she eats mostly not good building material (rudeness, abuse language, violence, and lack of culture, etc.) then we will get another "bad brick" in our society. If she fills herself with something good (mind training, some books that may be are idealistic but shape mind in a way useful for society, etc) then we will get "good brick" in society. Or not the brick but mason?..
Monday, July 09, 2007
Egnoly Text Editor
For about one year ago, I bought my first book about programming — it was "C++ How to Program" by H.M.Deitel and P.J.Deitel. I've read 4th edition and now they are preparing to publish 6th edition. I think that's rather a good book for starter, all in all I've learned much from it, in despite of that it is about C++ — not very easy language. For that year I've learned basics of Python, Perl, Java, Ada, C#, Visual Basic and in university I've studied Turbo Pascal for one year. All of I've programmed were console applications. The only exception was working with Microsoft Access on courses were I used VB for modules, but that was not "normal" programming of GUI — all in all it is Access not Visual Studio. And after the year of programming I've changed the situation.
Now I'm working in Visual Studio on my first "normal" GUI application — text editor which I've called Egnoly. I'm writing it on C#. Yesterday I finished first version of it (0.0.1). It can open and save file. Plus built in Windows Forms TextBox class abilities of cut/copy/paste. Not very much. But it works! Moreover development GUI apps is rather unfamiliar task for me, so Egnoly hasn't any tests written and strong system of exceptions. Furthermore I don't know C# well.
To resolve the last problem I've bought Andrew Troelsen "Pro C# 2005 and the .NET 2.0 Platform, Third Edition". I think after reading it I'll be comfortable with developing GUI, e.g. modifying classes from System.Windows.Forms (as a understand that what I need to make a color syntax highlight).
So I've started my way to become a GUI wizard :) For now Egnoly is only a program to develop my programming skills from bad to "something better" :), bit what it will be in future?.. Time will show... :)
Now I'm working in Visual Studio on my first "normal" GUI application — text editor which I've called Egnoly. I'm writing it on C#. Yesterday I finished first version of it (0.0.1). It can open and save file. Plus built in Windows Forms TextBox class abilities of cut/copy/paste. Not very much. But it works! Moreover development GUI apps is rather unfamiliar task for me, so Egnoly hasn't any tests written and strong system of exceptions. Furthermore I don't know C# well.
To resolve the last problem I've bought Andrew Troelsen "Pro C# 2005 and the .NET 2.0 Platform, Third Edition". I think after reading it I'll be comfortable with developing GUI, e.g. modifying classes from System.Windows.Forms (as a understand that what I need to make a color syntax highlight).
So I've started my way to become a GUI wizard :) For now Egnoly is only a program to develop my programming skills from bad to "something better" :), bit what it will be in future?.. Time will show... :)
Wednesday, July 04, 2007
"Old new" pace of life
Now when I'm working there are serious changes in my daily timetable. I'm at work for about 8 hours every day and I still haven't adopted to this. Of course I want to perform some programming as usual, but after the work I now haven't got enough energy for this. Today I've read two articles in Spectrum magazine and pieces from "The Republic" of Plato. That's not very much and moreover I've realized that I don't remember almost anything from most philosophic books I'd read... :-( I think I should reread some of them...
Furthermore as I've already mentioned I want to buy a book about C# and then about UML, but I still don't decided when to buy first of them.
And I want to sleep very strong for now..
Furthermore as I've already mentioned I want to buy a book about C# and then about UML, but I still don't decided when to buy first of them.
And I want to sleep very strong for now..
Tuesday, July 03, 2007
Choises
There are choices. They are all around us. We are making choices every day (click here). And one decision could be better that others. But why we usually choose one that's not better?
And may be we have only one choice... The choice to accept or not, that was chosen for as.
And sometimes we couldn't follow our choice.
And may be we have only one choice... The choice to accept or not, that was chosen for as.
And sometimes we couldn't follow our choice.
Subscribe to:
Posts (Atom)