IDENTITY_INSERT is already ON for table [Table_Name]

January 19, 2010 Errors, SQL 20 comments

I was editing some script in SQL Server Management Studio.

And then suddenly this error appeared:

IDENTITY_INSERT is already ON for table [Table_Name]

So, how did I come to this error?

My script looked like one below:

SET IDENTITY_INSERT [TABLE_NAME] ON

–insert statements

failure on one of inserts because of not existing column

SET IDENTITY_INSERT [TABLE_NAME] ON

 

The script failed on one of the inserts, because of a missing column.

I added a column to fix the problem but then I started getting this error: IDENTITY_INSERT is already ON for table [Table_Name].

I tried to run inserts independently but error persisted.

Why does it happen?

IDENTITY_INSERT works in scope of one session. If you read corresponding MSDN page it says: “At any time, only one table in a session can have the IDENTITY_INSERT property set to ON.”

How to solve?

You just need another session. I simply reconnected to the same database and it run without any issues.

Of course I changed the script to set IDENTITY_INSERT to OFF in the end.


20 comments


I’ve learnt Ruby in Twenty Minutes

January 17, 2010 Ruby 7 comments

Of course not. There is a lot of interesting stuff in Ruby. But at least I tried that quick list here:
http://www.ruby-lang.org/en/documentation/quickstart/

To print something you just need to write puts keyword.

irb(main):001:0> puts “Andriy said something….”
Andriy said something….
=> nil

You could calculate online:

irb(main):002:0> 750*8.05
=> 6037.5

Lets define method to calculate price of one of the Dell notebooks here in Ukraine if price is in Dollars, but you want to know how much it is in Hryvnas.

irb(main):003:0> def exchange(price)
irb(main):004:1>   puts price*8.05
irb(main):005:1>   end
=> nil

Lets use it:

irb(main):006:0> exchange(750)
6037.5

But Ruby is object-orient language. So here is my Exchanger class and I want to initialize it with exchanging rate:

irb(main):001:0> class Exchanger
irb(main):002:1>   def initialize(rate = 8.05)
irb(main):003:2>     @rate = rate
irb(main):004:2>     end
irb(main):005:1>   def exchange(price)
irb(main):006:2>     puts price*@rate
irb(main):007:2>     end
irb(main):008:1>   end
=> nil

@rate is field of that class. Don’t you see that syntax very sweet? I see.

Next, we will create instance of our class with a bit lower rate. And use that instance of class:

irb(main):009:0> ex = Exchanger.new(8.00)
=> #<Exchanger:0x7dd50fc @rate=8.0>
irb(main):010:0> ex.exchange(750)
6000.0
=> nil

“In Ruby, you can open a class up again and modify it. The changes will be present in any new objects you create and even available in existing objects of that class. “
That is amazing as per me, because you could just write code after you have declaration of your class and change intent of it.

You need to try play with Ruby, that is very sweet language!


7 comments


FlyWeight

January 17, 2010 Design Patterns, Java 10 comments

Imagine that you are developing some gaming software. Your write Web client and on each of response you are parsing entire XML to get your game Units. You have some set of types of Units, for example 50 different animals, but when you parse your XML you can get dozens of instances of the same Unit and few dozens of instances of other Unit.
If User of the game is very passionate gamer, he could send requests very frequently. In this case your application will be creating dozens of instances for each of the Unit. But, your units have some static descriptions. For example, Dragon has Attack, initial Health level, and also you need to keep image of the dragon in the object of Dragon.

This all lead to intensive and not efficient memory usage. How could you share common information for all types of Units without creating instances for each individual Unit?

FLYWEIGHT

1) Simplest way with creating objects each time.

We have base class Unit:
 

public class Unit {
    protected String name;
    protected int health;
    protected String picture;
   
    public void setName(String name) {
    this.name = name;
    }
    public String getName() {
    return name;
    }
    public void setHealth(int health) {
    this.health = health;
    }
    public int getHealth() {
    return health;
    }
    public void setPicture(String picture) {
    this.picture = picture;
    }
    public String getPicture() {
    return picture;
    }
}

 
And two derived – Dog and Dragon. To make those objects more weightfull I added to them picture. In my case that is only very long string.

public class Dog extends Unit{
    public Dog(){
        name = “dog”;
        health = 30;
       
        for(int i = 0; i < 100; ++i)
            picture += “I
don’t want to load actuall image, but if we will be creating a lot of
strings on each of the Unit this could be very resrouce taking
operation.”
;
    }
}


And our parser executes code which looks like:

public class Parser {
    public ArrayList<Unit> parse(){
   
    ArrayList<Unit> result = new ArrayList<Unit>();

    for(int i = 0; i < 150; ++i)
        result.add(new Dragon());
   
    for(int i = 0; i < 600; ++i)
        result.add(new Dog());
   
    System.out.println(“Dogs and Dragons are parsed.”);
   
    return result;
    }
}

We want to create only 150 Dragons and 600 Dogs and this takes 28 Mb of memory.

2) How does FlyWeight work?

Lets introduce UnitsFactory. Responsibility of this factory is to manage creation of the concrete flyweight objects (Dogs and Dragons). It verifies if the object has been already created and in this case it just returns created and if not it creates new one and returns it. See:

public class UnitsFactory {
   
    private static Map<Class, Unit> _units = new WeakHashMap<Class, Unit>();
       
    public static Dog createDog(){
    Class dogClass = Dog.class;
   
    if(! _units.containsKey(dogClass))
        _units.put(dogClass, new Dog());
   
    return (Dog) _units.get(dogClass);
    }
   
    public static Dragon createDragon(){
    Class dragonClass = Dragon.class;
   
    if(! _units.containsKey(dragonClass))
        _units.put(dragonClass, new Dragon());
   
    return (Dragon) _units.get(dragonClass);   
    }
}

Lets take a look on UML diagram of our code:

UnitsFactory corresponds to FlyweightFactory, Unit – for Flyweight. Dog, Dragon corresponds to concrete Flyweights in the GoF FlyWeithgt naming.

Now we will do change to our parser to use Factory and will see how much of memory will it take.
But now we are going to create 1500 Dragons and 60000 Dogs, probably your gamer is quite more quick as you think.

    for(int i = 0; i < 1500; ++i)
        result.add(UnitsFactory.createDragon());
   
    for(int i = 0; i < 60000; ++i)
        result.add(UnitsFactory.createDog());
 

       
And this takes only about 5 Mb of memory:

What have I learned regarding to of Java?
I know that corresponding to C# Dictionary is Map in Java, and there are few concrete maps like on this good picture:

Hope this was a good story!

Go to: My Design Patterns Table 


10 comments


Presentation on DDD for my co-workers

January 17, 2010 Success No comments

Among my goals for this year is to become well-known employee in my company. To accomplish this I’m preparing different presentations and looking for some opportunities once they will appear.

On Thursday I provided presentation for my team workers on Domain-Driven Design.
As per me presentation went well, and I much improved my skills doing presentations. I know this at least because we have surveys to evaluate how the presentation went. And rates there were much higher than last time I did presentation on IoC.

I want to list few things that are flying in my mind after that presentation. They are also some tips to how provide effective presentation. (This is not full list, just associated with this presentation.)

DO

  1. Provide the same presentation to your friend. It is great if you have friend who is working in Software Industry also. Actually we have another blog, where we just fixing which stories we made with short agenda.
  2. Imagine your are providing you presentation right now, try to reproduce what you will be saying in your mind. I did this when way on the way to office.
  3. Improve your presentation with restructuring it to the way it will be easily to speak to it.
  4. Have verbose notes to each slide.
  5. Print your story and have it handy on presentation. Just have. I looked there only once.
  6. I kept attention of my audience with collaborating with it, asking questions.
  7. In the end say that presentation was good. Some people could just believe you :)

DO NOT

  1. Don’t wait for answers long. Collaboration with trainees i great, but if you ask question don’t wait long. Start answering yourself.
  2. Don’t ever make people think that you think that they don’t know something. I did one mistake. I said something like “This could be accomplished with FlyWeight design pattern. Do you know what is it?” then we had a bit of silence. But, I’m sure that many people know that pattern. Maybe I asked not clearly. And my mistake “Nothing bad, if you don’t know, the FlyWeight is…”.

REMEMBER

  1. There always be someone who disliked your presentation, maybe few. Why? Because he/she dislike you, but not your presentation. I can do nothing to such people. Just improve yourself and there will be time they will start to respect it (probably you will not have need in respect from such people).
  2. There are always some pessimists. They always find something that was not really good. Just analyze if their observations make sense, and if yes do the best to fix your issues.
  3. In opposite to those people there will be some who will rate your presentation all with max in a minute you sent survey for feedbacks.


No comments


State

January 16, 2010 Design Patterns, Java 2 comments

Imagine that you need to develop application for shipping Orders. Your Orders could be in few states: New Order, Registered, Granted, Shipped, Invoiced, Cancelled.
And there are some rules which allow your Order to migrate to another state. This means that for example you cannot ship not registered Order.
Also there are some behavioral rules. For example you cannot add new Product to your Order when it is in Cancelled state. Also behavioral rules could mean changes in state.

How could you accomplish this requirements easily?

STATE
Allowable states
To be more clear about the behavior of our Order, lets take a look on the next statechart diagram:

We could encapsulate behavior which belongs to current object’s state into separate classes derived from some parent class. Each of the concrete will be responsible for allowing changing state from one to another.

State Pattern UML

State Pattern UML in application to Order problem

Order State

How does it work?

At first our Order class has a reference to its _state, to have more real example Order also has _products.

public class Order {

private OrderState _state;
private List<Product> _products = new ArrayList<Product>();

public void setOrderState(OrderState state){
     _state = state;
}

Order delegates some state-specific requests to the current state.

public void ship(){
    _state.ship();
}

 – If the current state is Granted, it changes Order‘s state to Shipped and if needed do some surrounded work or delegates it.

This code represents concrete implementation of the OrderState. Constructor of base class has Order parameter, so this allows us have reference to holding Order: _order in derived classes.

public class Granted extends OrderState{

    public Granted(Order holdingOrder) {
        super(holdingOrder);
    }

    public void ship(){
        _order.doShipping();
        //next line changes Order’s state
        _order.setOrderState(new Shipped(_order));
    }

If you are care what method ship() is doing in Order class it could be like shipping :).

public void doShipping(){
    System.out.println(“Shipping…”);
}

 – If current state is Registered, most likely that class has no implementation of method ship(), it has only addProduct(), grant(), and cancel(). So method of super class will be called. OrderState has all bulk of methods but they all throw exceptions, which says that changing state in current situation is not allowed.

public class OrderState {

    protected Order _order;

    public OrderState(Order holdingOrder){
        _order = holdingOrder;
    }
   
    public void ship(){
        raiseNotAllowableOperation(“ship”);
    }
    
    //other methods like register(), grant(), etc… here.. 
    //they look like the ship() looks

   
    private void raiseNotAllowableOperation(String operation) throws IllegalStateException {
        String stateName = this.getClass().getName();
        System.out.println(“ERROR: Operation [“+operation+“] is not allowed for current order state: “ + stateName);
        //of course in real system you will probably throw exception
        //throw new IllegalStateException(“This operation is not allowed for current order state.”);
    }

Example of Usage of Order class

Now we navigating to customer code. Our OrderingSystem creates new Order, adds some beer as product and all in correct way:

public void doHardWork(){
    Product beer = new Product();
    beer.Name = “Lvivske”;
    beer.Price = 78000;
   
    Order order = new Order();
    order.printStateName();
    order.addProduct(beer);
    order.printStateName();
   
    order.register();  
    order.printStateName();
   
    order.grant(); 
    order.printStateName();
   
    order.ship();  
    order.printStateName();
   
    order.invoice();   
    order.printStateName();
}

Output:

Order state: designpatterns.state.NewOrder
Product addeding calculation…
Order state: designpatterns.state.NewOrder
Registration…
Order state: designpatterns.state.Registered
Granting…
Order state: designpatterns.state.Granted
Shipping…
Order state: designpatterns.state.Shipped
Invoicing…
Order state: designpatterns.state.Invoiced

Ok, now we added code, which tries to add more beer when order has been already shipped.

    order.ship();  
    order.printStateName();
   
    //trying to add more beer to already shipped order
    order.addProduct(beer);
    order.printStateName();

Output:

Order state: designpatterns.state.NewOrder
Product addeding calculation…
Order state: designpatterns.state.NewOrder
Registration…
Order state: designpatterns.state.Registered
Granting…
Order state: designpatterns.state.Granted
Shipping…
Order state: designpatterns.state.Shipped
ERROR: Operation [addProduct] is not allowed for current order state: designpatterns.state.Shipped

Other ways to solve problem without State Pattern

One of the disadvantages of this you could see many of the classes needed to have:

Yes, but this is the way to greatly encapsulate your behavior. Also there are other ways to resolve problem. For example usage of the table [state|method|state] which is populated with all allowable transitions. You could also resolve issue with having switch-case method. About all of this you could read in Jimmy Nilsson’s book “Applying Domain-Driven Design and Patterns“.

What have I learned?

  • Java has no “virtual” keyword, that is because all methods are virtual. Make sense, cause in C# it is often needed to write huge amount of that word.
  • I discovered few Exceptions that Java has, for example IllegalStateException.
  • I was not able to easily figure out what to use instead of “:” in declaration of derived classed. Now I know “extends“.
  • I improved my UML skills with practicing drawing them.

I hope you enjoyed this story.

Go to: My Design Patterns Table


2 comments


Singleton

January 15, 2010 Design Patterns 3 comments

Imagine that you need some global logging system in your application.
You need to be able log your messages to some file at any point of your application, but also you need to numerate your messages.
How can you accomplish this?

SINGLETON

Class which is represented below is example of Singleton Desing Pattern.

public class LoggerSingleton {

    private LoggerSingleton(){}
   
    private int _logCount = 0;
    private static LoggerSingleton _loggerSingletonInstance = new LoggerSingleton();
   
    public static LoggerSingleton GetInstance(){
    return _loggerSingletonInstance;
    }
   
    public void Log(String message){
    System.out.println(_logCount + “: “ + message);
    _logCount++;
    }
}

You are going to start execute your doHardWork method and you want to log that you just started doing hard work and what occured doing it.

So your functional system could look like below:

public static void doHardWork() {
    LoggerSingleton logger = LoggerSingleton.GetInstance();
    HardProcessor processor = new HardProcessor(1);

    logger.Log(“Hard work started…”);

    processor.processTo(5);

    logger.Log(“Hard work finished…”);
}

As you see there is some class called HardProcessor. We should not really care how it works. All about we should care is that when it is created we want to log this and also we want to log when it is done with some calculations.

public class HardProcessor {
   
    private int _start;

    public HardProcessor(int start){
    _start = start;
    LoggerSingleton.GetInstance().Log(“Processor just created.”);
    }
   
    public int processTo(int end){
    int sum = 0;
    for(int i = _start; i <= end; ++i){
       sum += i;
    }
    LoggerSingleton.GetInstance().Log(“Processor just calculated some value: “ + sum);
    return sum;
    }  
}

Here is output of your programm:

0: Processor just created.
1: Hard work started…
2: Processor just calculated some value: 15
3: Hard work finished…

I wrote this example when was in train with my friend. And I showed him my story and he said that I wrote Monostate. -“Me? Where?”. We took a look at my code and the only one variable I was using _logCount was static initially.

What is the difference between Singleton and Monostate?

Singleton is way to ensure that class has only one instance. Monostage if see globally on it do the same as GOF Singleton. All variables of it are static and this allows you to have many instances of monostate, but of course they will share the same data.
This also resolves many issues with multiconcurrecy usage of Singleton.

Lets take a look at my example once again. Could be that your logger is no so trivial, maybe on start of application you want to open some log file and get latest message number, so logger will continue to write to file with correct numbers.
Also your application is not so trivial. Maybe you are accessing your Singleton not only from just different places in your code but from different threads.
But since your constructor interacts with IO it takes time to construct your instance. So GetInstance() in reality in such situation could create TWO instances. Not really good for your application.
For our luck there are many ways to resolve this issue. Commonly we use Double-Checked Locking.

public class ThreadSafeLoggerSingleton {

    private ThreadSafeLoggerSingleton() {
       //reads data from some file and gets latest number of message
       //_logCount = got value here…
    }

    private int _logCount = 0;

    private static ThreadSafeLoggerSingleton _loggerInstance;

    public static ThreadSafeLoggerSingleton GetInstance(){
    if (_loggerInstance == null) {
          synchronized (ThreadSafeLoggerSingleton.class) {
            if (_loggerInstance == null)
                _loggerInstance = new ThreadSafeLoggerSingleton();
          }
        }
        return _loggerInstance;
    }

    public void Log(String message) {
        System.out.println(_logCount + “: “ + message);
        _logCount++;
    }
}

The way is not single and not all implementations of the DCL work! Read this good article on this: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

Also as you see in method Log I’m using variable of my class and do operation on it, which is almost atomary. But if operations will be more complex you will need synchronization there also.

Go to: My Design Patterns Table


3 comments


Design Patterns

January 15, 2010 Design Patterns No comments

[Update for the 5/31/2011]* 
Here below is what I call “My design patterns table”. It has links to my explanation of 23 GoF design patterns that were initially published in 1994 in book Design Patterns: Elements of Reusable Object-Oriented Software, that has changed the way people think about programming and applying standard solutions to common problems.
I tried to keep my examples of patterns very simple and in the way, that person reading example can build associations with real or close to real world situations. I also translated all of the examples into Ukrainian and at the moment in process of assembling small e-book. Hope you enjoy my examples.

Creational Patterns
Structural Patterns
Behavioral Patterns
Abstract Factory Adapter Chain of Responsibility
Builder Bridge Command
Factory Method Composite Interpreter
Prototype Decorator Iterator
Singleton Facade Mediator
Flyweight Memento
Proxy Observer
State
Strategy
Template Method
Visitor




*As of Jan 2010 this blog post has this at the beginning:
[One of the goals for this year is to familiarize with Java. To accomplish this I have two possilities. First
one is my Master Diploma work in which I’m going to significantly
improve calculations in Self-Organizing Maps with efficient usage of
concurrency in Java Second one is my decision to write my own all of the GoF Design Patterns. And as you guess I want do this with Java. Next
table represents collection of Design Patterns and will have links to
my posts on each of the Pattern. I will fill it soon, no doubts.]


No comments


Don’t lose you mind with references

January 14, 2010 .NET No comments

There could be a lot of stupid troubles with references once you work with set of solutions which of them contains lot of projects.

Here is one of them.

I worked with one simple testing tool (TT) which lives in solutionT.

Testing Tool uses projects B and C in the solution1, i.e. has references to B and C.
(Please note that we are using references by assemblies locations.)

Project B also has reference to some commont project named A.

We moved our common projects both with project A to some other solution2.
Of course we changed references of projects B.
Very nice.

I did a bit of change to the A and wrote test for the B.Tests project and it works well in solution1.
But when I started my TT I got exception I fixed back again. I was thinking how could it be…
I rebuilt all solutions carefully but the same occurred.

Do you know what the problem is?
The problem is that the latest project in the graph i.e. my Testing Tool of course has a reference to a project A and that reference is obsolete, since it has old location…

Bottom line:
When you have troubles with references ensure that latest assembly in your references graph (executable one) has all references which are up-to-date and they are rebuilt. (file timestamp should be enough).


No comments


Domain-Driven Design Quickly

January 10, 2010 Book Reviews No comments

Book Domain-Driven Design Quickly is good resource to get consistent and short explanation to DDD.

I was doing my presentation on DDD and was looking for some source to build presentation quickly. And this book is such source.

I already read Applying Domain-Driven Design and Patterns by by Jimmy Nilsson and almost read Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans after that reading of this book was so much enjoyable and quick (I read it for 3 hours and English is not my native language.)

This book is quick readable summary of Eric Evan’s Domain-Driven Design. And it helps to refresh your memory if you already read that book. But if not:

You could read this book to get a good vision of what is Domain-Driven Design in very short term. If wiki or quick google search doesn’t satisfy you and you have not time for big books, this book is exactly what you need. Enjoy it.



No comments


Things you need to remember to become successful developer

January 8, 2010 Success 5 comments

1. Keep on learning

I assume that you would not even read this blog without having some elementary education and you would not want to know how to become successful developer without higher education. So while you are right now developer why to stop learning?
There is no way to do that. One important thing here: Staying in one place doesn’t mean you are staying there – it means you are moving backward. Walking forward doesn’t mean you are moving forward – it means at least that you are not lost with the losers in the end. To keep going forward you need to learn continuously – not walk, but rather RUN!

Here is my short list:
• Read books
• Subscribe to RSS Feeds and read magazines
• Try out different features you hear about
• Go to seminars and do your own presentations
• Learn everything that can help you move
• Teach others since this teaches you
 

2. Establish what your goal is and keep the right way

Ok, it could be hard to run without knowing where to run. The key point here is that you need clearly imagine your goal. This goal should be long term target, and after you have a vision of your goal, go ahead and breakdown it into smaller tasks – build your roadmap. You may create list of tasks you MUST accomplish per month or per year. Then just follow it.

3. Every challenge is an opportunity

In everyday work you always encounter different troubles. You get issues and bug reports from your QA. You get new tasks from your Project Manager. Your co-worker is asking for help. You need help. These all are challenges. And the real question is: how do you meet them? I have an answer: you need to take them all with passion, because every challenge is an opportunity. You would say “Hey, but this way I will never get off stupid nasty work.” You are 100% not right here. Remember, your bosses will be glad to give you more complicated work once they see you do the best to get your current job done.

4. Be positively charged

You should look at everything in very positive manner. If it is found that you did mistake, just take it easy – everyone does them. Do you like people who start to whine once they have troubles? How do you think you will be looking in others eyes if you say “Ok, guys, I did it – I will solve this, give me a minute.” and turn around and start fixing your mistake with smile on face. After you solve the problem you will be so happy and proud of yourself.
Now your way is good and you are moving fast forward. Don’t ever, ever think that you will not be able to reach your goal.

5. Find a mentor

This does not mean that you need a person who will help you in doing your job – it is a coach or more senior stuff than you are. This means that you need a person who is where you want to be and you need to take a leaf from his/her book. And if suddenly you discover that he is not high enough – you will need to find another. But most of the time you need to have such person. Also have people, friends if you will, who will help you keeping on track. It could be your wife or girlfriend (in my case :) [2011: now wife]), or best friend who always supports you (in my case he is developer, but this doesn’t matter).

6. Be more public

If you will not show others that you are cool and you deserve more, how will they know? There is simple way to do that – start blogging, ask and answer questions, ensure google knows something about you. Share your knowledge in your team and project. If you learned something new, why do not share it. You will forget things if they are not tried and shared.

7. Track your activities; be sure that you are on track

Time to time you need to check if you are doing everything in proper way and in align with your main goal. Verify if you are accomplishing stated goals. If no, quickly find reasons and address them. Find your weak areas and work on them. This sounds funny, but I know a very good developer with strong knowledge, but his coding/typing speed is ridiculously slow. Why? Because he has a bad keyboard and doesn’t want to spend 10-20 hours with keyboard trainer. Isn’t it stupid? Man, if you read this, please promise yourself that you will overcome yourself.

8. Do your gym :)

I did a bit of “brainstorming” when writing this article. And “Do your gym” has fallen there. I’m quite young man and spend too much time with my laptop and with another computer at work and I cannot coerce myself doing gym. But this is just like sharping the blade. There is story about two woodcutters who made a bet based on count of cut trees. One was Strong man and another was Thin. The Strong one was sure that he will win since he was cutting trees like hell 8 hours without single break and since Thin has rest each hour for 15 minutes. But Thin won the battle – he cut 150 per contra 100 of the Strong man. His secret was that he was sharping the blade in breaks. Your health is your axe and if you will keep it blunt you will not be able to cut down your way in your career.

So, let any of your axes be #.


5 comments