Sunday, 10 January 2010

Fixing Twitter for Chrome with User JS

I'm a rather conservative Twitter user and prefer web interface to all the others. The only thing in it that have been bugging me since I've started using it was impossibility of submitting tweet with Ctrl + Enter shortcut. And today I've fixed that (yeap, I'm damn proud of myself!) using User JS script for Chrome.

Yes, it only fixes Twitter in Chrome and may possibly fix it in Firefox with GreaseMonkey (I did not check it!).

So, first of all - make your Chrome accept User JS.

1. Switch to development channel of Chrome
2. Enable User JS in Chrome using "--enable-user-scripts" shortcut flag as it is described here
3. Restart Chrome
4. Copy this code and paste it to file named Twitter.user.js :

// ==UserScript==
// @name Twitter extensions script
// @description Short script that gives some features I really miss like Ctrl + Enter way to submit tweets.
// @version 0.1
// @include http://*twitter.com/*
// ==/UserScript==

console.log('Started Twitter script');

var txtStatus = document.getElementById('status');
if (txtStatus == null) {
return;
}
txtStatus.onkeypress = function (e) {
e = e || window.event;
var keyCode = e.keyCode || e.which;

var ctrlKeyPressed = e.ctrlKey;
var enterKeyPressed = keyCode == 13 || keyCode == 10;

if (ctrlKeyPressed && enterKeyPressed) {
console.log('trying to submit tweet...');
var submitTweetButton = document.getElementById('update-submit');
submitTweetButton.click();

return false;
}
}


5. Drag and drop this file to opened Chrome
6. Accept script installation
7. Enjoy Ctrl + Enter shortcut in Twitter web interface! :)

Friday, 18 December 2009

IronRuby LinkedIn Group

IronRuby is in RC state and soon we'll all get a possibility to use it in our production environments. I can't predict the exact amount, but I'm absolutely sure it will conquer many developer hearts and build a nice Ruby .NET community.

If you like IronRuby - JOIN LinkedIn community! Let's share our experience in using IronRuby!


Saturday, 21 November 2009

Diving into RIA architectures with Flex as an example

Now I have a need to dive into Flex architecture common structure and widely used patterns. Below goes the list of links I've found useful and interesting:

Introduction to RIA architectures

Flex Architecture Fundamentals in 4 parts

Martin Fowler UI patterns

Great benchmark for different ways of Flex to communicate with external services:
(Yes, and SOAP/XML is 4 times slower than Flash-native AMF format)

All of these are really interesting articles that are definitely worth reading even if you don't have same need as I do.

Friday, 20 November 2009

Fixing IronRuby error when installing Rake

I was trying to install Rake with IronRuby but was always getting the following error:

>igem install rake
ERROR: While executing gem ... (ArgumentError)

After some Googling I've found the following article:


It's not in English or in Russian so I had to ask Google Translate for help. The article stated that length of name is greater than 255 and that's the problem. I've checked mine:

C:/Program Files/IronRuby 0.9.2/

Obviously it's not longer than 255 characters, so the reason is possibly in spaces. I've reinstalled IronRuby to:

E:/bin/ironruby

And...

PS C:\Users\Ivan Suhinin> igem install rake
Successfully installed rake-0.8.7
1 gem installed
Installing ri documentation for rake-0.8.7...
Installing RDoc documentation for rake-0.8.7...

Yahoo! :) Hope this post will help someone with same problem.

Thursday, 19 November 2009

Running IronRuby 0.9.2 with RubyMine 2.0

Latest releases of IronRuby 0.9.2 and RubyMine 2.0 inspired me to make them play together. That's my first experience of running IronRuby in fully featured IDE so I was rather doubtful whether it will work or not.

Here goes step-by-step manual:

1. Download IronRuby 0.9.2 from here and install it.
2. Download RubyMine 2.0 from here and install it. You may need a licence - grab it here.
3. Run RubyMine
4. Click Project Settings or press Ctrl + Alt + S:


5. Navigate to 'Ruby SDK and Gems' left menu option:


6. Click 'Add SDK...' button:


7. Choose ir.exe in your IronRuby 0.9.2 installation folder:


8. That's it! We have IronRuby listed as Ruby SDK in RubyMine:


9. Let's try it in action! Close this window and create a new project:


10. Choose project location and 'Empty project' option - we don't need Rails at the moment:


11. Create a folder named 'src' and add a 'main.rb' file to it:


12. Write this code to editor (and feel the power of RubyMine's IntelliSense):


13. Click the arrow button and choose 'Edit Configurations' option:


14. Add new Ruby configuration:


15. Name configuration and select our 'main.rb' file as executable script:


16. It's damn important to clear 'Ruby Arguments' field. Change this:


to this:


otherwise you'll get the 'can't convert NilClass into String (TypeError)' error:


17. Press OK and run our first program:


18. Here we go, our first IronRuby program running in RubyMine:


Isn't it wonderful? :)

Wednesday, 18 November 2009

Use remote desktop connection faster with PowerShell

We have more than ten servers in our production network and all of them are accessible via RDC. The problem is that to connect via RDC you have to specify public IP and not local network nice name like "prod-01" or "prod-db-01". I had not bothered about it till I had a need of connecting some of them several times a day. To solve this problem I wrote a PowerShell script that takes nice name of server and launches RDC with its IP:

$prodServers =
@{
'prod-01' = '1.2.3.2';
'prod-02' = '1.2.3.3';
'prod-03' = '1.2.3.4';

'prod-db-01' = '1.2.3.6';
'prod-db-02' = '1.2.3.8';
}

Set-Alias rdcx 'c:/WINDOWS/system32/mstsc.exe'
function rdc([string]$serverName)
{
$param = ''

if ((![System.String]::IsNullOrEmpty($serverName)) -and ($prodServers.Contains($serverName)))
{
$param += '/v:' + $prodServers[$serverName]
}

rdcx $param
}

It's extremely useful if you have many servers, just believe me :)

Monday, 16 November 2009

Use PowerShell to determine MS SQL table used data space

Yet another issue to be solved: we have SQL Expression installed at our branch server and it allows only 4Gb per table. So - what's the solution? Of course, PowerShell!

Right click on database - "Start PowerShell". (Note: I do NOT know how to enter MS SQL mode from normal PowerShell). And now we can have some magic with our database! The following script shows databases that are too heavy and can be cleaned up after some consideration:

ls tables | sort -Property DataSpaceUsed -Descending | ? {$_.DataSpaceUsed -gt 1024} | % {$_.Name + " takes " + [math]::Round($_.DataSpaceUsed / 1024 ) + " Mb"}

Wasn't that just sexy? :) Here goes the step-by-step explanation:

ls tables

Listing all db tables.

sort -Property DataSpaceUsed -Descending

Sorting descending by DataSpaceUsed field - we need to see only the heaviest.


? {$_.DataSpaceUsed -gt 1024}

Taking only tables that take more than 1Mb in data space.

% {$_.Name + " takes " + [math]::Round($_.DataSpaceUsed / 1024 ) + " Mb"}

Making output look nice and actually showing table name.

Friday, 13 November 2009

Enlarge your Build System!

http://www.jameskovacs.com/blog/ReleasingPsakeV100PsakeV200.aspx

Rake? NAnt? NO!!!!!!!!!!!

PSake? YES!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

What is it? Ha! Powershell-based build system. DSL for tasks, easily integrated with PS script blocks.

That's only 9th message!

Yeap. This message is only 9th message I have in this year. Compared to 158 messages from last year it seems a bit... small? :)

I should definitely write more.

Delete all MSMQ queues at some PC with PowerShell

We have a small issue at one of our production servers. Once something generated ~10K queues with Guid-like names. Since then they were not deleted as there was a problem: standard MSMQ manager doesn't allow deleting several queues at once.

What to do? Powershell, of course! :) Here goes the script:


[Reflection.Assembly]::LoadWithPartialName("System.Messaging")

[System.Messaging.MessageQueue]::GetPrivateQueuesByMachine("someserver") | % {".\" + $_.QueueName} | % {[System.Messaging.MessageQueue]::Delete($_); }


You may also filter them by name if you do not need to remove them all as I need:


[System.Messaging.MessageQueue]::GetPrivateQueuesByMachine("someserver") | % {".\" + $_.QueueName} | ? {$_ -match "SOME_REGEX_FILTER"} | % {[System.Messaging.MessageQueue]::Delete($_); }

And SOME_REGEX_FILTER is... Yeap, some regex filter :) The -match operator allow us using regular expressions in the Where-Object (alias "?") clause.

Have fun with PowerShell!

Saturday, 26 September 2009

What do we need to use IronRuby?

This post is an answer to Jimmy Schementi's Twitter question:
jschementi: Time to start building real #ironruby and #ironpython websites: what content (other than the obvious get/learn/etc) would you like to see?
I'm not going to speak about creating new applications, I'm going to describe a switch of existing ASP.NET application written in C# to IronRuby. Let's have a real-world example. I'm working on a rather huge ASP.NET application dealing with user photos. We use NAnt to build our application, NUnit to test it. Application is layered, we have separate layers for presentation, business logic, data access, etc. We're using ASP.NET 3.5 and have started switching new functionality to ASP.NET MVC 1.

The main question is: what can IronRuby give us? Yes, I'm a HUGE fan of Ruby and I just love it, but my personal usually don't play role in pragmatic reasoning whether to use some technology or not. So let's see what parts can be improved with IronRuby.

1. NAnt - definitely YES, I'm going to smash all barriers and promote usage of Rake. I use it in my home fun project, but fun is not production, fun is not money (at the moment). So what stops me from promoting Rake? Small numbers after it's name: 0.9. No one in company where I work will use something still in Beta status. So that's the first requirement.

2. Testing. According to Patrick Gannon post about Cucumber IronRuby testing could be a real fun. Though, we already use NUnit for testing. Why should we switch to anything else? Or should we use IronRuby with NUnit? To see real advantages we should see comparison of C#/NUnit vs IronRuby/Cucumber. Will it be faster? More readable? Will it increase unit test coverage? That's the second requirement

3. We use MVP for existing ASP.NET 3.5 parts and... guess what we use for ASP.NET MVC? ;) Will we be able to switch our presentation layer to IronRuby? What benefits will it give us? And, moreover, what problems may is cause? My main concern is performance. Ruby itself is a slow language, at least this is true for Ruby 1.8.6, the exact Ruby version IronRuby replicates in .NET. Will it be faster than original Ruby 1.8.6? And what about Ruby 1.9? 2.0? What about our beloved C#? Will IronRuby give us something new and useful in MVC controllers? Models? Views? There are two more requirements: performance benchmarks (vs C# and Ruby) and comparison of business logic layer (for example) in IronRuby vs C# implementation.

Let's sum up the requirements:
1. Final version of IronRuby, ready for production
2. Comparison of C#/NUnit vs IronRuby/Cucumber
3. Performance benchmarks vs C# and Ruby 1.8/1.9
4. Comparison of business layer implementation in IronRuby and C#

That's what will be asked from my pragmatic colleagues in the first place. And what about my own opinion? First of all, I repeat, I'll force them switch to Rake :) That's for sure and I can see real benefits. Testing: I'm satisfied with NUnit and not sure what IronRuby testing will give us. Business logic and presentation layer: I don't think I want to use IronRuby everywhere. Perhaps, it will only be used in presentation layer, for example, or any other area that will benefit from it and will not suffer from performance decrease. But to see where it can be used or can not - I need to see benchmarks and real benefits.


kick it on DotNetKicks.com

Friday, 28 August 2009

Resharper doesn't see assemblies from GAC

Just set SetLocal reference property to True. It will copy this library to /bin folder and it will be parsed by Resharper.

Thursday, 28 May 2009

Twitquake!

Looks like Twitter is twitquaking right now - it is accessible time to time and has some problems with twitting.

Sad!

Sunday, 24 May 2009

Back online!

Here I am :) From today and further on I'm returning to blogging here.

P.S. BTW, I'm now at Twitter and StackOverflow too :)

Monday, 19 January 2009

NAnt HowTo #4: How To Create And Use Custom NAnt Task

new class named OK, let's start. What is a NAnt task? Formally, it's a class that extends NAnt.Core.Task class from NAnt.Core.dll assembly located in your NAnt installation folder. As any class it will be placed in an assembly, and this assembly is the way you interact with NAnt. So, let's get it! The following steps describe how to create a simple HelloTask task.

1. Create new project

Create an empty class library project that will compile to .dll file.

2. Create new class derived from NAnt.Core.Task

Create new class named HelloTask and derive from NAnt.Core.Task:

public class HelloTask : Task
{

}

3. Override ExecuteTask method

As NAnt.Core.Task class is abstract VS will suggest you to override the ExecuteTask method - do it. Put the following implementation into it (assume that Person property is already defined ;)):

protected override void ExecuteTask()
{
Project.Log(Level.Info, String.Format("Hello, {0}!", Person));
}
Have a look at Project.Log() call - it will output some message with needed level.

4. Define task name

To define task name, you should apply NAnt.Core.Attributes.TaskNameAttribute attribute to your class:
[TaskName("hello")]
public class HelloTask : Task


5. Define task attributes

To define task attributes, you should define property of appropriate type and mark it with the NAnt.Core.Attributes.TaskAttributeAttribute attribute:

[TaskAttribute("person", Required = true)]
public String Person
{
get;
set;
}
Attribute constructor allows you to specify several options, like whether this attribute is required.

6. Load assembly with you class in NAnt

To use your new task you should place your assembly somewhere NAnt has access to. Two most appropriate options are in NAnt installation folder and in build execution folder. Though I prefer the last one, the first one may be useful if you use your custom tasks regularly though not changing them often.

As soon as assembly is properly placed, you should load tasks from it in your build file. Use loadtasks attribute to load it:

<loadtasks assembly="Leaves.NAnt.Custom.dll" />

7. Use your task

Just use it in the most obvious way:

<hello person="world" />
The output will be the following:

all:

[loadtasks] Scanning assembly "Leaves.NAnt.Custom" for extensions.
Hello, world!

It works!

8. Summarize

This is what we've got in our task:

using System;
using NAnt.Core;
using NAnt.Core.Attributes;

namespace Leaves.NAnt.Custom
{
[
TaskName("hello")]
public class HelloTask : Task
{
protected override void ExecuteTask()
{
Project.Log(Level.Info, String.Format("Hello, {0}!", Person));
}

[
TaskAttribute("person", Required = true)]
public String Person
{
get;
set;
}
}
}
And build file:

<?xml version="1.0"?>

<project
name="NAnt HowTo 4" default="all" xmlns="http://nant.sf.net/release/0.85-rc2/nant.xsd">
<target
name="all">
<loadtasks
assembly="Leaves.NAnt.Custom.dll" />
<hello
person="world" />
</target>
</project>
kick it on DotNetKicks.com

Friday, 16 January 2009

ASP.NET MVC impressions

It's awesome! As a fan of Ruby on Rails I can tell you: ASP.NET MVC is f*cking awesome!

Monday, 5 January 2009

NAnt HowTo #3: How To Run NUnit Tests From Your Build File

This post continues my NAnt HowTo series. In previous posts I've covered topics of compiling your project and splitting your build file. Today I want to tell you how to run NAnt unit tests from your NAnt build script.

First of all you may notice that main NAnt distribution has TWO NUnit tasks: nunit and nunit2. First one is designed to work with NUnit 1.0 and second one with NUnit 2.2. This simple moment can warn you that something is not as good as it seems here. And you will be right :) Me personally had a problem running NUnit of some lately version using this nunit2 task. After some googling I've found a solution in Scott Hanselman's blog where he spoke with his friend on same topic. As a result of this conversation Scott recommended using nunit-console.exe instead. I've tried it - it works :) Now changing NUnit version will not break as nunit-console command-line specification is not something to change when switching from 2.x to 2.(x+1).

How can we do this? Simple enough:

<target name="tests.unit.run" description="Run unit tests">
<exec
program="D:/bin/nunit/nunit-console.exe"
workingdir="D:/projects/MyProject/Integration"
commandline="MyProject.Tests.dll /xml:TestResults.xml /nologo"/>
</target>

So, step by step.
  1. We use <exec> task to run an executable. This also means that if our nunit-console.exe executable fails (read: some test fails) it will break our build. Of course, you may use failonerror="false" attribute on your <exec> task but I do not recommend doing so - why would anyone ever need tests if their failure will be ignored?!

  2. We specify path to our nunit-console.exe executable via the program attribute.

  3. We specify working directory (usually it's integration dir where you have all needed assemblies) via the workingdir attribute.

  4. We pass command line parameters via the commandline attribute.
Actually this could be the end of the post but I want to say some words on command line arguments of nunit-console.
  1. First non-keyed (with no preceding /im-a-key: keys) several arguments specify assemblies to run tests from.

  2. Argument after /xml: key is a bit more interesting. It indicates the XML file where test results will be stored. You may not need it at the moment but you'll definitely need this file when you'll be integrating your NAnt build script with CruiseControl.NET or any other integration software.

  3. /nologo key suppresses NUnit copyright information display on each run
You can read more about these command line arguments on the official NUnit website.

That's the end :) Next time I will probably speak on writing NAnt custom tasks. Stay online.


kick it on DotNetKicks.com

Tuesday, 30 December 2008

NAnt HowTo #2: How To Split Your Build File

Let's assume you have a large build file with many-many targets, properties, etc. After some time it becomes pretty hard to support and extend it. What can we do? As for me, the best option here is to split your build file to several pieces. Below goes an example on how you can do this.

My default.build file:

<?xml version="1.0"?>

<project
name="NAnt HowTo 2" default="all" xmlns="http://nant.sf.net/release/0.85-rc2/nant.xsd">
<!--
Includes -->
<include
buildfile="build.include" />
<include
buildfile="test.include" />

<target
name="all" description="Default target, calls all deployment tasks.">
<call
target="rebuild" />
<call
target="test" />
</target>

<target
name="rebuild" descripton="Rebuilds all projects." >
<call
target="clean" />
<call
target="build" />
</target>

<target
name="test" description="Runs all tests.">
<call
target="tests.unit.run" />
<call
target="tests.integration.run" />
</target>
</project>
build.include file:
<project xmlns="http://nant.sf.net/release/0.85-rc2/nant.xsd">
<target
name="clean">
<echo
message="Rebuild: clean" />
</target>

<target
name="build">
<echo
message="Rebuild: build" />
</target>
</project>
test.include file:

<project
xmlns="http://nant.sf.net/release/0.85-rc2/nant.xsd">
 <target name="tests.unit.run">
<echo
message="Test: unit tests" />
</target>

<target
name="tests.integration.run">
<echo
message="Test: integration tests" />
</target>
</project>
As you can see, actual inclusion takes place when you use <include> element and specify it's buildfile attribute to point to some .include file.

.include
files should contain root <project xmlns="http://nant.sf.net/release/0.85-rc2/nant.xsd"> element with necessary xmlns attribute. Without this attribute NAnt won't be able to parse this file and use it's targets.

Included files become a piece of main build file and share all properties with it. This means that properties from included file are visible in main file and vise-versa. I usually place commonly used properties to separate .include files, for example, I have projects.include file with all properties that point to project names and folders.

kick it on DotNetKicks.com

Monday, 29 December 2008

NAnt HowTo #1: How To Compile A Project?

NAnt provides a CSC task that will allow you to compile your C# project (sorry, VB guys, no info for you :)). It may be used this way:

<!--  2. Building shared data project -->
<csc
target="library" debug="false" warnaserror="true"
output="D:/projects/MyProject/Integration/MyProject.dll">
<sources
basedir="D:/projects/MyProject/Source">
<include
name="**/*.cs" />
</sources>

<references>
<include
name="D:/projects/MyProject/External/NHibernate.dll" />
</references>

<resources>
<include
name="D:/projects/MyProject/Source/NHib/*.hbm.xml"/>
</resources>

<nowarn>
<warning
number="1702" />
</nowarn>
</csc>

So let's have a look in details at each part of this task.

Attributes

One by one:
  1. target="library" - indicates that we want to have a .dll as result of our compilation. Possible values are exe, winexe, library or module.

  2. debug="false" - indicates that no debug symbols will be included into our assembly. Possible values are Enable, Full, None and PdbOnly. Although you can use aliases (like I did): true stands for Enable and false stands for None.

  3. warnaserror="true" - has same effect like checking 'Treat warnings as errors - All' option in Visual Studio. All warnings will be treated as errors.

  4. output="D:/projects/MyProject/Integration/MyProject.dll" - output of compilation. Make sure your output target extension is adequate to your compilation target (although I haven't tried compiling target library to output .exe :-P)

Sources

This nested element allows you to select files that should be compiled. It's only attribute I use here is:

basedir
="D:/projects/MyProject/Source" - base directory for source files. Usually this is root folder for some project.

The <include> element allows you to specify elements that should be compiled. It's attribute, name, deserves some attention. First, it uses wildcards to pick necessary items. Second, it uses double asterisk to recursively pick all files from all folders. Have a look:
  1. name="*.cs" will pick .cs files only in current folder

  2. name="**/*.cs" will pick .cs files from current folder and from all subfolders, their subfolders, etc.

References

This nested element allows you to specify assemblies that should be references. Syntax also supports wildcards so you can easily specify *.dll to reference all .dll files in some folder.

Resources

This element allows you to deal with resources embedded into your assembly. In this particular case I use this element to embed NHibernate .hbm mappings.

Nowarn

This section allows you to ignore some specific warnings via nested <warning /> element. Use it's number="1702" attribute to specify some specific warning you want to ignore.

Conclusion


That's a short explanation on CSC target, more information can be found here. Hope this post will be helpful to anyone other than myself :D

kick it on DotNetKicks.com

NAnt HowTos

Lately I had to dive into NAnt and I'm going to post here several posts on some simple NAnt questions.

Wednesday, 24 December 2008

Things to complete

Here goes the list of things I want to complete in the nearest future:

  1. Master ASP.NET MVC
  2. Become senior software engineer at next internal attestation
  3. Dive deep into .NET attributes programming
  4. Master JQuery

How to become a better specialist?

Work with those who are smarter and more professional than you. This is a modified quote from some chess book and it applicable to literally any profession.

Applying this statement to my profession (I'm a .NET developer if anyone could have forgotten that ;)), you can become better much faster if you work with someone more qualified than you. I've been working with two nice developers for almost six months and now I can see my level is growing way too faster than if I would increase my skills myself. I'm actually approaching their level, day after day.

That's why in one of my dreams I imagine myself working together with such persons like Martin Fowler or Scott Guthrie. That could be a real experience boost!

Sharp Architecture

Do you want to become a better developer? Try this project. Yes, just download it and read the code. Comments are marvelous, design is outstanding. I love it. I've picked several tricks and two absolutely new libraries/approaches for myself.

Although it's designed to use with ASP.NET MVC beta you'll easily grab NHibernate code as it was designed not to depend on view framework.

Just try it

Tuesday, 23 December 2008

ASP.NET Form Autocompletion

Our customer was really interested in enabling autocompletion feature for registration page. I've searched a lot, I've found a huge number of pages describing how to turn it off and (at last!) only one page about how turning it on.

All magic is hidden in AutoCompleteType property of asp:TextBox. You can read about it in details here but in a nutshell this field allows you to specify what information should be autosuggested for this particular TextBox.

Enjoy!

Thursday, 18 December 2008

Internet Explorer 8 Release Candidate 1

According to a friend of my friend, IE8 RC1 has been accessible for Microsoft partners a month ago :( And seems like:

  1. No standards
  2. Slow JavaScript
  3. Security problems
  4. 17 in ACID3

I hope it was very old build. VERY old.

=(

Leaves Bugs System

Are you satisfied with Bugzilla? My answer is NO. I know it's has many nice features but I'm absolutely disappointed with it's UI. How could anyone create such a crap?! It's unusable and usually I spend up to 10 minutes to search for defects assigned to me for some specific iteration.

I saw nice solutions, but all of them had some drawbacks that made me drop using them off. One of these drawbacks was the price =). Anyway, me decision is to create something of my own. And as it is my graduation project, I have to complete it.

I'll develop it on top of the ASP.NET MVC Beta, NHibernate as my ORM (I'm disappointed with the EF at the moment) and JQuery as a great accelerator for UI. I'll try to follow best practices, including TDD and CI. Hope this will be a nice project ;)

Yesterday I've created some basic folder structure and started writing NAnt script for my new solution. I've also set up SVN server and added my projects to subversion. If everything goes fine I'll manage to set up CI at the earliest stage possible - and that's a good point. And later on - no step without TDD :) It's just too good to work without it.

New info coming soon!

Web Developer Wish List

Nice article on what you may ask for Christmas :) My choice is office chair - together with other 55 people who voted the same.

View wish list

IE 8 coming soon!

Or at least it's release candidate :) That would be a great Christmas present!

Read here

Wednesday, 17 December 2008

New Live Writer

Could you image what could be better for blogging than Microsoft Live Writer? Earlier I could not, but now I see how I was mistaken :) And the answer is...

Live Writer 2009!!!!

Actually, this is just a release candidate, but the list of improvements looks fine:

  1. Support for YouTube
  2. Support for Flickr
  3. Spellchecking for some more non-English languages
  4. Support for Digg
  5. Support for Twitter

Waiting for release =)

Tuesday, 16 December 2008

Chrome vs IE 8 Beta

This article shows that IE8 Beta loses the battle to Google Chrome. I think that it's mostly because of BETA in IE 8 name and Google Chrome has recently dropped same suffix.

Hope IE8 wins =)

Ruby-based barmen DSL

It's wonderful!

Just have a look at this sexy code:

drink 'Screwdriver' do
serve_in 'Highball Glass'
ingredients do
2.ounces :vodka
5.ounces :orange_juice
end
end


 



I like it! And you? ;)

Some interesting links

  1. It Oxite as good as it's claimed to be? According to this well-proved article, it's not and, moreover, it will hurt ASP.NET community.
  2. How your team goes agile? Our team tries to be agile but it's not a one-second process and it takes some time to adapt from previous techniques to agile methodology. That's why I really like articles about other agile teams as I can pick some interesting thoughts on agile from them. From this article I've actually taken four thoughts (2 absolutely new, 2 I knew earlier fundamentally explained)
  3. Some new Ruby book, available free in e-book format.

Monday, 15 December 2008

Best text editor for Windows I've ever seen

Yes, that may sound too promising but whatever. I tried it and it's sexy. Nothing wrong, everything is extremely cool. I love it.

So, what is it? What is this wonderful sexy text editor? Here it goes: Intype. Check it here.

Snippets are sexy, UI is sexy, logo is sexy. It's SEXY!

Wednesday, 10 December 2008

Ruby is FAST!

That's what I'm talking about. Ruby 1.9 is almost five times faster comparing to Ruby 1.8.6. Isn't it great? Perhaps this fact will make me turn back to Ruby from Python and will help me making my decision on platforms I use.

I'm aiming to have two platforms by my hand and for my purposes. The first one is definitely .NET - the one I'm going to use for large enterprise solutions. The second one is something I'm not sure about. I do know the main purpose of it though: this platform should be cross-platform, built on top of some script language and be easy to use for some lightweight solutions like a small e-shop or anything alike. Current variants are:

  1. Ruby with Ruby on Rails or Merb
  2. Python with Django or Pylons
  3. Objective-J with Cappuccino

I'm a devoted fan of Ruby and if Ruby's speed is not a problem anymore I'll definitely turn back to Ruby. That's why I meet all such kind of news with great inspiration and hope.

Monday, 8 December 2008

The power of shell

Finally I've found some time to download and have a look at PowerShell - Microsoft replacement for it's old-ugly-non-usable command line prompt. And all I can say is GREAT! It's absolutely wonderful in it's might! Predefined aliases make it look like *UN?X shell and make it more usable.

Also take a look at PSTOOLS tool from Mark Russinovich - another great set of tools. As for me, I really like writing this:

pskill firefox

And this will actually kill firefox process. Isn't it wonderful? :)

Friday, 5 December 2008

Calling .NET libraries from IronRuby

In my recent post on IronRake I've used the following task to demonstrate the power of IronRake:

task :default do
  require 'mscorlib'

  require 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
  print System::Guid.NewGuid().ToString()
end

And now I can tell you that everything is much simpler that that. Don't use "require" plus full assembly name. Use the following:

require 'mscorlib'

task :default do
    include System
    print Guid.NewGuid.ToString
end

"Include System" is much shorter, isn't it? :)

John Lam Talk on PDC

Yesterday I started viewing IronRuby video from PDC by John Lam. It's marvelous! I did know Ruby is a powerful language, I did know .NET is a powerful framework but I could not imagine how powerful IronRuby will be!

I recommend this video to anyone interested in IronRuby, you'll see many interesting things there.

Thursday, 4 December 2008

Python 3 released

You can download it here.

Recently I've been diving into Python 3 rc3 and I can say that I like it. It is not as verbose as Ruby is but it's much simpler and _faster_. You know, I mean, FASTER. So my choice is using Python for some lightweighted websites (e.g. for my freelance tasks) and IronRuby for some huge websites.

Running IRake

This post will show you how to setup and run irake and feel incredible power of great tool written in great language that runs in great framework.

NOTE: in this post I assume all paths are correct and you can write 'rake' instead of 'd:/ruby/bin/rake'.

First, download IronRuby alpha 2. Unpack and have a look what we have. In /bin folder we have some executables, including iirb and irake. We're actually interested in second one. Let's create a simple task to try it!

task :default do
print 'rake is up and running!'
end

Let's try how it works with simple rake:

>rake

rake is up and running!

Cool. Let's try irake:

>irake

unknown: Could not find RubyGem rake (>= 0)
(Gem::LoadError)

Ok. Let's install it. As we are using irake we should use igem.

>igem install --remote rake


ERROR: While executing gem ... (System::IO::DirectoryNotFoundException)
Could not find a part of the path 'D:\External\languages\ruby\ruby-1.8.6\lib\ironruby\gems\1.8\gems\rake-0.8.3\bin\rake'.

That's the trickiest part of all. This path is not configurable (at least I could not find it), so we'll have to place ruby just where program expects it to find. What is interesting, this folder is already created. We'll install ruby 1.8.6 and copy it to this tricky folder ("D:\External\languages\ruby\ruby-1.8.6").

After that, let's try to install rake once again.

>igem install --remote rake


ERROR: While executing gem ... (System::IO::DirectoryNotFoundException)
Could not find a part of the path 'D:\External\languages\ruby\ruby-1.8.6\lib\ironruby\gems\1.8\gems\rake-0.8.3\bin\rake'.

Argh! What's wrong now? Let's check the path once again. Oops, 'rake-0.8.3' folder contains no 'bin' folder but only the following files:

CHANGES
install.rb
MIT-LICENSE
Rakefile
README
TODO

So this means rake is actually not installed even in native ruby. Let's do it.

>gem install --remote rake


Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed rake-0.8.3
Installing ri documentation for rake-0.8.3...
Installing RDoc documentation for rake-0.8.3...

Ok, fine. Copy installed rake folder to ':\External\languages\ruby\ruby-1.8.6\lib\ironruby\gems\1.8\gems\rake-0.8.3\'. Going back to igem...

>igem install --remote rake


Successfully installed rake-0.8.3
1 gem installed
Installing ri documentation for rake-0.8.3...
Installing RDoc documentation for rake-0.8.3...
Error in template: Index was out of range. Must be non-negative and less than the size of the collection.

Parameter name: index
Original line: <td>%dtm_modified%</td>

Even some error can't upset us seeing line 'Successfully installed rake-0.8.3' =) So let's try irake in action:

>irake


(in D:/information/projects/ironruby)
rake is up and running!

Wonderful :) Irake is up and running. The last thing to do is to is to show that irake is not rake and can work with standard .NET library. Let's modify our rake task to use some .NET code:

task :default do
require 'mscorlib'

require 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
print System::Guid.NewGuid().ToString()
end

Making sure this task doesn't work in standard rake:

>rake


rake aborted!
no such file to load -- mscorlib

And, finally:

>irake


df2869e8-6b24-49d4-8915-424028b9871e

Conclusion:
We've installed irake, configured it to work and wrote a small task that works in it but not in standard rake. Later on I'll try to port some compilation tasks to irake and switch to it from nant in my projects.

Note:
For now, irake call is MUCH slower, than rake call. Hope later on IronRuby guys will speed it up.



kick it on DotNetKicks.com

Wednesday, 3 December 2008

IRake works!!!

YAHOO!

Later on I'll post here how to make it work and feel power of IronRake.

Upcoming Add-on-Con at Mountain View

According to this page IE 8 developers will possibly make crossbrowser extensions creation as simple as it could be. Nice move, actually. Hope this aspect of extension creation will be treated by extension creators just like web developers treat writing crossbrowser websites. This means most good Firefox extensions will be fortunately ported to IE 8 and users will be able to switch to the latter with minimal troubles.

Tuesday, 2 December 2008

Fowler on Rake

A quote from wonderful article:

So far I've found rake to be a powerful and easy to use build language. Of course it helps that I'm comfortable in ruby, but rake has convinced me that a build system makes sense as an internal DSL to full-blown language. Scripts are a natural for building stuff in many ways, and rake adds just enough features to provide a really good build system on top of a fine language. We also have the advantage that ruby is an open source language that runs on all the platforms that I need.

I was surprised by the consequences of flexible dependency specification. It allowed me to do a number of things that reduced duplication - which I think will allow me to make it easier to maintain my build scripts in the future. I found several common functions that I pulled out into a separate file and shared between the build scripts for martinfowler.com and refactoring.com.

If you're automating builds you should take a look at rake. Remember that you can use it for any environment, not just ruby.

Rake forever :)

Python 3.0 rc3

Yesterday I've installed release candidate #3 for Python 3.0. My expectations were high enough and as with all high expectations I did not find what I was intended to find. 'self' in method signatures is still there, for example :( I'll continue my investigations by all my enthusiasm has gone.

Another not very good news is that Python actually doesn't have anything like Rake. Yes, it has some continuous integration tools, but that are far from rake in verbosity. I've found a blog post announcing development of something called 'Pyke' - Rake for Python. The author of it is a real Python fan and the only reason to develop this 'Pyke' for him is to prove that Python is better than Ruby. The latest post about this tool is dated December 11, 2007 that means we're not going to see anything of Rake level in Python world. What a pity :(

Really I like Ruby more, but... But as was stated in my recent post I'm a bit disappointed with Ruby. That's why and only why I'm going to study Python 3.0 and see what it can offer for a Ruby fan.

Monday, 1 December 2008

Microsoft Natural Ergonomic Keyboard 4000

Yes! I've got it! Hurray!

So, now I'm thinking about my second step towards ergonomic workplace. Will it be new mouse, trackball or something else?

Domain Driven Design in the essence

Here goes a small article on the essence of DDD. Being short - dive into the domain, be a part of it. Do not mess with implementation details, think higher. Understand the domain as much as you can.

Sunday, 30 November 2008

Compiler warnings as errors

Do you treat compiler warnings as errors? NO?! How could you? =(

Read how to do that

Ruby is... Visual Basic?!

Did you know that Ruby was a codename for a prototype form generator? And did you know it was bought by Microsoft and later on evolved into Visual Basic language?

Wikipedia

Friday, 28 November 2008

Microsoft NEK 4000

Seems like you can't find this wonderful keyboard in Minsk shops. What a pity =(

Thursday, 27 November 2008

IronRuby alpha 2!!!

YAHOO! Wonderful present from IronRuby creators :)

Looking forward to try irake...

Microsoft Live Calendar

Yesterday I played a bit with Microsoft Live Calendar. Looks like a brother of Google Calendar, a very close one. Really, they have very much in common, though Live Calendar is much younger.

I don't know of any API for it, but soon I'll have to investigate them - we've started a project of synchronizing studies schedules with GCalendar and LCalendar. Hope we'll move as far as our ambitions are :)

Joke :)

Is it true that server with Windows 7 can be easily restored by showering it with a bottle of 7Up? :-P

Wednesday, 26 November 2008

ASP.NET Chart Control

After so many years of third-party implementations we have it! Native asp:chart control that will be shipped with ASP.NET 4.0.

Read about asp:chart

Tuesday, 25 November 2008

Nice browsers comparison

You can view results of other browsers and test your own!

Entity Framework, how could you? :(

Yeah, that's it. Entity Framework has shocked me in the morning. I tried to wrap some legacy code with nice EF function and everything seemed to work fine - model browser showed me stored procedure and it's ObjectContext analogue. But the trick is that it existed only in EF XML mapping, not in C# code =(. After some googling I've found something very frustrating:

Function import code will not be generated if stored procedure it's mapping returns scalar value.

I'm upset :( All is left is to wrap result value with some fake entity. Perhaps, I could have written my own function but it's not the case for framework-that-does-everything-for-you.

Hope this feature (bug! bug!) will be fixed in EF v2.

Monday, 24 November 2008

Microsoft Live Reader

Why - I do ask you. WHY? Why Microsoft has such a beautiful tool like Live Writer and have no tool for RSS reading? Yes, Live Mail includes some tools for reading RSS but I'm really looking for online solution.

Once again - WHY?!

WebMail Notifier

Lately due to my interest in Microsoft new products I've been extensively using Hotmail. It's a pity they can't send incoming letters to GMail and each time I had to visit hotmail page and check for new messages manually. GMail had no such problem as I've been using GMail Notifier for a while. Today I thought of same Firefox add-on for Hotmail. Little googling - and see what I've got:

WebMail Notifier

It's marvelous! It supports all of these: Hotmail, Gmail, Yahoo. I like it :)

I hate XSLT xsl:for-each!!!

I've spent almost an hour trying to find out what's wrong with this xslt file. All I needed was to display list of items each at new line. I've tried simple newlines, concatenated newline with "." in body of "value", added empty xsl:text elements with newline inside, tried &#10;, tried &#xa; - nothing worked!!! And these methods worked fine outside the xsl:for-each element, but inside it... Arghhhh! I tried to use xml:space="preserve" - It helped neither.

After all I started adding '\n' to each item I wanted to be at new line. Yes, it's not view-decoupled but it works and I know there will be no need to change xslt in way this change will break produced result.

P.S. I hate XSLT!!!!

Thoughts on Ruby

Not actually mine, but anyway, mine are similar.
Read not mine thoughts

As for me, Ruby minuses are:

  1. It's slow
  2. No native threads support
  3. It's slow
  4. Minor bugs that sometimes mess me up
  5. It's slow

So these are five minuses of Ruby (it's speed deserves three minuses, for sure) and I don't know if IronRuby will fix these but I really hope to see that.

P.S. Dear kirindave, your post is wonderful but please don't use italics - it's very hard to read. Thanks to my FireBug that allowed me to disable this italics style.

Fresh Books

Yesterday I had a chance to visit a bookshop. That was nice :) First I grabbed some fantasy books and then I've noticed familiar 'Addison-Wesley Signature Series' book cover. It's rather thin though it's very good:



This book covers different topics on continuous integration and gets user acquainted with the de-facto standard for continuous integration: Cruise Control. I'm really looking forward to reading it :)

Another book I bought is:



I've heard many good testimonials about this book so the choice was obvious :)

Friday, 21 November 2008

Haha, Google Analytics is down

It's first time I see this message but I'm really disappointed with it:

>>>>>
An Error Has Been Detected

Please try again. Thank you for your patience.
<<<<<

=(( Seems like Google is not that stable

This is my test post with Windows Live Writer

Wow! I like it :) Clean and easy install and wonderful textpane with your blog style.

Also it supports pasting code from Visual Studio - and that's one of reasons I've decided to switch to this software. Actually it's not built-in and accessible via this plugin but whatever :)

Thursday, 20 November 2008

IE8 features

Here's short summary of IE8 features announced at Microsoft Developer Days in Minsk:

1. JavaScript improvements:
a. Totally rewritten Garbage Collector - performance gain
b. String operations improved - performance gain
c. Collections operations improved - performance gain

2. Development improvements:
a. JavaScript debugging
b. On-fly changing of literally anything at the page
c. JavaScript profiler
d. XMLHTTPRequest now can be cancelled
e. added JavaScript event for connection interrupts

3. Standards and compatibility
a. fully supports W3C recommendations
b. compatibility modes for previous IEs: 7th engine and 5th & 6th emulation
c. HTML 5
d. CSS 2.1

4. User features
a. Web Slices - like RSS, only much better and with visualization :)
b. URL parts are clickable - useful for websites with sitemap
c. each tab is a single process - if it crashes nothing happens to other tabs


Bad news: no IE8 at the end of November :( More details here.

Visual Studio 2010 will have WPF UI!!!

Yeap!

According to information presented for developers at Microsoft Developer Days, user interface of Visual Studio 2010 will be completely rewritten in Windows Presentation Foundation!

Perhaps, it will even have a ribbon :)

P.S. In CTP text editor selection background is _sexy_ :-P

Wednesday, 19 November 2008

Tabs or Spaces?

Do you use tabs or spaces to indent your code structures? I was a huge fan of spaces but recently had a chance to review code written with tabs visualized in Visual Studio. It looks great! :)

Just try it! To show white spaces in Visual Studio use 'Edit > Advanced > View White Space' menu item. Use 'Edit > Advanced' menu to tabify or untabify selected lines - really cool feature when you are converting your old file to your new religion :)

Don't forget to go to 'Tools > Options > Text Editor > All languages' and check 'Keep tabs' radio. Otherwise next time you'll press the Tab key you'll see four dots instead of one sexy arrow :)

To modify color of visible white spaces use 'Tools > Options > Environment > Fonts and Colors > Display Items > Visible White Space'. Try setting color to make them visible enough though not distracting you with visual noice. As for me, I'm using rgb(34, 114, 134) for my modified Moria theme. Looks like this:



You can see them easily yet concentrating on your markup is easy.

Enjoy :)

One day left

Tomorrow I'm going to visit nice 'Microsoft Developer Day in Minsk' event. As for me, the most interesting topics will be VS 2010 and Windows 7. Hope I'll not be disappointed with it ;)

P.S. I'll possibly post here some photos from this event.

Tuesday, 18 November 2008

Windows 7 most discussable topics

Here you can find an interesting article about five most talked-about Windows 7 features. According to this article, they are:
  1. modified UAC (yeap, much more customizable drive-me-crazy-popups)
  2. new taskbar (finally we can sort icons at taskbar. Perhaps, the larger step taken from Win 3.1 :))
  3. HomeGroup - now it will be much easier and secure to share your folders, view Mary's shares, etc.
  4. Libraries - looks like some case of taggable file system. You'll be able to group files by their content, not only drives and folders. As for me - I'd like to see fully functional taggable file system.
  5. Touchscreen - for now I'm not sure how this feature will be useful. Perhaps, in games with horizontally placed monitor it will be useful (Tetris, Spider, Fallout 3... oops, not the case :D). But in routine tasks... I'm not sure. Hope Microsoft knows what it's doing.
And of course I have my own give-me-it! feature. As for me, I'm really looking forward to Vista sidebar controls floating all around here and there. Simplest use - stick notes all around your desktop. Sidebar was just toooo strict to place them all in one place. And here... Yammy!

Monday, 17 November 2008

First step to ergonomic workplace

Yeah! Just added THIS to my wish list:



Microsoft Natural Ergonomic Keyboard 4000

Microsoft Developer Days in Minsk

It's coming!!!

On thursday I'm going to visit this event and make a short photoreport about it. Really looking forward to Windows 7 presentation.

San Francisco Guest

Wow :)

Recently someone from San Francisco has visited my blog. Nice to meet you, American guest :)

P.S. I love Google Analytics :D

Great movies

Yesterday I had a chance to view Wall-E and Max Payne movies. Both are great!

Friday, 14 November 2008

Microsoft free e-books

Wow!

These are cool:
  • Programming Microsoft LINQ
  • Introducing Microsoft® Silverlight 2, Second Edition
  • Programming Microsoft® ASP.NET 3.5
Preview and download

OSC Complains

Oh no!

BBC had recently shown a two minute advertisement for Windows 7, product that yet not exists. OH NO! This will for sure destroy Open Source.


OSC: Mommyyyyyy!... :'(

Thursday, 13 November 2008

Visual Studio 2010 - UML support

Wow! That's it - now it has UML project type. Logical class diagrams, sequence diagrams and some more - I like it!

Though it was confusing how to make 'Implement from class diagram' context menu item work. Seems like it generates code from diagram but in reality it just shows you error with request to configure something I could not find.

Anyway - it's cool :)

P.S. Dynamic keyword is cool!

Using TODO lists in programming

Lately I've found it incredibly useful to have paper notepad with a pen next to my computer. It's really a save-us-all thing! Each time I need anything to do I write it down to this list and when time comes I do what needed and strike this item out. When day ends or some implementation part is ready I like rewriting remaining items to new page - feels like starting from a scratch!

Just try it :)

IronRuby

Downloading latest IronRuby sources - expecting FUN!

Wednesday, 12 November 2008

Happy birthday, my Google Analytics :)

One month ago I've added Analytics script to this blog.

Summary results for this month:

~ 93 unique visitors from 7 countries
~ 83 visitors view my blog under Windows, 8 under Linux and 2 under Mac
~ 55 visitors used Firefox, 14 used IE, 14 used Opera. The rest used Safari and Chrome.

I like statistics :)

Google Alerts to Google Reader

Did you know you may send your Google Alerts to you Google Reader feed?

It's actually WOW! No google spam in your inbox. In GMail you read your letters and in Google Reader you read your news. Simple, baby

GTalk боты

Недавно узнал о существовании ботов-переводчиков в GTalk. Отличные ребята :)

Англ - Рус:
en2ru@bot.talk.google.com

Рус - Англ:
ru2en@bot.talk.google.com

Tuesday, 11 November 2008

Инкубатор бизнес-проектов

Вчера на форуме любимой кафедры запустили Инкубатор бизнес-проектов.

Если вы живете в Беларуси и у вас есть хорошая идея, но не знаете, где взять деньги на ее реализацию - вам сюда!

Я являюсь лидером группы скринкастов и консультантом групп Google и OpenCourseWare. Планы просто глобальнейшие :)

Мой жж опять активен

Сабж

Соответственно, сюда будут лететь больше технические мысли, а туда - раздолбайские.

Раздолбайско-технические мысли будут дублироваться =)

Monday, 10 November 2008

Дни разработчика Microsoft

Регистрация прошла успешно!

 

YAHOO!

Thursday, 6 November 2008

Зарегился в LinkedIn

Судя по отзывам, неплохая социалка для профессионалов. Посмотрим :)

Новая мини-цель в карьере

1. MCTS
2. MCTP
3. MCM

Пока буду готовиться к MCTS, но стремлюсь к мастеру :)

ASP.NET 2.0 client-side validators API

Here

А что нас ждет в будущем?

Давайте прикинем.

Технологии:

JavaScript 2.0
CSS 3.0
HTML 5.0


Браузеры, полностью или частично поддерживающие эти технологии:

Internet Explorer 8 - до конца 2008 года, т.е. осталось меньше 2х месяцев
Google Chrome - по идее, начало 2009
Safari 4 - скоро
Firefox 4 - начало 2009


Новый js значительно облегчит разработку на клиентской стороне, CSS 3.0 обернет это все в красивейшие эффекты, а HTML 5 сделает Web 2.0 намного ближе.

Ждем-с.

З.Ы. Ближайшее - ИЕ8 - ЖДУ!

JavaScript 2.0 - скоро на ваших экранах

Вот здесь интересная статья о будущей версии JavaScript - 2.0. Радует наличие классов в более привычном виде и (внимание!!!) generics!!!!!

Чрезвычано позитивно :)

Чуда не получилось :)

БАТЭ - Зенит    0 : 2

Теперь из шансов разве что выход в кубок УЕФА - если Зенит в следующей игре сольет, а БАТЭ в домашнем поединке порвет Реал. Прямо говоря, шансы маленькие, увы.

Wednesday, 5 November 2008

В напряженнейшей борьбе...

...Зенит вырвал очко у БАТЭ

0 - 1

...пока ;)

БАТЭ-ЗЕНИТ - в процессе

Идет игра. Пока вроде БАТЭшники чуть давят Зенит, но неизвестно еще, что будет.

Зенит фолит по-страшному, Аршавин охренел просто. Я понимаю, им плохо в группе, но это не повод фолить. Понаехало тут...

Fallout 3 по продажам обошел предыдущие части сериала?

Вы что, серьезно? о_О

3я часть сериала, имеющая за спиной мощный пиар и бренд - Bethesda, обошла предыдущие части, которые не рекламировали и которые провалились в продажах?

Ни разу не верю, это какой-то развод.

Источник

Microsoft прекратила продажи Windows 3.x

Источник здесь.

R.I.P.

:'(

БАТЭ против Зенита

Сегодня будет хорошая игра.

БАТЭ на подъеме после последней игры, сделавшей их чемпионами Беларуси. За плечами у них ничья с Зенитом на чужом поле. А на "Динамо" будут сотни своих болельщиков.

Должны победить!

З.Ы. С другой стороны, Зенит приперт к стенке - будет драться как раненый зверь.

Свершилось

Впервые в истории США президентом стал чернокожий. Плохо это или хорошо - не знаю. Скажу лишь, что теперь на нем лежит большая ответственность - если он умудрится развязать войну или ввергнуть страну в еще больший кризис - ой как нескоро следующий чернокожий президент придет к власти.

Я не говорю, что они плохие просто из-за цвета кожи. Я говорю, что они другие. Не хуже и не лучше - просто другие. Равные, несомненно. Но разница есть. И субъективно граждане США будут отторгать чернокожих президентов, если Обама слажает.

Надеюсь, что нет.

Tuesday, 4 November 2008

Мелкий депресняк

Отчего-то почему-то
Грусть свалилась на меня.
Холодный ноямбрь :(

Сертификация от Microsoft

Задумался о получении сертификатов от Microsoft. Все-таки приятная вещь. Хотя, некоторые достаточно крутые программеры считают, что это нафиг не надо - если ты крут, то ты крут, и не обязательно будешь крут если ты крут по сертификату. Логично. Но попонтоваться хочется, так что буду узнавать, что и как :)

Monday, 3 November 2008

Условное компилирование в C#

Вкратце - если пометить метод System.Diagnostics.ConditionalAttribute, то он будет скомпилирован лишь если при компиляции объявлена переменная, которую мы передали в конструктор атрибута.

Т.е. если пометим как:
[Conditional("DEBUG")]

то этот метод скомпилируется (и, соответственно, выполнится), лишь если в коде будет объявлена переменная DEBUG.

Подробнее здесь.

Выходные просто пролетели

С бешеной скоростью =(

Радует то, что хотя бы выспался :)

Saturday, 1 November 2008

Линч нового .NET логотипа

Линч положителен, что не может не радовать.