Sunday, December 25, 2011

emulator's system partition

To put some extra files to android emulator's /system partition, do not run the emulator from eclipse or the AVD manager.
Instead, use the following command line:
emulator –avd youravdname –partition-size 128

Thursday, December 22, 2011

IIS IP binding

If IIS7 does not listen the incoming connections trying to be made to a particular IP address,
even if the binding is set up correctly, check the
output of the following command:
netsh http show iplisten

The IP address must be in the list to respond the requests.

To add an IP, type in the following command:
netsh http add iplisten x.x.x.x

It seems, that data is stored in the registry:

See for more detail.

Thursday, November 10, 2011

Translation the visualStudio2010 UI names to the human language

EnvironmentBackground - the status bar and the BG of tabs on floating tools
EnvironmentBackgroundGradient* - the backround of the field where the tabs are shown
EnvironmentBackgroundTexture* - pairs of 1px pattern on it
CommandBarMenuIconBackground - the left padding of the drop menus
CommandBarMenuBackgroundGradient* - drop menus backgrounds
ThreeDFace - dialogs
AutoHideTabBackground* - tabs of hidden panels
TitleBar* - the title of a utility panel
CommandShelfBackgroundGradient* - the space where the toolbars reside
CommandShelfHighlightGradient* - the menu bar
ToolWindowTitlebarText -
inactive floating tools tab

Friday, August 26, 2011

Say, you need to return an array of strings from a COM "interop" object implemented on C# to be able then access to its items from a code on VBScript.

The only correct way to do that is make the method to return the VARIANT which is an array of VARIANTs, not strings.
In other words, the return value of the VBScript's VarType() function has to be 0x200C, not 0x2008 ! Only then VBScript will be able to access the array's members.

In the C# terms, you need to make the code look like follows:

public Object f() { // the function returns (VARIANT *)
Object[] a = new Object[3]; // which is an array of VARIANTs
a[0] = "a"; // each of them contains a string
a[1] = "b";
a[2] = "c";
return a;

Thursday, August 25, 2011

cmd variables tricks

Get the variable value with replaced part to some new string:
Get only part of the variable:
%variable:~num_chars_to_skip_from_start, -num_chars_to_skip_from_end%
other variable substitutions can be found in the command-line reference

Sunday, August 21, 2011


In Debian squeeze videos played in the Adobe flash player had no sound.
A solution - activate the virtual "Pulse" audio driver and make it to be the default.
To do that, create file /etc/asound.conf or ~/.asoundrc with the following content:

pcm.pulse {
type pulse

ctl.pulse {
type pulse

Thursday, June 23, 2011

Browser pas

Desperate one behaves vilely. Opera installer v11.11 made that browser default without asking me (I can swear, no questions were asked). To return the IE as default browser (not that I like or use IE for browsing, but to make it start first for test purposes) I had to modify the registry.
As it turned out, the HKCR hive is not a link but a cascade union of the HKEY_LOCAL_MACHINE\SOFTWARE\Classes and then HKEY_CURRENT_USER\Software\Classes. So, modifying one branch, make sure there is no the same in the second place which will override the values.

Wednesday, June 15, 2011

A certification pit

Each time we need renew or issue a new certificate for test web servers it becomes a quest. The certification server is installed on a windows 2003 server and each time it behaves different. I wonder, if somebody noticed that too?
It works differently in different browsers, and does not let you in even with IE until the browser's advanced security property "Enable Integrated Windows Authentication" is off.

Monday, May 9, 2011

USB drive instead of Floppy.

Some things beyound my understanding. Here is a story. After a windows update on our DELL server, windows 2003 refused to boot, even in the safe mode. We decided to run the recovery from the installation DVD. But the problem instantly occured - the installer did not recognize the DELL's PERC/5i RAID controller. The machine did not have a floppy drive (even though the motherboard actually has a floppy connector on it). We contacted the DELL tech support and were told to put the PERC driver to a USB flash drive using special utility available also to download (the content of the drive was gone, so saddly to say). Then, standard F6 key worked and the installer saw the driver on the USB drive as it was a floppy disk.
How it did that? No clue.

Friday, April 8, 2011


How to make a .NET class library be accessible as a COM object?
  1. Create a new .net class library project for the wrapper
  2. Declare the class as "ComVisible":
    using System.Runtime.InteropServices;
    [ComVisible( true )] public class ClassName
  3. Generate the Keyfile:
    C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\sn.exe -k "keyfile.snk"
  4. Set the project property to sign the library using the generated keyfile
  5. Generate the Registry entry with the path to the library .dll as the "codebase":
    regasm.exe %TRGDIR%\LibName.dll /codebase
    Specify also the /tlb option if the library is to be imported by the C++ #import directive
  6. Check the registry has the ProgId: LibName.ClassName and refers to the CLSID which has the "codebase" path to the LibName.dll

Friday, April 1, 2011

min-height in IE

All the standard browsers have the min-height CSS property, but IE has it only in the strict !DOCTYPE mode (which is a nightmare) and it does not work properly anyway.
As a workaround, we can do the following
1) Specify the min-height which is ignored by IE
2) Specify the "hight" for IE only.
How to make the other browsers to ignore the "height"?
There are at least two solutions found:
1) Make a weird selector path, like:
* html .dd_h { height: 18px; }
(.dd_h is the class name for the object which need the min-height)
2) Add the style property with an underscore ahead:
.dd_h { min-height: 18px; _height: 18px; }
In some reason IE processes such property as usual, and of course it's ignored by proper browsers.


Tuesday, March 22, 2011

Android versions we have

Android developer console has a new statistic feature.
In that we can see the current Android's version distribution:
Android 2.2 - 57.8%
Android 2.1 - 29.0%
Android 1.6 - 6.8%
Android 1.5 - 4.9%
Android 2.3.3 - 0.6%

Gingerbread already available for 5 month (from when it was first introduced), and still has a tiny share.
Will the other makers start to install it on their devices some day or it will never happen due the enormous Gingerbread ugliness?

Saturday, March 12, 2011

GMail advanced IMAP

GMail was quite annoying placing all the old emails to the "All Mail" folder.
I don't care if they want to archive them but I do care when my IMAP client downloads all the oldies each time and keeps the huge copy on the local storage.

Praise all gods, that can be fixed. As described in the following article:

In short, just go to the settings, then to the "Labs", and enable the "Advanced IMAP controls". Then go to the "Labels" and uncheck the "All Mail - Show in IMAP" checkbox.
That's it. The mail client won't see that folder anymore!

Tuesday, March 1, 2011

Excel needs the Desktop

To make Excel automation works from IIS:
Excel uses the "Desktop" folder for something.
Even though IIS execution right personalized to an user specified in the application pool advanced settings, Excel still executes in the system environment, so, we need to create the desktop folder for it:

read more at:

Also, give proper rights to the folder "C:\Windows\System32\config\systemprofile\" and to the Excel's DCOM properties (go "Administrative Tools/Component Services") to the user which executes Excel

To run the DCOM config:
When the office has the same bits as the OS:

When 32bit office on 64bit OS:
mmc comexp.msc /32

Note! Even if the caller 32bit and the Excel is 64 bit, it should work fine, since the Excel object is called via DCOM.

Also! The Excel need a valid accessible printer to produce documents.
Make sure the default printer has enough permissions which allow the IIS user to print on it.

Saturday, January 22, 2011

about code optimization

You can not reduce the entropy. I redesigned a big chunk of code, shrank the file size by 200 lines (from 1400 to 1200), and the resulted .class file remained the same size.

Tuesday, January 18, 2011

If you need to send a BLOB to a HTTP server using vbscript, then you need
pass to the send() method the stream. But if it's multipart/form-data format, aside of the binary data the POST body should contain also boundaries and other metadata.
So, we have to store in a stream text data then binary then again some text.
It can be done by using the ADODB.Stream object.
It`s type (binary or text) can be converted dynamically, during the writing.
But! Before the setting the new type, the position has to be set to 0.
It can be then restored, after the type conversion to value taken from the stream.Size property.

option explicit

dim stream, file_loader, file_name, bnd
set stream = CreateObject("ADODB.Stream")
set file_loader = CreateObject("ADODB.Stream")
const adTypeBinary = 1
const adTypeText = 2
stream.Type = adTypeText
stream.CharSet = "iso-8859-1"

= "boundary"
file_name = "test.png"
stream.WriteText( "--" & bnd & vbCrLf & _
"Content-Disposition: form-data; name=""the_file""; filename=""" & file_name & """" & vbCrLf & _
"Content-Type: application/octet-stream" & vbCrLf & vbCrLf )

stream.Position = 0
stream.Type = adTypeBinary
stream.Position = stream.Size

WScript.Echo "Position before file loading: " & stream.Position

file_loader.Type = adTypeBinary
file_name )

file_loader.CopyTo stream

stream.Position = 0
stream.Type = adTypeText
stream.CharSet = "iso-8859-1"
stream.Position = stream.Size
WScript.Echo "Position after file loading: " & stream.Position
stream.WriteText( vbCrLf & "--" & bnd & "--" & vbCrLf )
stream.Position = 0
stream.Type = adTypeBinary

dim http_req
set http_req = CreateObject("WinHTTP.WinHTTPRequest.5.1")
'WinHTTP.WinHTTPRequest.5.1 better than Msxml2.XMLHTTP because it lets you override the http headers
call http_req.SetProxy( 2, "" ) ' for Fiddler proxy
call "POST", "", false )
call http_req.send( stream )