Milton's profilePlace4U..Pace4U....PhotosBlogListsMore Tools Help

Blog


    CoSetProxyBlanket, COM client impersonation to IUnknown level granularity.

     

    Unable to make a VS2005 COM API call from a web service because CoInitializeSecurity is already called by the .NET framework? Thats where CoSetProxyBlanket comes.

    STDMETHODIMP CVSHelper::SetGuestParam(BSTR ServerName, BSTR VMName, BSTR ParamName, BSTR ParamValue, BSTR* ErrorDesc)
    {
        HRESULT hr = CoInitializeEx(NULL,COINIT_MULTITHREADED);
    
        REFCLSID classID = _uuidof(VMVirtualServer);
    
        IVMVirtualServer* pIVS = NULL;
        
        if (ServerName == NULL){
            hr = CoCreateInstance(classID, 
                              NULL, 
                              CLSCTX_ALL, 
                              IID_IVMVirtualServer, 
                              (LPVOID*)&pIVS);
            if (S_OK != hr)
                return hr;
        }
        else{
    
            CComBSTR    serverName(ServerName);
            MULTI_QI    multiQI = { &IID_IVMVirtualServer, NULL, NOERROR };
            COSERVERINFO  serverInfo = { 0, serverName, NULL, 0 };
            hr = CoCreateInstanceEx(classID, 
                                NULL, 
                                CLSCTX_ALL, 
                                &serverInfo, 
                                1, 
                                &multiQI);
    
            if (SUCCEEDED(hr))
                pIVS = (IVMVirtualServer*)(multiQI.pItf);
            else
                return hr;
        }
    
        hr = CUtils::SetProxyBlanket(pIVS);
        if FAILED( hr ) 
            return hr;
    
        IVMVirtualMachine* pIVM = NULL; 
        IVMGuestOS* pIVMGOS = NULL;
    
        _bstr_t bstrVMName(VMName);
        hr = pIVS->FindVirtualMachine(bstrVMName, &pIVM);
        if (FAILED(hr));
        else
        {
            
            hr = CUtils::SetProxyBlanket(pIVM);
            if FAILED( hr ) 
                return hr;
    
            hr = pIVM->get_GuestOS(&pIVMGOS);
            hr = CUtils::SetProxyBlanket(pIVMGOS);
            if FAILED( hr ) 
                return hr;
                    
            _bstr_t bstrName(ParamName);
            _bstr_t bstrValue(ParamValue);
            pIVMGOS->SetParameter(bstrName, bstrValue);
    
        }
    
        if ( NULL != pIVS ){
            pIVS->Release();
            pIVS = NULL;
        }
    
        if ( NULL != pIVM ){
            pIVM->Release();
            pIVM = NULL;
        }
    
        if ( NULL != pIVMGOS ){
            pIVMGOS->Release();
            pIVMGOS = NULL;
        }
    
        return S_OK;
    }
    
    HRESULT CUtils::SetProxyBlanket(IUnknown* proxy)
    {
    
       return ::CoSetProxyBlanket(proxy,
                                       RPC_C_AUTHN_DEFAULT,
                                       RPC_C_AUTHZ_DEFAULT,
                                       COLE_DEFAULT_PRINCIPAL,
                                       RPC_C_AUTHN_LEVEL_DEFAULT,
                                       RPC_C_IMP_LEVEL_IMPERSONATE,
                                       COLE_DEFAULT_AUTHINFO,
                                       EOAC_DEFAULT);
    }
    
    

    Milton KB (Milton K Baby)

    Talking about the i'm campaign

    Quote  

     

      

    Check if an active directory domain user belongs to a given Group

     

    public static bool CheckIfUserinGroup(string userName, string groupName)
    {
        string path = "";
        if (username.IndexOf('\\') > 0)
            username = userName.Split('\\')[1];
    
        DirectoryEntry entry = new DirectoryEntry(null, null, null, AuthenticationTypes.Secure);
        try
        {
            DirectorySearcher search = new DirectorySearcher(entry);
    
            search.Filter = "(SAMAccountName=" + userName + ")";
            search.PropertiesToLoad.Add("cn");
            SearchResult result = search.FindOne();
    
            if (null == result)
                return false;
            path = result.Path;
        }
        catch (Exception)
        {
            return false;
        }
    
        DirectoryEntry entry1 = new DirectoryEntry(path);
        DirectorySearcher search1 = new DirectorySearcher(entry1);
    
        search1.PropertiesToLoad.Add("memberOf");
    
        try
        {
            SearchResultCollection src = search1.FindAll();
            foreach (SearchResult sr in src)
            {
                PropertyValueCollection pvc = sr.GetDirectoryEntry().Properties["memberOf"];
                object[] values = (object[])pvc.Value;
                foreach (object value in values)
                {
                    if (value.ToString().Contains(groupName))
                        return true;
                }
            }
    
        }
        catch (Exception)
        {
        }
        return false;
    }
    

    Cheers Milton KB  (Milton K Baby)

    LINQ

     
    A simple SELECT query in LINQ to select a set of items from an object collection. This sample code fetches all available NT services in a remote machine and filters the collection for a specific service.
     
    ServiceController [] scs = ServiceController.GetServices("machinename.ursubdomain.urdomain.com");

    var crypto = (from service in scs where service.ServiceName == "CryptSvc" select service).ElementAt(0);

    string name = crypto.ServiceName;

    string status = crypto.Status.ToString();

     

    MSDN sample collection: http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

     
    Cheers
    Milton KB
     

    Powershell FAQs

    Q: Struggling with error ".ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about signing" for more details." while executing .ps1 powershell script file command prompt using powershell.exe?

    A: Type C:\>Powershell.exe Set-ExecutionPolicy RemoteSigned  and press enter. Then execute your .ps1 file. - C:\>powershell.exe helloworld.ps1

     

    Q: While executing helloworld.ps1 script returns immediately without waiting for me to see the output printed. Is there anything like getch() or cin ?

    A: Yes, Powershell.exe –noexit &"c:\My scripts\helloworld.ps1"

     

    Q: How to disable Network Card/NIC using powershell.

    A:

    $adapters=Get-wmiobject win32_NetworkAdapter | where {$_.AdapterType -like 'Ethernet*'}; 

    foreach ($adpter in $adapters)

    {

     $adpter.Disable();

    }

    $adapters=Get-wmiobject win32_NetworkAdapter | where {$_.PhysicalAdapter -eq 'true'};

    foreach ($adpter in $adapters) { $adpter.Name };

     

    Cheers

    Milton KB

    Bi bi to Boston ....

    Its 2.04 am, 31st of May 2006 just came back from office. I am going back to India today morning.. My last workingday was so scrambling... so many things to close out ... literally screwed up. Even my manager was sitting with me till 2AM in the morning .... ok... gotta go to bed... a nap before getting into the flight ...

    Long weekend, all plans flopped...

    This is a long weekend because of Memorial Day, its holiday here in US. We all had planed for a long trip to Washington DC, Virginia and all. Everything was planned three weeks back. We were six and had booked an SUV. But at the last moment I had to drop the plan. There was no other go.

    Actually the module which I was working on is about to release in the mid of june. Its is a stand alone win32 application in MFC/ATL which processes million of records. They want us to test the application with live data before I go back to India. I am going back to India this month end.   ... So I haven’t had other options other than staying back. I felt so sad in the evening when everyone left office by 3pm. I was alone in the office. I really wanted to go with them as this will be my last trip with them. Hmm…. everything blew up just like that.

    By Thursday morning Tom (VP of software and product developemnt) came to me and asked “Milton do you have a second” this is his typical way of calling for meetings. Then he would say "Walk with me". He took me to the cafeteria, opened one soda and walked around the whole office by looking for a meeting room. Oh ya …found one. We got into the room. He closed the door and started. “Milton I Know you all have planned a lot for the long weekend, But you know what, we are abut to release the product and in your module, you are the only one who handled everything and you are the only one who knows about it. So can I ask you to stay here this weekend? “Bhoooom… actually I haven’t had any idea what to say. But, I couldn’t say no as well, because he is a very nice guy, he never asks like this unless it is that emergency. So I agreed with great disappointment. Immediately after this meeting, my lead xiaodong also called and asked the same. So finally I confirmed to drop my plans.

    Not only that, the module that I did, had major challenges during the development. I put lots of effort to make that working. After all this, if I step back in the last moment, it would be really bad. I know dropping the trip and moving out of the team also is equally bad... but I donno I choose my module. My friends all fought with me about my decision.   But there was no other go L …..

    Milton KB

    Bday celebration conts....

    Today I gave a party to all my friends at office. We went to an Indian restaurant in Lexington. I expected fifteen but only 10 was there. It was pretty awesome there. Party continued around one n half hour. I started with my favorite Indian drink - King fisher. One girl got rejected from drinking as she hasn’t had her ID card. Party went around 10.30. We back at home by 11pm. So one more celebration... Happily ended. So goodnight all.. I am gonna sleep.

    Milton KB

    May 23 today is My Birthday

    Today is May 23, 2006. Many many happy returns of the day. I was just wishing myself It is my birthday today. I just completed my 27 years over here in earth. Now running on 28th. Morning 12AM onwards my friends joined me in celebrating. By 12’o clock in the night, hemanthu my roommate called me to down stairs just like that. I was chatting with my fiancée saby. She wished on yahoo... She didn’t call me over the phone because she made a great blunder one day before. She put alarm for 12am and called me up in the midnight of 22nd. She thought it was 23rd over here. Poor gal, I teased her a lot. she was shy to call me up again. So today I called her back after my friend’s celebration. They bought me a cake, I guess Nishant and Hemanthu went and bought the cake from Shaws. They smashed cake all over my face... it was fun...   After all I went to bed by some 1.30 am. Parents and brother wished me in the morning.  

    After office we went to a nearby pub – Piccadilly. It was so rush that we didn’t get any chair. So went another place called Uno Pizzeria. Mysef and two of my friends went there. I had one Guinness short and one budlight. They also took their favorites.  Happily came back by 10.30PM. So the birthday is over... birthday celebration is not over but. I have to give a party to all. Actually my boss Chandra doesn’t have time today. So we postponed the party for tomorrow.. Now it is 11.15pm only.. But still I am feeling so sleepy… gonnna sleeeep.. Hmmm I donno what I wrote over here. so tiered.. anyway ….. Gonna sleep… goodnight all…

    Milton KB

    Fully wet WorkerThread<CRTThreadTraits> in Boston rain

    So one more week is about to a conclusion. No plans for the week-end yet. Always unplanned plans play better. Lets me see.. Actually I have tones of things to do this weekend. I am flying back to India this 31st for marrying my sweet heart. I have to do some shopping before I go. Then packing up everything, have to call all my friends.. so and so… lots of thing to do... I have made an excel sheet with a list of To-Dos J.  I am going to back to see and marry my sweet heart. We are about to meet after year break. Since then skype and google talk was the mediators. Thanks a lot.

    Overall this week had a nice awesome climate. In the spring it was raining the whole week almost. Even today too. But its not a heavy rain. Non stop light shower.  Some what similar to Seattle climate, Good for curl on the couch. Last year I was at Seattle this time.  But I do like this climate. This natural cooling with a light showering. It’s pretty nice to walk around.

    Though it was so awesome climate I couldn’t really enjoy it as I as I got tied up with our upcoming beta release. The whole week I was working on tweaking my module. It’s an MFC ATL application which deals with millions medical claims.  I believe I did an excellent job. A pretty nice UI fully optimized middle tier components in ATL and the database layer too. Its Multi threaded, hyper threaded business rule processing cut shorted the processing time of these millions of records into 13 minutes, that’s on quad processor 4 GB machine.

    I have tried almost all new classes released in ATL7. WorkerThread<CRTThreadTraits> is the topper, the genius. It’s a smart wrapper over the win32 thread. I had a real pain on the neck to make it working, major issues. No where in the net I could find even a single sample code on how to use this freaking thing.  Not even single!!!!. I tried the url http://www.google.com/search?hl=en&q=CWorkerThread+CRTThreadTraits and couldn’t find even one!!!!!!!!!!. After two days of struggling I thought of dropping the plan and to go for Win32 threads. But still my mind didn’t allow me. I asked myself... can’t you fix it? ...Hmmmmmmmmmmmmmm… Ok… yaaa .let me try one more shot. Yesss that hit the right spot. I could make it. I am compiling an article on this. Will upload soon in to codeproject. I don’t want anyone else to waste time on this.

    Milton KB 

    Accessing User Control/ Server Control from JavaScript

    Though I am not a web developer by profession there are times I write web pages too and I do well with ASP, ASPX and Jscript. Last week I was doing an enhancement kind of stuff to integrate with share point server. The module was to list files in a network drive recursively. Then user can select set of files from the list and click upload. This will upload the selected files from the network drive to the share point server. Here I need to put a JavaScript to select all the chkboxes when the user click on chk all button. This part was in an ascx and hence the ID got changed.  I had the same problem before. The server conrol’s Ids are getting changed when it renders to the client.

     

    In traditional asp and even in aspx we can access server controls and html controls as well using the document. all() or document.getelementbyid() calls. But if the controls are in an ascx then it is different story. ASP.net engine will compile the aspx and will replace the ids with the auto generated ids by adding the controlId. It makes these ids inaccessible to the javascript written in the html. Last time I overcame this by iterating all the controls and by checking the substring of each child controls in the DIV, I know this is absolutely wrong. But I haven’t had time to spend. This time I thought of putting some effort and see whether there is any better option.

     

    My boss found it first. There is something called ‘ClientId’ This is a property which all server controls has. We can use this property with Page.RegisterClientScriptBlock. There is a nice article on this @ http://www.codeproject.com/aspnet/resource_files_in_asp_net.asp

     

    Milton KB

    A Security neutral Mutex class for Managed Platform

    A short time ago one of my friends came across an issue of getting the access denied error while creating a mutex object in a web application. This asp.net – c# web application is on windows authentication and impersonation set to true. The same code works well if Impersonation is set to false. I have uploaded an article on this issue

    http://www.codeproject.com/useritems/MutexSecurityNuetral.asp

     

    This article intends to introduce you a new Managed Mutex class MutexSecurityNeutral. The existing .net framework provided System.Threading.Mutex class has the limitation of using under only one security context, the one under which it is created. Once it is created under a specific security context, it can’t be opened/created under a different user/security context. Here it is a workaround for this problem - The MutexSecurityNeutral class.

    The basic idea is to create a Win32 kernal Mutex object by specifying the security descriptor with a NULL DACL. A NULL DACL in the security descriptor means that “Every one All access”. Well, I admit the fact that creating a Kernal object with NULL DACL is a possible entry point for a DoS (Denial of Service) attack. It is solely up to you and the security criticality of your system to decide upon this.

    Below is the managed C++ wrapper class:

          namespace SecUtil

        {

            public __gc class MutexSecurityNeutral

            {       

            private:

                CMutexSecurityNeutralUnmanaged* m_CMutexSecurityNeutralUnmanaged;

                String __gc* m_MutexName;

            public:

                MutexSecurityNeutral(String __gc* MutexName):m_MutexName(MutexName){   

                    m_CMutexSecurityNeutralUnmanaged = NULL;

                }

                ~MutexSecurityNeutral(){

                    delete m_CMutexSecurityNeutralUnmanaged;

                }

                bool WaitOne(){               

                    char __nogc* szMutexname =

                       static_cast<CHAR *>(Marshal::StringToHGlobalAnsi(m_MutexName).ToPointer());

                    m_CMutexSecurityNeutralUnmanaged =  new                

                      CMutexSecurityNeutralUnmanaged(szMutexname);

                    bool  bRtn= m_CMutexSecurityNeutralUnmanaged->WaitOne();

                    Marshal::FreeHGlobal( IntPtr((void*)szMutexname));

                    return bRtn;       

                } bool

                    Done(){ returnm_CMutexSecurityNeutralUnmanaged->Done();

                }

            };

        }

       

     

    Associated unmanaged class is:

     

     class CMutexSecurityNeutralUnmanaged

        {

        private:

            const char* m_szMutexName;

            HANDLE m_hMutex;

        public:

            CMutexSecurityNeutralUnmanaged(const char*  szMutexName):m_szMutexName(szMutexName){

                m_hMutex = NULL;

            }

            ~CMutexSecurityNeutralUnmanaged(){

            }

             bool WaitOne(){

                bool rtn = false;

                SECURITY_DESCRIPTOR sd;

                SECURITY_ATTRIBUTES sa;

                try{

                    if (!InitializeSecurityDescriptor(&sd,

                                 SECURITY_DESCRIPTOR_REVISION))

                        return FALSE;           

                    if (!SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE))

                        return FALSE;

                    sa.nLength = sizeof(sa);

                    sa.lpSecurityDescriptor = &sd;

                    sa.bInheritHandle = FALSE;

                    m_hMutex = CreateMutex(&sa, true, m_szMutexName);

                    WaitForSingleObject( m_hMutex, 10000L);

     

                    rtn = true;

                }

                catch(...){

                    rtn = false;

                }

                return rtn;

             }

             bool Done(){

                 bool rtn = false;

                 try{

                    ReleaseMutex(m_hMutex);

                    CloseHandle(m_hMutex);

                    rtn = true;

                }

                catch(...){

                    rtn = false;

                }

                return rtn;

             }

     

    How to use the managed class from C#

     

          SecUtil.MutexSecurityNeutral mutexsecurityneutral = new SecUtil.MutexSecurityNeutral("yourmutexname");

        mutexsecurityneutral.WaitOne();

        nSharedResource++;

        mutexsecurityneutral.Done();

     

     

    All Win32 kernel objects are associated with a particular user/security context. Thus in the case of a Win32 mutex object which is created under a particular user security context can’t be re created / opened under a different user context. If I rephrase it, these kernel objects have a user affinity. In a desktop application scenario it may not be a concern as all programs generally runs under the logged on user context unless otherwise it is impersonated programmatically. But if we are using a mutex like kernel objects in a web application scenario with impersonation set to true, things are different. This does make trouble.

    So as web developer what is the impact on you because of this Kernel objects user affinity? .net provided (both 1.1 and 2.0) System.Threading.Mutex class can not be used under a web application with Windows authentication and Impersonation set to true. The Object creation will fail with Access denied error. As an alternative you can use this MutexSecurityNeutral class provided it has the security vulnerability loop hole of using a NULL DACL. I repeat, it is solely up to you to decide whether to use this class or not.

    Milton KB

    Milton KB @ Wachusetts Mountain MA

    Oh I forgo to tell. Last Sunday we went for a hiking to Wachusetts Mountain in Massachusetts which has the longest T-bar in New England at 3,800 feet. We started at morning 8o clock. We were total seven.  Few of us totally got tiered as it was the first hike for them. We reached the top by 11.30. It was pretty pretty cool climate the whole day and was an awesome view on the top. We took lot of photos. Actually it was a photo session as well for few of us. One of my nice friends, for a long he is looking for a gal to marryJ. He just wanted to upload his new photos to shaadi.comJ matrimonial site. He was smart before.. but now he is smarter .. he was working out very hard in the Jim .. lost nearly 10kg weight. Now he looks really like South Indian film star Kamal Hasan in kuruthipunal action movie.  May god bless him with a  Gouthamy J

     

    Milton KB

     

    Windows2003 - Dell 710M Back on Track thru Backdoor

    Got a work around for the Win2003 – Dell 710m issue. It’s like a poor man’s LAN network through serial port – RS232  J .

                                                                                   

    The whole week, I was crying this tragedy to whoever I see. Finally one of my friends gave me that sparkling idea. Install VM and try Win2003 in VM. J J . I ran to home, downloaded VM, and tried Win2003 in VM.

     

    Yes that worked!!!! Thanks god who came to me as one of my friend. I installed all application servers and development tools to 2003. Now almost running a happy married life with XP, 2003 and Vista on my 710m. Hope Saby won’t come to know about this relation. She is my fiancée, we are about to marry this July. Our marriage date is like Vista release date. It is getting postponed for the last two years. Finally everything and everyone came altogether and decided the new date on March of 2006. Due to some un-avoidable reason again postponed to may end. Then last week we all together, decided the release date, July. So July is the current release dateJ . I pray let we be blessed to get it released on time.

     

    Milton KB

    Inspiron 700m / 710m and "Windows 2003 Server" Dell cheated

    I became just another victim of Dell 710m.

    I got my new Dell 710m yesterday. Fully loaded, top most configuration available as of today ( 1.7Gz, 2GBRam, 100GB 7200Rpm ). It was preloaded with Xp home edition. I partitioned and installed Xp professional. It went well. Next turn is Windows 2003. Even if I went for this 12’’ laptop it is 100 percent for development purpose only. My previous one was an IBM R51 14’’. I thought of going for a cute one. Small is beautiful right? But that really sucked.

    First time installation hanged while “Installing Devices” step. Progress bar status was “34 minutes remaining”. I rebooted and tried. Again hanged at “34 minutes remaining”. May be something with the copy that I have? Reasonable doubt. I logged into the MSDN subscription and downloaded a fresh copy of Win2003 R2 enterprise. Third trial with fresh copy. Again stucked up at the same damn place at “34 minutes remaining”.

    I called up Dell support. They said that heart breaking news “710m doesn’t support Win2003, other wise, I can contact Microsoft and see whether they can do some thing”. I totally stunned.. its too much man. I started goggling and got Only one link pointing to the dell community Forum.

    Luis Perez, Chief Technologist/Owner of ISHNETWORKS LLC posted an alternative. http://forums.us.dell.com/supportforums/board/message?board.id=sw_win98&message.id=48784&jump=true#M48784

    But it didn’t helped me. I changed the Hardware type as STANDARD PC in the first screen by pressing F5. But after one minute of file copy it said “Error in memory , try disabling the Memory caching in BIOS or contact hardware vendor.

    It so so saaad… Hope Dell will come up with a patch … when? :-) … god knows… I had lots of expectations .. installing all server side applications and everything into the new cute 710m. everything went off ..just like that. its toooo bad.. its toooo bad..

    Milton KB

    Thanks to new Sql server 2005 functions PARTITION BY and NTILE

    Thanks to new Sql server 2005 functions PARTITION BY, NTILE etc. In our old Sql 200o days, it was a real pain on the neck to calculate the rank for each record in a set or to divide a dataset into n buckets.

     

    No more worries as Sql 2005 comes with set of very handy ranking functions like NTILE, RANK, DENSE_RANK, ROW_NUMBER etc...

     

    In my current project I have been going through a real pain to break down a large dataset into n number of buckets based on a column in it.

     

    One more thing is, my requirement is not just breaking down the entire set into n buckets based on a key - (NTILE is there for this). But what I need is, first to group the set based on another key and break down each grouped subset of the superset. For this NTILE required some hot spices on top of that:

     

    You know what is that hot spice? The "PARTION BY" clause...Here u go.

     

    SELECT SalesPersonID, TerritoryID, NTILE(4) OVER(PARTITION BY TerritoryID ORDER BY SalesYTD DESC) AS 'Pos' from Sales.SalesPerson

     

    This TSQL will group the Sales.SalesPerson dataset by TerritoryID and each group will be divided into 4 and assign the position as POS. Here the SalesPersonID with largest SalesYTD will get a POS value as 1 and next Sales.SalesPerson will be second and so on.

     

    Or else you want to assign the Position in the reverse order:  I mean highest sales will get the largest POS number. Here in this case 4 instead of 1. Then change the query to:

     

    SELECT SalesPersonID, TerritoryID, SalesYTD, ((NTILE(4) OVER( PARTITION BY TerritoryID ORDER BY SalesYTD DESC) -5)*-1) AS 'Rank' from Sales.SalesPerson

    Inaugural ceremony

    Welcome Gentlemen

     

    Now It is 4.30PM, Feb 26 eastern time, Waltham, Boston Massachusetts. This is the last Sunday in the last February of 2006. I bet you can’t find any more Sundays in this February. Not joking … I am serious.

     

    As usual I woke up at 6am, had bath and brush... Rushed to kitchen.. Had some fruits and a glass of Soy milk. Today is my mother in law is b’day.  My sweetie wife saby.. ( oh.. not officially wife yet… my fiancée .. . We are abt to marry this June…. poor gal :-)  ) reminded me to send card else she wont even talk to me. I know there are a lot of you who know how hard it is to pick out a card for wife’s mother while feeling had to do it for your own. Started googling … found one… clicked send. Ohhh its seven o clock… toooo late… its time to dip into yesterdays bug. I was trying to make a transparent CStaic control for my current MFC application. 

     

    Its 3Pm now. Done with the CStaic control. Well I will add that code as a separate blog in the MFC section. Now its time for my brunch….10minutes.. Done… I was so hungry.

     

    Now its time to start blog everything and then go to church.. Hehehe …Today is Sunday. “Pay to Caesar and what is God's, pay to God."

     

    Oh its time to go… am not lengthening.. let me come to the point. Today Feb 26, 4.30PM eastern time, Waltham, Boston Massachusetts, the last Sunday in the last February of 2006, I am inaugurating my MSN blogs “Place4U Pace4U”. [ Claps claps claps ] 

     

    This is my opening blog in msn spaces. As part of MSNizing all online deeds in a single login single point of contact, I finally decided to move my blogs into MSN. Its bit hard decision as I have been bloging @ mil10.blogspot.com for a long. I am in the process of migrating the content to here. Msn, it is pretty cool...really...I mean it. As I mentioned in my last blogs there in mil10.blogspot.com today onwards I will be blogging here @ spaces.msn.com/miltonkb.

     

    As before, I welcome thoughtful, focused comments in response to any postings on this weblog and of course its Place4U..Pace4U…. I repeat, in double quotes, underline: It is “Place4U Pace4U”

     

     Greetings….mil10