There is long standing battle between engineers and other departments like marketing. And very often they are going out of sync. For example, engineering team would like to produce nest product and it became quite expensive. Or marketing team forces engineering team to product cheap product and it is not reliable. Sometimes it moves company to quite bad spot. Let me explain in detail.

Long time ago I dreamed about Logitech high end gaming mouse. I thought that Logitech is the best in that area. And some time ago I got it as present. It was great mouse, but left mouse button stopped working after 2 years. It was $120 dollars mouse and to be honest I didn’t even play

  •   Posted in:
  • EV

One thing I don’t understand about electric car is that most of them looks simply ugly.

Let’s take first Toyota Prius for example. It is hybrid car and looks like designers would like to make something “futuristic” and not typical. I don’t understand why they just didn’t use normal sedan shape or in case of hatchback use nicely looking one? And last Prius is even uglier than before.

Another example is first Nissan Leaf. Extremely ugly car. I would understand if that car was extremely cheap, but it is wasn’t that cheap. And I’m totally sure that even with cost restrictions there were possible to make it look much better.

And another example is BWM i3. Another great example of

As you already should know SSD much much faster than traditional hard drives. And if you would like to buy one which should you buy?

Firstly thing, you have to figure out how much space you need. Usually these days I would recommend having around 500Gb SSD drive. You will install Windows and most software that you use everyday on SSD and rarely used stuff or stuff that is ok to be slow or just huge stuff on hard drive. If money is big issue, then you can buy 250GB and depending on how often you start computer per day you can install Windows on SSD or hard drive. I would not recommend buy 128GB drive unless money is huge

Most of us own Wi-Fi router and many of us did own few of them. And here is common list of issues with most household routers:

* Lack of stability. After some time, Wi-fi will go slower and slower, sometimes you cannot even connect or in extreme cases it can disappear completely.
* Freezes. Router will stop transferring data and you will have to restart it.
* Lack of features. Most common home routers have just very basic features. Some of them have more exotic features and but very often they didn’t work properly.
* Lack of extensibility. You cannot add any feature by yourself.
* Short support live. After year or two your router is

Periodically all us need some time to relax and recharge. Some people would like to travel somewhere, some would like to have a party, but most common way is watching TV. You forgot about your problems, you see people on TV that have much bigger problems than yours, you see people doing some stupid things etc. As variant you can go to movie, rent movie etc.

But there are growing thing that previously only used by teenagers but now going to older people and even to senior people as well. I’m talking about computer games.

Let’s compare them. Firstly, compare how you are consuming movies and games.

Most computers games are like movie, but you are not consuming content, you

One of the best features of Windows 10 that you can scroll any window with mouse wheel by just moving mouse over that window and using mouse wheel. You don't need to click on that window to activate it like in previous version of Windows.

Previously I had to use some program that do the same and unfortunately sometimes it creates issues.

One of complications for STA COM interfaces that they have thread affinity and any function from that interface should be called only from that thread. For example, imagine that main thread actively using some COM interfaces. And in some moment GC thread started to release unused interfaces.

But GC cannot call Release function of that interface in GC finalizer thread. GC thread should switch to main thread to call Release. This is quite slow and main thread could be busy. In case when there are a lot of interfaces went on .NET side it can create huge queue of interfaces waiting for their release and there could be some other objects waiting for finalizer to be called.

As mitigate that,

Another thing that developer should be aware when consuming COM interface is apartment. It is quite long topic and I will not explain it in detail. For today discussion let’s talk about STA. If you never use COM interface in .NET from different threads you can ignore this post.

STA means single thread apartment. Normally main thread has STA. COM interface that arrives to .NET runtime usually will be marked as STA. It means that that COM interface will be used only from thread it originally passed to. It called thread affinity. There are ways to change that behavior, but it will be in later posts.

As result when you call any function on STA COM interface and current thread is not one that originally received that interface then .NET runtime will attempt to switch to that thread.

COM in .NET is very tricky to do properly, and it is source of a lot of confusions. It is quite extensive area and I will try to explain stuff I learnt from it. I would like to mention that all that I got from practice and from exploring source code of CLR and call stacks in WinDbg. But some conclusions could be wrong so use it at own risk.

Firstly, we have to start with basics. Let’s talk about case when .NET code consumes some external COM object.

.NET cannot consume COM interfaces directly, so when COM interface crosses .NET boundary runtime will create special structure called Runtime Callable Wrapper (RCW for short) and .NET native objects (it called