Wednesday, November 18, 2009

Strange missing feature in CSharpCodeProvider

Currently I'm developing a database application for my university study that uses NHibernate. To enable lazy loading of results it is required for all members of mapped class to be virtual, so NHibernate can create proxy that will be replaced by actual object when required. And if class has events they also must be virtual because actually this is the same fields and methods.

On the other hand I've decided to generate those classes from XML definitions. On of the reasons for this is that this classes seems to be just and a set of properties, but they need to implement INotifiyPropertyChanged. I've decided to write a code generator using System.CodeDom members and to gain some experience at working with members of this namespace. However I've found that CSharpCodeProvider doesn't generate virtual events! Despite the fact that I set the appropriate attribute the event is still normal so NHibernate couldn't generate proxy. I've search through CSharpCodeProvider with Reflector and found that in the method GenerateEvent that generates code of event there is no call of a method OutputVTableModifier that inserts "virtual" keyword. VBCodeGenerator also doesn't generate virtual events.

So I wonder whether this is an intentional decision or the bug in the current .NET framework version (I have 3.5 SP 1). Actually I wasn't determined enough to search for this in the older version of .NET.

Thursday, July 30, 2009

ComboBox In Silverlight 3 And Binding

While recent exploration of Silverlight 3 I've stuck with the problem with following code:

<ComboBox SelectedItem="{Binding Path=Region}" ItemsSource="{Binding Path=Region.ParentCollection}" DisplayMemberPath="Name" />

It's not a good piece of code from design point of view: city references region in which it is located and region has a reference to collection of all available regions. And the problem with that code is that combo box shows list of regions but it doesn't select region in the box. Setting SelectedIndex to constant value also cause ArgumentOutOfRangeException. After several trials and errors I've found that if I firstly assign ItemsSource attribute in XAML and only then SelectedItem ComboBox works correctly! It seems that order of attributes in Silverlight 3 XAML matters. I've never seen that order of attributes may be important. As I know XSD doesn't allow to define strict order of attributes (but this can be done for the elements), so this looks very ridiculous.

Or may be my tricky and ugly code was the cause of such strange behaviour of framework? Hope in future I'll found answer to this question.

Wednesday, June 03, 2009

Force Assembly To Use Another Version Of Library In .NET

It is known that signed assemblies in .NET can reference only other sugned assemblies. And moreover they reference specific version of assembly. This could lead to problems such as I encountered while working with NHibernate: for lazy loading it uses Castle.Core.dll of version 1.0.3, and my application also uses Castle.Windsor, which requires the same dll but of version 1.1.0. As a result application failed because it wans't able to find an assembly of correct version: there could be only one file with name Castle.Core.dll in a directory! I've tried to use private probing paths which reference directories with required versions of library, but this didn't helped me (or I was doing something wrong). All in all I found three solutions for this problem:
  1. Add all required version of referenced assembly to the GAC. So application will load proper versions of assemblies. This solution has two main drawbacks: firstly, adding assemblies to GAC requires administrator privilegies on system, which could be a blocker for some cases, especially for portable apps. Secondly, application will load two assemblies so it will use more resources and moreover similiar static types will exist in two instances and this could be a big problem if they allocate a lot of resources. However this solution iw great if two version of assembly are backword uncompatibile.
  2. Download source code of projects and recompile them with configuration I need. However this includes additional work to compile files which isn't as easy as it wants and moreover this situation can happen with closed source applications, so while sometimes this could be an good solutions in some cases this is just impossible.
  3. You can tell .NET runtime to use specific version of assembly instead of referenced in manifest. This is done by this code in *.config file
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<!-- NHibernate dynamic proxy wants Castle.Core version 1.0.3, but Windsor uses 1.1.0-->
<assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc"/>
<bindingRedirect oldVersion="1.0.3.0" newVersion="1.1.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

Of coures this solution requires that new version is backward compatibile with older version. But this solution is much more simlier in deployment and there is no risk of having duplicates of "heavy" static resources. And what is more this allows to force usage of new version of assembly without any recompiling.

Sunday, May 31, 2009

Merging Two Blogs

I've used to have two blogs: this and about software. However this seems to be rather unmeaningfull work, so I've decided to merge two blogs. I've imported all posts from the old blog and deleted it. So now I will write anything only here.

Tuesday, May 26, 2009

Summer session

I wasn't writing here for much time, but I hope I will fix that soon :) At least today I've written posts to my software blog and here. This summer sessions seems to be the easiest of all that I've already had. I only have to pass two rather simple exams. So almost all summer is free from studying! And now I'm applying to study in Summer Scholl in OpenWay Group in Saint Petersburg. If I will succed then this will be a study course for a 6 weeks but studying seems to be very intersting and usefull there.

Visual C++ Debug Executables On Nondeveloper Machines

Well, If you need only facts then: Debug builds in Visual C++ include dependency on Microsoft.VC90.DebugCRT.dll which is installed with Visual C++ environment. This builds will not run on client machines even with Visual C++ Runtine Redistributable installed. Only Release build will run on such machines.
And here is the history how did I found this.
Recently I found that I couldn't start my application written in C++ on my netbook. At first I thought that this was the problem with hardware: program was compiled on 64-bit OS and machine and I was trying to run it on 32-bit machine. However I've tried to run program on another 32-bit machines and an attempt was succesfull. But on the forth machine it again failed to start. And by the way it provided a rather meaningless message which suggested to reinstall the problem. In .NET applications such an error is displayed if *.config file of executable has en error in XML syntax. but the was no any *.config file in this application.
I've assumed that there are missing dll file. So I've installed the only dependency that could be in this simple application: Microsoft Visual C++ 2008 Runtime Reditributable. That didn't helped. I've installed 2008 SP1 version. The same result. So I've tried to read the manifest file and found the dependency on Microsoft.VC90.DebugCRT.dll. I've compiled my application as a Release build and manifest included dependency on Microsoft.VC90.CRT.dll and application was starting on all required machines! It seems that debug vresion of C Runtime is distributed only with developer environment.
So the summary: Visual Stusio (or at least Visual C++ Express) is required to be installed to run Debug builds of programs.

Sunday, April 19, 2009

My Additional Work Experience As a Receptionist

I'm currently working as a network administrator in a small real estate agency. However during this financial crisis my agency encounters great difficulties and management need to cut salaries. There are also some positional movemevements between workspaces. During these movements I moved to the workplace of a receptionist. We have two workplaces for them but there is only one receptionist at a time. However she couldn't do all her work always alone so now I help out receptionist to do their because. That's not very hard for me, but is a great experience for me and help to the receptionist.

Saturday, March 07, 2009

NonLatin symbols in MySQL

While developing my recent program in databases I found that my program on C# doesn't work correctly with onlatin chracters. It happend with recent version MySql.Data connector assembly from MySql. But there was no such problem when I've used old ByteFX.Data assembly. But old connector has some other error (at least when it works with server 5.2). After digesting a problem I found how to make my program work correctly with nonlatin characters. The solution is obvious: program must use a unicode, so here I'll show that to change in configurations of database and cliet software.
  1. Encoding of connection must be Unicode. For this in connection string add this parameter: CharSet=utf8;
  2. Encoding of database also must be Unicode. In my.cnf file following variables must be set to utf8: default-character-set and chracter-set-server
  3. However this helped me only on Linux machine, on Windows MySQL crashed after string with such prameters. So on Windows I found another possible solution: specify charset only for database: CREATE DATABASE dbName CHARACTER SET = utf8;. This solution is more flexible than previous because it affects only your database and not whole server.

Tuesday, December 30, 2008

Loading Satellite Assemblies From Custom Path

One thing that distracted me in default localization technologies in .NET was that  culture-specific folders are placed on one level with executable file. So if binary files lie in the root of application folder, as a result en-US, ru-RU and other folders are mixed with something like Data, Resources and others. Not good layout of folders.

By default .NET searchs for dependendent assemblies in directory of executable file in and in GAC. But developer can specify additional directories in exe.config file:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <probing privatePath="./Lib" />
        </assemblyBinding>
    </runtime>
</configuration>

There are some limitations: no absolute paths and no walking up the directory tree ( ..\Lib will not work). Recently I've tested this for satellite assemblies and I have found that frameowork searchs in provided directories for satellite assemblies. So I can make something like that:

Main.exe
Main.exe.config
I18N\en-US\Main.resources.dll
I18N\ru-RU\Main.resources.dll

However as I've mentioned if I move Main.exe to Bin directory this will not work correctly. I know 2 possible ways to override this:
  1. codeBase element in config file, but it requires absolute path
  2. Adding handler for ApplicationDomain.AssemblyResolve event which will return whatever you want.

Friday, December 26, 2008

WPF Application Doesn't Load Resources in IDE

While working with WPF application I've experienced a problem: library assembly requests resource from System.Windows.Application which is defined in executable assembly in XAML file and this resource isn't loaded while I work in IDE! If I debug application all works fine, but XAML designer doesn't load resource, library method fails and window isn't rendered in designer. Of course I still can work with pure XAML and mostly I do so, but I prefer to have an ability to quickly watch results of my work in designer. So to workaround this problem I changed failed method so he will return not fully correct value which will not depend on application resources.

Wednesday, December 24, 2008

Google Chrome Can Prevent JavaScript From Generating Dialogs

Google Chrome has a wonderful feature: if one element in web page call one JavaScript function multiple times from them second time Chrome adds a checkbox to stop future dialogs to appear.

This is a very handy feature because some pages may generate infinite number of dialogs and because it locks browser you couldn't close tab with it (at least in Firefox). The only way to deal with such a problem in FF is to close the whole application. And if it setted up to load pages from previous session on start you could have some problems! Of course there are still possible ways to prevent browser from loading this page again but it will require an extra effort.

Monday, August 25, 2008

Enum as a ComboBox.ItemSource in WPF

Currently I'm working on my first project with WPF and study it on a practice. In this short article I want to give example how in XAML make ComboBox list values (or names) of enum.

ItemsControl.ItemsSource uses IEnumerable as source of items to list in ItemsControl (which ComboBox is derived from). In C# you can do this very simply:

comboBox.ItemsSource = Enum.GetNames( typeof( Dock ) );

You can do the same using only XAML:

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="ItemsSource test" Height="70" Width="150" WindowStyle="ToolWindow">
<Window.Resources>
<ObjectDataProvider x:Key="DockNames"
MethodName="GetNames" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type Type="{x:Type Dock}" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<Grid>
<ComboBox Margin="5" Width="120" Height="23" Name="comboBox"
HorizontalAlignment="Left" VerticalAlignment="Top"
ItemsSource="{Binding Source={StaticResource DockNames}}"
SelectedIndex="0">
</ComboBox>
</Grid>
</Window>

In this sample ObjectDataProvider is a wrapper for a method call and to assign this data provider to ItemsSource binding is used. As you can see XAML version of requires more lines of code. But it is usefull if development team strictly follows the rule that interface view must be defined in XAML without code on C#.

Wednesday, July 16, 2008

Setting Type of Paper in Docbook

Some months ago I was setting up Fop on my computer and found that Docbook XSL converts files from Docbook to Fop format with setting paper to USLetter while I need A4 paper. I didn't knew how to set type of paper for XSL, spent much time exploring Docbook XSL and as a result changed something in them and get paper format A4. I don't remember what I have done but it worked. However I needed to format disk of that computer so lost this settings.

After some digging I found that setting type of paper is very simple: to XSL transformator send parameter paper.type with value of you paper type. If you use Fop and runs it with docbook file and XSL transformation in commandline arguments specify: -param paper.type A4.

Monday, July 14, 2008

Firefox 3 Instant Crashes

I use Mozilla Firefox as my browser. I started from version 2, when I migrated from Opera because it wasn't supported by some Google web applications. Version 2 frustrated me with periodical freezes - they lasted for about 30 seconds and then FF came back to live. Now I'm using FF 3. There was a lot of buzz about it. I found that it has some new valuable features that still keep me from downgrading to FF 2. But FF 3 on my computer crashes several time per day. At first it was happening at notebook with Vista. So I had some suggestions that this are the problems with OS. But I found that these crashes happen on desktop computer with XP. Moreover recently I reinstalled OS on notebook and firefox crashes on almost "clean" OS also.

I don't use any *not very popular* extensions. Even more - I disabled them all, but FF 3 continue to crash. May be I should disable some plugins? I don't know. And I didn't heard any significant buzz about "FF crashes on my PC every hour!" so I come to conclusion that these are problems with my environment (Russia, ISP, some software on PC, anything else). But Opera works finely. So I have three ways:
  1. With great patience continue to use FF 3
  2. Downgrade to FF 2 (remember the buzz "downgrade to XP from Vista")
  3. Use another browser: Opera, Maxthon, IE, Safari.
But... I've been waiting for FF 3 and wanted to use it. And now I found it to be a big piece of crashes for me.

Simple (and funny in some way) recursy in C#

While recent work with reflections in .NET I found a funny way for recursion:

using System;

namespace ConsoleApplication1 {

class Program {

static void Main(string[] args) {
Program p =
new Program();
Console.WriteLine(p.Property);
}

public String Property {
get {
Console.WriteLine(
"Getting property, counter {0}.", counter++);
return (String)this.GetType().
GetProperty(
"Property").GetValue(this, null);
}
}
int counter = 0;
}

}
Getter of property gets PropertyInfo of itself and calls GetValue method.

Thursday, June 19, 2008

Firefox 3 — am I the only one who is disappointed?

Firefox 3 was released yesterday and there was a great buzz about it. Mozilla announced special "Download day". As I have read there was about 7.5 million downloads of FF yesterday. I've started using it from Beta 6. And I have to say that I couldn't share the joy about FF of others. No, I don't speak new features: they are good and I love new address bar which search not only through addresses but also through titles of pages. I'm speaking about FF bugs. FF crashes regularly on my computer. Most of problems occur on AJAX sites like GMail or Todoist after closing the tab with this site (though it doesn't crash always after closing this site). It seems that this is one error which causes crashes on my computer.

Another issue happened with bookmarks: at one day FF deleted all my bookmarks (I don't remember but may this already happened to me with FF 2). In itself this isn't a dramatic problem: FF creates daily backups of bookmarks and I also have done them in JSON format. But... FF refused to restore backup and said there is an error. Luckily final release of FF 3 was able to import my bookmarks :).

There are also some other issues with Internet (some pictures are not loaded from first few attempts and some pages also) but I'm not sure they are caused by FF because it seems other browsers also suffer from it.

But the bug with GMail really disturbs me. May be it is caused by any specific setting or software on my computer but I've made some new clean installs of FF and this didn't helped. And FF after crash doesn't say something meaningful about the reason of error: if it is caused by any plug-in or extension why not say this me so I'll disable it?

In coclusion I have to say that FF 2 had some really disturbing bug: sometimes it became frozen and doesn't respond to my actions but after about half a minute it came bake to normal work cycle. It seems in FF 3 this bug is fixed. But... it also seems that some new bugs came into it. So now I use Prism to work with GMail and Todoist. But Opera with it's new release 9.50 gets a new chance on my computer :)

Monday, May 26, 2008

NAnt over MSBuild

While working on my C# projects I found it useful for me to start using a build tool. Visual Studio builds assembly files, but many other tasks such as generating documentation are not part of assembly build and can not be just added to "pre-build" and "post-build" actions. So I've decided to use NAnt.

After some working with NAnt I decided to try MSBuild. There were some reasons for that: MSBuild is a part of .NET Framework so there is no extra dependencies; moreover it provides a good integration with project files generated by VS. But after a day of converting my NAnt project to MSBuild I've decided to return back to NAnt. There a plenty of reasons for that, which I found during this day.

The most important (for me) is that almost all settings to MSBuild tasks are set through attributes. The question "What to use: attributes or elements?" is long living and still doesn't have a clear answer (e.g. see this and this articles), but I found it a little inconvenient to set up all parameters of task through attributes. I won't speak here about what as I think should be element or property, but properties with long length data doesn't look good (e.g. lists of files).
In NAnt I feel very comfortable with setting tasks up through elements and attributes and in most cases I think that type of XML node is chosen right for property. And what is more NAnt provides and ability to define in custom tasks to define what property should be: attribute or element, while MSBuild follows it's convention and all properties are set up through attributes. Quite inflexible, though it removes a headache of deciding of type of node.

Secondly writing long lists or properties is a little inconvenient in VS: I prefer to have lines of code not very long and I need to write attributes on several lines. And if I press Enter after a property on a new line VS doesn't suggest me a list of possible items. It is need to start typing on previous line and press Enter only after writing property in editor. Of course I can write all in one line and use Wrap lines ability of text editors, but I prefer not to do so.

All-in-all I've returned to NAnt as a build tool. Sometimes I write additional tasks for it (those that are not in NAnt.Contrib) which gives me an ability to use not only for application builds but for other purposes.

Links:

Wednesday, April 23, 2008

RescueTime

For a month I'm using a web-based application RescueTime. It counts the usage of software and websites on computer so you can find which application you use the most. What is more RescueTime provides ability to assign tags to applications to group them, and to assign efficiency score to each tag. It draws some diagrams shiwing your efficienty so it's much easier to find out whether your are doing something useless to your or perform a productive tasks. And moreover in RescueTime you can create goals on using software, e.g. "Spend less than 1.5 hours per day on games." or whatever can be interpreted as "use something less/greater than..."

I think RescueTime is rather an interseting application that could help better manage time spent with computer.

Saturday, March 29, 2008

MyMiniCity.com

On site www.myminicity.com everyone without registration can start its own minicity. Though there aren't many ways to control your city: the only thing you can do is to post links to the page with your city. Each visit of page increases population of city. As with city growth some new features appear: Industry, Transport network, etc. Each has its own link to invest in development of this city infrastructure. As a result city from small village can grow to the big megapolis.

That's my mini city: http://kaaglecity.myminicity.com/

Thursday, March 20, 2008

I'm in the Internet again!

Hurray! After moving to new flat I've finally connected to the Internet again. I have a lot of work now but hope soon I'll continue to write to my blog.

Monday, December 24, 2007

New experience in C#

During last week I was doing rather interesting work: programming on C# my own Windows control similar to TextBox class. I was programming a text editor and needed to make color syntax. But RichTextBox allows to change color and other properties only for selected text, that isn't good. So I've decided to try to make my own control to work with text. Now it is rather good and implements some common functions. The most important is that I've understand that this is *really* possible, not only on paper. And through developing this control I've experience many difficulties. So now I want to write something like "How to make TextEditorControl on C#". Of course not on a professional level but I think I need to write down all this experience, while it fresh in my mind. So in future it will be easier for me to implement similar things. Moreover while writing I will unconsciously analyze what I'm writing and may be will get better solutions or completely new ideas.

Furthermore I want to write similar article about making tool to explore .NET assemblies using reflections. I already have basic implementation of such a tool and it need more polishing.

Bye.

Sunday, December 09, 2007

Funny Bug in Visual Studio 2008 Beta

While uninstalling MS Visual Studio 2008 Beta 2 I found one funny bug.



Trivial message from uninstaller that indicates that one or more of the files or directories to remove are occupied. The only thing to do is too close this application and click Retry. If this doesn't help, well click Ignore and hope this will not have any negative effect. But... what the heck is application named 4812? Well, it's may be not a name but an ID of process so I open Task Manager and look up for a process with ID 4812. Here it is!



Oops. It is a setup application itself blocked something and couldn't delete it. I tried to click "Retry". And it was a successful attempt process of uninstaller continued.

I even could make a guess why this short story happened but had a good final. While checking files/directories to remove setup.exe locked them. According to my guess releasing of lock is placed in destructor. When message appeared object that locked files was "deleted" but garbage collector wasn't called until that moment so hadn't called destructor. While I was thinking about this problem and taking screenshots garbage collector was invoked and called destructor that released locks. Of course this guess can be true only if setup.exe is using garbage collector. Well, as Andrew Troelsen in his book about C# suggested it is better to manually call method Dispose and release all resources when they already could be released and don't leave this job to GC, which is unpredictable.

Of course my suggestion is only a suggestion, but I think it is rather useful to try to explain bugs in not your applications even if source code is inaccessible.

Wednesday, December 05, 2007

The Dialog with Myself

I've already written that what I want to change in myself. Surely it's not easily to change myself (at least for me). And I think that to put off bad habit may I need to have split personality in some way. And one of that personalities must say "That is bad, don't do it" when it is needed. May be this should be something like fight between good and evil, though I'm not sured that someone in me is really good or evil. May be both of them should help each other. There must be a dialog inside of person, dialog with himself. But how to speak with myself? The most obvious way for is to have to "Me's". May be this a psycho disease? But to learn on fault your need to have someone who will point on them, and nobody as you can now what you do and why you do.

Visual Studio 2008

In the end of November MS released the new version of its IDE Visual Studio 2008. I've used Beta version already. It that post I've written that first impression was that is is very buggy, and later practice showed that there are some mistakes. I usually had some problems with Intellisense and IDE crashed. I have to note that I used Professional Edition.

Now I'm using Express Edition. I'm not so rich to buy IDE now, so use free edition. Of course it's not so functional as Pro version and for each language (C#, C++, VB.NET, Web development) there is it's own IDE. However I'm currently programming only on C# so this is not a big problem for me. Visual Studio is rather comfortable IDE (especially comparing to Turbo C we have in unversity :(. The problem is that it can't be used for editing all types of files I need with syntax coloring. So for editing files such as Nullsoft installation scripts, Python files and others I use PSPad. But for C# Visual Studio is much more preferable because autocompletion, Intellisense and many other small but very useful features.

One interesting note about Visual Studio: with IDE many other components are installed (SQL Server Compact, etc.). But uninstalling them is a manual operation. Not rather comfortable.

I have to say that Visual Studio is one of my favorite MS products and I haven't a lot of complains about it.

Saturday, November 24, 2007

What I Don't Like in Myself

There are some thing that I do not like in myself. Often I'm not tolerant to others in relations with other people. I sometimes behave too angry towards people around me. And moreover I'm took weak physically, especially in strength of arms.

What do I do to surpass these problems of my nature? Firstly, to become stronger I try to do everyday exercise with weights. And I think that gave me some positive result in strength of arms. However I have some problems with strength of will in aspect of physical exercises : in fact I don't do them everyday but usually one time in two or three days. That's not good. And I still continue to make them regularly everyday. Now that's not a problem of physical strength but of strength of will above laziness.

Furthermore how do I improve my tolerance to others? That's far more difficult question than just physical strength. I think the reason for angriness toward others is in some way linked to my warlike character and to that I think there are some traits in people which couldn't be tolerated. About this I'll try to write in future. And now I have to say, that I try, really try to tolerate other people while they act in way I do not like. Sometimes I say them, that I don't like what they do, and wait whether my word will have any effect. And I keep waiting for good changes. But sometimes... behavior of one goes beyond borders which as I think are acceptable.
Or I'm just tired of them and can't keep dam of my patience. So then comes something that is like affect: I'm very-very-very angry and behave in a way I don't like after that.

So what to do? I think, just try to understand others imperfection, accept them as they are (but may be not accept their bad traits?). It is better to have a war with own bad traits than with others', it is easier to make better yourself, than the others, but others sometimes need help to become better.

Sunday, November 18, 2007

Relaxation day

Sometimes there are days when I don't do almost anything. I just read something for fun, play games. I want to do something but in fact can't make me to do anything. I think that's are relaxation days. One such day was today.

Sunday, November 11, 2007

This week

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.

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. :)

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.

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.
All in all: blogging is an output produced my my mind by analyzing input from books and my experience.

[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 :-)