April 17, 2011

How to share resources between projects.

It was a very annoying problem with sharing icons between projects.

The solution described here is how to share icons between projects using Visual Studio in correct way. Lets start step-by-step!
1. The correct way in sharing some resources consist in creation of the global shared project. Create new Project with name Resources;


2. Next we must add some resource (e.g some icons) to the project. Do this as usual. Go to the projects setting. Select tab Resources and Add Existing File... to the project. We can see that icon is added to the project and was copied to the local folder;


3. Next step consists of adding this icons to the other project. But one important think! You must add this icon as link. In this case we avoid the resource duplication. OK. Create new Project is same solution and name it for example Main. Create some folder in your other project. For example we can name it as Resource. (Logical name for our purpose). Then right click at this folder. Select Add Existing Item... and choose our image from shared project. Do not forget to add this file as link. Well, you see that just added file can a little differ icon;


Added image must looks like this

4. Now we must set Build Action for this file to None. For this select the file and go to the Properties Window. There choose None for Build Action. We need to do this to avoid  the embedding this icon to the Assembly;


5. Well, we must to perform last step to complete task. Open Project Settings for project where we just adds the icon. Choose the Resource tab and drag linked image to the resources.

 

Yep! These five simple steps you must perform to share some icons between projects. But you can ask "What is the benefits of this?" There are:
  • All resources are located in one place;
  • Resources are not grabbed by projects locally. It means you can substitute some icons is Shared project and they will automatically be caught in all paced where they used;
  • If you share large files, you save the size of your App;
  • In case if you share icons between project you can use this icons in designer mode.

April 13, 2011

GMail addressee feature

Today I found out a very interesting thing regarding GMail addressee name. For example if you have friend with e-mail myfriend@gmail.com you can send the e-mail directly to this address. But it is also correct to send e-mail to the my.friend@gmail.com, or m.y.f.r.i.e.n.d@gmail.com. 
It is very interesting. As I recollect google suggest me some variant of email address separated by dot when I creating a gmail account . But I didn't  pay attention for this at that time.

March 6, 2011

I like this car.. (Golf VI)

This is an amazing car! I like it! I have Golf III, it's cool, but this car...
Just look a video and you will understand what I mean... enjoy..

March 1, 2011

Initializing Arrays

Today I have found for me new method how I can initialize my array. The point of the matter is that user can skip type in right part. For example:
int[] i = new[] { 0, 1, 2 };
Here we can see that int in right part is skipped. As for me this is interesting.. I had been happened to come across this code after "R#" refactored my code..

Also there are two well known method how array could be initialized:
int[] ii = new int[] { 0, 1, 2 };
int[] iii = { 0, 1, 2 };
p.s. live and learn!

November 30, 2010

How to increase speed of DataGridView or using DoubleBuffered property...

A few days ago I finished developing the output window of results. It's a window similar to Visual Studio Output Window. It has a few tabs and one tab was very-very annoying. Why? Because it first performance was very low... This tab is responsible for showing all messages from external compiler what we use to compile some source. For the displaying compiler messages we used standard DataGridView component. I don't like it but his layout is that what I need. When we start our application to have real tests we were sadden. Blinking, flicker, pulling... It was the terrible to think that someone will use this dung... Google is power! But not in this situation. Every query doesn't get appropriate results. Search and search.. Nothing... Only similar troubles with no smart answers. You say I search bad.. Maybe, but in that day I don't think that. In that day power has a stackoverflow. :) Yes, yes, yes... Two minutes and I have a great answer.
public static void DoubleBuffered(this DataGridView dgv, bool setting)
{
    Type dgvType = dgv.GetType();
    PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
          BindingFlags.Instance | BindingFlags.NonPublic);
    pi.SetValue(dgv, setting, null);
}


Only one extension method to DataGridView and that's all. It's amazing..

Blinking, flicker, pulling.. No, no, no... Only smooth, clarity, speed... All what we need.

And only one question stay in my head. Why "DoubleBuffered" property is hidden? Maybe when whe set it to the true our application eats all RAM memory? Maybe our Duo Core Processors will work to the 100% to render data.. Hm.. Practical experience shown that with memory is all right (a little more, but a little) and with processor too.

MSDN says that this property indicating whether this control should redraw its surface using a secondary buffer to reduce or prevent flicker.

October 13, 2010

Express Review of Expression Trees

Yesterday I spoke about the Expression Trees. I must admit that haven't practice with this pretty feature in C#3.0. But after several blogs and msdn info I can tell that this is powerful technology which allows us to create a dynamic scenarios in our programs. To work with expression trees user must has a basic knowlages of lambda expression and understand what is a tree. Calculations in the tree are moves from the leafs to the root of tree. Miscrosoft provides a 56 different actions to use in Expressions. There are Add, Bind, Block, Break, Call, Catch, Coalesce, Continue, Equal, GreaterThan, Lambda, Loop, New, Or , PowerAssign and other.. Expression class has a several derived class such as BinaryExpression, BlockExpression, ConditionalExpression, ConstantExpression, DynamicExpression and other, which separate expression by their type. It is necessary to say that every node in the tree is an expression. Digits or Strings are also expression, to be exact there is an Expression.Constant.
Everybody who works with expression trees must be very attentive. It's too lightly to make some mistake when constuct trees. For example if you write
Expression.Add( Expression.Constant( 2 ), Expression.Constant( 3 ) ); 
 it's correct and represent a (2+3) expression, but the next code will take a runtime exception "The binary operator Add is not defined for the types 'System.String' and 'System.String'."

Expression.Add( Expression.Constant( "ab" ), Expression.Constant( "cd" ) );
It's one of the many cases when successful compilation isn't a successfull execution of the program.
 
Expression trees
View more presentations from Yuriy Seniuk.

Good luck! Try yourself with expression!

October 7, 2010

Plan your time!

Life is too short to live idly...
Чи задавали ви собі коли-небудь запитання скільки часу ви проводите в день нічого не роблячи? Це запитання я задав собі і був вкрай не задоволений своєю відповіддю. Щонайменше 2 години на день я б'ю байдики. Здавалося б 2 години, хіба це багато? Якщо взяти до уваги, що дома містить 24год., з них 7год. йде на сон, 8год. займає робота, 1год. добирання туди і назад, нехай ще 2год. на сніданок, обід та вечерю і залишається 6годин. Отже, 2 години із 6-ти (більш менш вільних) у мене виходить нічого не робити.. 33%. мого часу.
Але як добитися більш продуктивного використання часу? Планування - ось, що нам потрібно.  

  1. Сплануйте свій день заздалегідь. Використайте для цього записник, мобільний телефон із нагадуваннями (я використовую свій HTC P5500), запам'ятовувати я б не став, всеодно щось вилетить з голови, з'являться нові плани, які не дадуть реалізувати уже поставлені. Дуже класно, коли таски, розплановані також по вагомості. Спочатку високо приоритетні, потім менші, потім ще менш вагомі, ітд. Таким чином, щось менш вагоме ззувається на кінець дня, і уже не потрібно хвилюватися, що ви не встигли зробити щось важливе. Особисто в мене будуються плани над якими не потрібно працювати фізично,.. а це зле.. фізична праця не тільки підтримує здоровий спосіб життя, але й допомає розрядитися, відпочити (як це не дивно звучить) від розумової праці. 
  2. Перегляньте години, які використовуєте щоб добратися на роботу/додому. Скачайте цікаву аудіо книжку (я слухаю подкасти), та прослуховуйте її.. Позитив :).. довга й завчена поїздка на роботу перетворилася на миттєву, корисну і цікаву..
  3. Чайок.. Як багато в цьому слові.. Можна потриндіти про щось, послухати байки.. Використайте його в свою користь... подумайте, що б ви хотіли взнати нового і корисного для Вас, та задайте це запитання... Зекономите купу часу на пошук і перечитування інфи..
  4. Шукайте - Знаходьте - Використовуйте вільний час!
Що ж виходить, що можна використати 120% свого часу корисно, чому 120%? Бо використавши ваших 6 вільних годин ви неодмінно знайдете прогалини часу в повсякденній роботі, яка б, здавалося, займає ну ду-у-у-у-же багато часу.. :)

Не марнуємо часу, до діла :)

P.S. а скільки часу займає і-нет?