Simon's profileSimon's SpaceBlogLists Tools Help

Blog


    9/22/2006

    [Simon's Space] Live Space Backup Tool

    I decided to release a draft version of Live Space Tool. It can backup all you MS Live Space blogs.

    Please click here to the download page, and click download button. A Readme file is included.

    ========
    License
    ========
    Apache 2.0, included in the download.

    ========
    How to run
    ========
    Unzip and double click livebackup.bat.

    ========
    Price
    ========
    You don't need to pay for this, it's a draft, so it's free.

    But if you want me to do the backup for you, send me an email and pay me a little money.
    The price is the lower one between 2 dollar and the price of your breakfast yesterday.
    Yes, it's free for those who don't eat breakfast!

    In any case, your comments on this blog entry is appreciated.

    Tag: live space tool

    --
    Posted by Simon Li to Simon's Space at 9/22/2006 11:04:00 AM
    9/5/2006

    Notes for "MS Live Space hack"

    odie commented on 2006/9/4:
    what is handle="+O+" and how do you find what it is for other blogsand what is &item="+N+" and how do you find what it is for other blogs

    Here is some explanation to my last post.

    To delete an trackback in live space, we can use a template URL (in a single line):

    script:document.cookie="DeleteHandle=HANDLE_ID;path=/;domain=YOUR_DOMAIN;";window.navigate("http://YOUR_DOMAIN/DeleteBlogItem.aspx?handle=HANDLE_ID&item=trackback&delete=true&domain=live.com&ru=myspace");

    Just replace HANDLE_ID and YOUR_DOMAIN in above line and copy it in address bar and press enter. In my case:
    HANDLE_ID = cns!512FA623748C31AB!527
    YOUR_DOMAIN = thesimonspace.spaces.live.com

    Back to odie's question,
    "handle" is used as unique id in blog. Each blog entry, comments, or trackback have their own unique handle.
    And "item" is used as a type id for different blog objects, for a blog entry it's "entry", for a comment it's "comment", and for a trackback it's "trackback".
    handle ="+O+" and item="+N+" are evaluated when you click the delete icon. Actually, when you click on the delete icon, a javascript DeleteItem(item, handle) will be called.

    I only need to delete spam trackbacks so item is always "trackback", and I get the value for handle by view the source of the web page, search "onclick="DeleteItem('trackback'" and I will find the ids as the 2nd param.

    It's possible to make this automatic. For instance, write an application embeds IE browser component. so it can parse the web page and get all information. But in my case it doesn't worth the effort.

    Tag: Live Space hack javascript

    --
    Posted by Simon Li to Simon's Space at 9/05/2006 10:47:00 AM
    8/16/2006

    MS Live Space hack

    That's ironic, MS products are well-known for easy to use, but one thing I hate MS Live Space is it's very difficult to delete spams. I open trackback privilege for anyone, so here come the spams. I think MS do a good job on blocking spam. But I still got 15 spam trackbacks yesterday.

    In live space home page, MS only display the latest 5 trackbacks, I have to delete them one by one, and I have to confirm my deletion each time. MS Live Space is slow here in China, so it's a great challenge for my patience.
    My friends think I'm a patient man. Eh, I hope I were. But yesterday, I decided to do some hack.

    MS provides MSN Spaces MetaWeblog API (http://msdn.microsoft.com/live/gettingstarted/spacesstart/default.aspx) to edit blog by code. I've found it very powerful but unfortunately there is no API to delete trackback. I have to find another way.

    Let's back to source, it's easy to found each time I confirm deletion, the job is done by another URL. The URL is generated as:
    window.location.protocol+"//"+window.location.hostname+"/DeleteBlogItem.aspx?handle="+O+"&item="+N+"&delete=true&domain="+document.domain

    To be frank, I'm not a javascript expert. It took me some time to figure out the value of window.location.protocol, window.location.hostname etc. Guess how I did that? It's a silly way so I would just say that del.icio.us can be used as a variable viewer!

    Anyway, let's say my Live Space is thesimonspace.spaces.live.com and the trackback I want to delete is cns!512FA623748C31AB!527, the job is done by:
    http://thesimonspace.spaces.live.com/DeleteBlogItem.aspx?handle=cns!512FA623748C31AB!527&item=trackback&delete=true&domain=live.com&ru=myspace

    But it doesn't work! I review the javascript again and realized I need to set some information in cookie. Finally, the following code deleted trackback cns!512FA623748C31AB!527 successfully!

    document.cookie="DeleteHandle=cns!512FA623748C31AB!527;path=/;domain=thesimonspace.spaces.live.com;";
    window.navigate("http://thesimonspace.spaces.live.com/DeleteBlogItem.aspx?handle=cns!512FA623748C31AB!527&item=trackback&delete=true&domain=live.com&ru=myspace");

    I think FireFox don't support window.navigate(), but how could a FireFox lover loves MS Live Space?Anyone want to write a plugin to do it automatically?

    Tag: Live Space hack javascript

    --
    Posted by Simon Li to Simon's Space at 8/16/2006 01:18:00 PM
    8/11/2006

    When Live Space not stable and Blogspot is back

    The upgrade from MS Space to Live Space is a big step. We can see great ambition behind that. However, as far as now, it's not welcomed by most Chinese blogger because of the HUGE banner ads and new look. Personally I feel the new template is great, but the catch is, if you are unlucky and something is broken in your setting. (I guess mostly a missing css file.) The look is really really terrible. I read a lot of complain posts and some of them are considering switching BSP.

    And this week, Blogspot is back in CLAN (China Local Area Network). People guess it's really unblocked by GFW (Great Fire Wall). Maybe it is a good choice to try out blogspot.

    I have set up an account in May this year. But don't intend to switch because it's not accessible from China and my reader are mostly my MSN contacts. But I'm changing my mind. Maybe I can update both of them?

    It's easy because both of them supports email publish. But I intend to publish online on blogspot and let it auto forward an email to Live Space. I'm doing this on this blog entry!

    Update:

    It works! My blogspot url is: http://simon-space.blogspot.com/ 

    Please check THIS post on blogspot.

    Tag: blogspot live space

    --
    Posted by Simon Li to Simon's Space at 8/11/2006 03:30:00 AM

    8/9/2006

    Java SE 5 annotation: finally I found it useful!

    Java introduced a lot of new features in Java SE 5. I like the generic, autoboxing/unboxing, and almost all of them. But I never figured out how annotation could be useful.
     
    Until very recently.
     
    I want to write a code generator. In short, I have some existing classes, and I want the code generator to write wrapper for some of them and expose some of their methods. After I evaluated the complexity, I found I need to write a Java compiler by myself. That's too expensive.
     
    Why should I reinvent the wheel? After some research, I found annotation was very useful for this case.
     
    I'm not writing a guide here, we can find one on http://weblogs.java.net/blog/emcmanus/archive/2006/06/using_annotatio.html
     
    Basically it includes several steps:
    1. Define my annotation.
    2. Annotate on desired class and method.
    3. Write my own annotation processor factory (extends AnnotationProcessorFactory from Sun).
    4. Run apt tool included in Java SE 5, passing in my annotation processor factory and scan my source folder.
    It's very convenient and powerful.
    Even I don't write my annotation factory. I found the standard @Override and @Deprecated annotation are very useful. They can help eliminate typos and name confliction.
     
    There is always something new and exciting, that's why I'm a happy coder.
     
    Tag: java annotation apt
    8/4/2006

    Who is reading?

    Microsoft adCenter labs provide a free Demographics Prediction service:
    Given a URL, it will return the gender and age prediction of the reader.
     
    I take my blog for test and here is the result:
      Gender: Male-oriented, with the following confidence:
      M:0.58 F:0.42
      Age: 18~24 Oriented with following distribution
      Gender: Male-oriented, with the following confidence:
      M:0.59 F:0.41
      Age: 18~24 Oriented with following distribution: 
    I'm happy with this result, my reader are mostly young people!
     
    To verify this result, I take some more tests.
      Gender: Male-oriented, with the following confidence:
      M:0.56 F:0.44
      Age: <18 Oriented with following distribution:
    URL: http://www.google.com/
      Gender: Male-oriented, with the following confidence:
      M:0.59 F:0.41
      Age: 25~34 Oriented with following distribution
    It seems that the result is supported by 3rd part data.
     
    But when I test a very hot Chinese blog, the result againsts my estimation. 
      Gender: Male-oriented, with the following confidence:
      M:0.62 F:0.38
      Age: 35~49 Oriented with following distribution
    The blogger, although accused by somebody as a liar. There are tons of young guys mad for him.
    I don't believe it's old man oriented. So I also doubt the result for my blog.
    Overall, MS provides a cool service, but there is still a lot of space for MS to improve.
    Does Google provide similar service?
     
    Tag: MS ad
    6/28/2006

    Flex Builder Plugin

    I'm working on a mushup mockup. (Isn't it cool?) And I am shocked with the power of Flash.
    But the first steps are always difficult, below are some problems I encountered and my solution.
     
    1. Download
    I want to use some new tech in ActionScript 3.0. So the first step is to download and install Flex Builder 2.0 beta 3.
    You can found it on Adobe site. http://labs.adobe.com/technologies/flashplayer9/
     
    2. Installation
    I already have Eclipse 3.1.2 on my PC. So I want to install Flex Builder plug-in and Flex SDK.
     
    Tip 1: Flex installer conflicts with J2ME plugin eclipseME 1.2.1.
    For some reason, the installer won't accept my Eclipse home directory and keep requesting "Eclipse 3.1 and up". I found it was caused by my J2ME plugin. If you install into a clean Eclipse 3.1.2, you get no complain at all.
     
    Tip 2: Uninstall Flash Player before you install.
    If you have Flash Player 8 installed, please uninstall it. Otherwise you might encounter "internal error" when debug Flex project. (not sure)
    If you have Flash Player 9 installed, I suggest you uninstall it as well, you need a debug version which is included in the installer.
     
    3. GO
    The 1st time you start Eclipse after installed Flex Builder, you will be asked for register code, just press "Try".
     
    4. Run your application
    In Navigator view, right click your project -> Run as -> Flex Application. You will start your application.
    If you encountered 'An internal error occurred during: "Launching"', and you might found the following info in your Eclipse log.
    !ENTRY org.eclipse.core.runtime 4 2 2006-06-28 10:38:12.843
    !MESSAGE An internal error occurred during: "Launching".
    !STACK 0
    java.lang.StringIndexOutOfBoundsException: String index out of range: 5
     at java.lang.String.substring(Unknown Source)
     at flash.tools.debugger.DefaultDebuggerCallbacks.determineExeForType(DefaultDebuggerCallbacks.java:70)
     at flash.tools.debugger.DefaultDebuggerCallbacks.recomputeExeLocations(DefaultDebuggerCallbacks.java:50)
     at flash.tools.debugger.DefaultDebuggerCallbacks.getHttpExe(DefaultDebuggerCallbacks.java:31)
     
    You can solve it in 2 ways.
    Workaround: change your Run and Debug setting, the default Run setting for Flex application check "Use defaults" in "URL or path to launch".
    The default setting launch a html. Change it to launch the swf file with the same same.
     
    Solution: change the Eclipse setting.
    I found my workaround failed when I want to debug an application which has to communicate within the Javascript and Flash ActionScript 3.0. This forced me to find a real solution.
     
    And it was hidden in Eclipse Preference -> General -> Web Browser. By default, "Default system Web browser" is selected. Change it to "Internet Explorer". But I want to use FireFox, so I add it manually and it work fine.
    Uhm, I'm feeling Lucky.
     
    Tag: Flex Builder Eclipse
    6/18/2006

    Bill Gates is retiring from MS

     
    Bill Gates is a hero in my heart. I admire him so much because his success in bussiness and his generous.
     
    Here in China, there are still a lot of misunderstanding about him, but being a poor young man from south west of China, I feel I owe him a big favour.
     
    But many Chinese people remember he said "Chinese steal software". For years I've doubted this was a rumor until one friend show me the source. To be frank, I feel hurt.
     
    Anyway, no one is perfect, I wish his retirement is not an end of a legend, but the beginning of another one.
     
    Tag: Bill Gates
    4/21/2006

    Test driven programming on GUI, in a hard way

    I was fascinated with XP(eXtreme Programming) from day 0. But I often deal with GUI and it's hard to do XP in that domain.
    Here is a real-life sample for your reference.
     
    Problem: We need to display images on the screen, one images per line but their height may vary. User can scroll up and down, the image might be change (and with a new height) by external event.
    Make sure the current selected image can be fully displayed unless it's taller than screen. In this case, just display the upper part.
    Make sure leave no empty gap in the bottom unless the total size of all images are shorter than the screen.
     
    Step 1: move all GUI related code out, and now our task becomes:
    We have a list of images in a model, we can get height of image by dataModel.getItemAt(i).getHeight().
    We can get the image count by dataModel.size().
    We have the following global vars:
    int selectedItemIndex; // index of current selected image.
    int firstDisplayedItemIndex; // index of the 1st visible image in the screen.
    int offY;   // the offset of 2 points, one point is the top left of the 1st visible image, another is the top left of the screen.
    We need to write a method to change firstDisplayedItemIndex, offY.
    void calcPosition(int availableHeight)
     
    Comment: we can even exclude dataModel from the method and make it a math quiz, but it's good enough for me by now.
     
    Step 2: Design test cases.
    Basically we will provide initial value for firstDisplayedItemIndex and selectedItemIndex, and provide some image height data, after we call the method, we will check firstDisplayedItemIndex and offY to make sure they are correct.
    I try my best to setup 17 test cases:
    // selectedItemIndex == firstDisplayedItemIndex, selectedItemIndex is taller than screen
    // selectedItemIndex == firstDisplayedItemIndex, selectedItemIndex is same height as screen
    // selectedItemIndex == firstDisplayedItemIndex, selectedItemIndex is shorter than screen, and we can fully display the next image
    // selectedItemIndex == firstDisplayedItemIndex, selectedItemIndex is shorter than screen, and we can't fully display the next image
    // no scroll needed, we can fully display the last image on screen
    // no scroll needed, we can't fully display the last image on screen
    // no scroll needed, but selectedItemIndex would be the last image on screen.
    // selectedItemIndex would be the last image on screen, and firstDisplayedItemIndex will increased by 1. (push 1 image out of screen top).
    // selectedItemIndex would be the last image on screen, and firstDisplayedItemIndex will increased by 2. (push 2 images out of screen top).
    // before: selectedItemIndex is the last image on screen. After: it should be the 1st on screen. selectedItemIndex is taller than screen
    // before: selectedItemIndex is the last image on screen. After: it should be the 1st on screen. selectedItemIndex is same height as screen
    // before: selectedItemIndex is the last image on screen. After: it should be the 1st on screen. selectedItemIndex is shorter than screen.
    // selectedItemIndex is the last one in model, no scroll needed
    // selectedItemIndex is the last one in model. After method, firstDisplayedItemIndex will increased by 1.
    // selectedItemIndex is the last one in model. After method, firstDisplayedItemIndex will increased by 2.
    // selectedItemIndex is the last one in model. And we have to scroll back a little bit to fit the bottom gap.
    // selectedItemIndex is the last one in model. And we can display all images and still have bottom gap.
     
    Comment: some test cases are not necessary, but the great thing is algorithm might jump out when you prepare tests!
     
    Step 3: Write the test code (and framework!).
    I don't have JUnit here for my J2ME project, so I write my own simpler version.
    class Test
    {
        int [][] testData={
            // firstDisplayedItemIndex, selectedItemIndex, window height,
            // new firstDisplayedItemIndex, offY       and height data for test!
            {0, 0, 10, 0, 0,    11, 2, 3, 4, 5, 6 },
            {0, 0, 10, 0, 0,     1, 2, 3, 4, 5, 6 },
            {0, 0,  9, 0, 0,     1, 2, 3, 4, 5, 6 },
            {2, 5,  8, 3, -1,    1, 1, 1, 2, 1, 6 },
            ... // more test cases are removed.
        };
        final int OFFSET =5;
        public static void main(String[] arg)
        {
            Test inst = new Test();
            for (int i=0; i<inst.testData.length; i++)
            {
                inst.testWrapper(i);
            }
        }
        int availableHeight, selectedItemIndex, firstDisplayedItemIndex, offY;
        int currentCaseId;
        void testWrapper(int caseId)
        {
            // init
            currentCaseId = caseId;
            firstDisplayedItemIndex=testData[caseId][0];
            selectedItemIndex=testData[caseId][1];
            availableHeight=testData[caseId][2];
            // run the method to test!
            calcPosition(availableHeight);
            // verify result
            if (testData[caseId][3]!=firstDisplayedItemIndex ||
                    testData[caseId][4]!=offY)
            {
                System.out.println("error caseId:"+caseId);
            }
        }
    }
     
    Comment: we don't have the most powerful tools, but it works for us!
     
    Step 4: Code and debug.
    I copy method calcPosition(int availableHeight) into my test class and do a little modification:
    Change all code from:
    dataModel.getItemAt(i).getHeight();
    to:
    testData[currentCaseId][i+OFFSET];
    and from:
    dataModel.size()
    to:
    testData[currentCaseId].length-OFFSET
    Not surprised, my test class keep reporting error but it's very fast for me to debug and correct.
    Step 5: copy code back.
    After the Test class stop complain, I copy the method back and change all testData stuffs back to dataModel stuffs.
     
    Conclusion:
    Even in GUI related code, even without powerful tool, we can still work in a test-driven way.
    It's not that painful!
     
    Tag: XP agile GUI sample JUnit
    4/11/2006

    It's all about money

    My friend Jim commented on my last blog entry: "i believe you have the ability to play with Linux well, why always stick to m$?"
     
    I don't.
    In fact, I use Mandriva 2006 free edition at home. I tried to help other Linux users and share my knowledge. Believe it or not, I applied my first credit card so that I could send Mandrake $57 to show my respect when it was close to bankrupt.
     
    But it's true Microsoft is a hot tag on this blog, and on my home notebook, WinXP is the default boot choice.

    Because Windows is my job and Linux is my skill. I've solid evidence to prove myself an experienced Windows coder but no boss are brave enough to see me as a qualified Linux coder. I can live on Linux but can't make a living on it.
     
    I'm not kidding. It's all about money.
    4/9/2006

    Loggin 2 MSN messenger accounts on XP

    Sometimes I want to logon 2 MSN messenger accounts in the same time. I know there are many ways to achieve this, but I don't want to give away my password (not anyone!), nor do I want to install special software (not anyone!), I only trust Microsoft (well, not that much!).
     
    Here is my solution.
    I have 2 versions of MSN messenger on my XP. One is Windows messenger 4.7 and another is MSN Messenger 7.5. I found that they could work in harmony. Even better, after I associated one account with Windows messenger, I found if I started Outlook Express before MSN messenger 7.5, the Windows messenger will be launched in background WITHOUT a tray icon. (But this might not work for unknown reason.)
     
    Tag: MSN tip
    3/26/2006

    Bitter Visual C++.net 2003 experience

    This weekend I wanted to write some code for fun, and I wanted to try Visual Studio .Net.

    MS has offered free download of Visual C++ 2005 Express, but it's still too expensive for me. There was only 1G free space on my PIII 800M, and I was running out my time from ISP (OK, I'm not that poor. Thank you!). Anyway I chose Microsoft Visual C Toolkit 2003.

    It took me a lot of time to finish my small application. Much longer than I had expected. Because all code sample on MSDN is for VS2005, and VS2005 is totally a different language from VC2003 IMHO.
     
    Just a little example:
    // this is from MSDN, it IS C++ code, but NOT what I once knew.
    array<String^>^ name;
    // and this is its grandpa's version. Hi, buddy!
    String* name[];
     
    It made me feeling very bad that I couldn't read a C++ (so called by MS) code.
    I think MS is pushing developers to VS2005 by free download and new code samples.
    It's a big bet.
     
    Tag: ms vs2003
    2/28/2006

    Install BLOG:CMS, Mandriva vs Windows XP

    I had an interesting experience when I tried a open source software BLOG:CMS. It depends on Apache, PHP, and MySql so I had to install them as well.
     
    My first try was to install them on my Mandriva 2006 Free Edition. Apache, PHP, and MySql are included in this linux distro, so the installation is quick and easy as a blink.
     
    My second try was to install them on my Windows XP SP2. I had downloaded Apache 2.0.54 and MySql 4.1 so I decided to work on them.
    Everything is fine until I began to install BLOG:CMS from browser. It failed in silence. No error messages, no exceptions, nothing at all. It took me 2 days to have it run.
     
    I never expect working on linux can be easier than on Windows.
     
    Conclusion:
    1. To be fair, it's not really related to the OS. But Mandriva really does a good job. I believe linux will take more and more market share on desktop.
    2. Most open source software are still toys for experts.
    3. PHP is not so hard to learn. (I knew nothing about it but managed to hack the code and fixed the problem.)
    Tag: mandriva microsoft
    1/23/2006

    Data in jar

    I'm working on a project that saves meta data in xml format. In J2ME, the package size matters. So we try to reduce the meta data size by converting xml data into binary format. However our current solution is not good enough because it only compresses the xml file by about 40% and the converted binary data size is still around 250K. My boss wants me to improve the algorithm to get a smaller binary file.


    I suddenly realized what we need is the final result: a small jar for download. So I compared the compression ration. To my surprise, althogh we saved 50% size with the "xml to binary convertion". But after packed them in the jar, there is no big difference.
    And I tried a different approach by translating the origianl xml with shorter node name and attribute name. For instance, <property name="abc"/> became <p n="abc"/>. And I get some interesting result for a sample xml file:

                 size(byte)     size in jar(byte)
    Origianl.xml    17183       3222
    Origianl.bin    11011       4883
    Shorname.xml    10239       2946
    Shorname.bin    10920       4971

    Here we have:
    Before packaging, the original xml is the biggest in size, and the translated xml is the smallest. The translated xml is even smaller than its binary version.
    After packaging, the translated xml still remain the smallest but its binary format is the biggest in size.

    Lesson learned: pure text get a higher compression ratio than binary data. And twice compressing may not better than once.

    Tag: xml

    1/16/2006

    One hat for all?

    It's a world of diversity. Our application may run on sever, pc, phone, or psp. So when we need to give a solution, it has better be "one hat for all".

    But that's not a rule.

    Some "one hat for all" solutions are actually built up from "vendor specific" solutions. For instance, a national wireless network management system has to manage equipments from different verdors. One possible solution is to adapt data from different vendors to a common format. From the operator, it's a total solution on all vendors, but beneath the hood, it's vendor specific data adapting.

    Some end users prefer vendor specific solution. We have a not so good example in Java GUI technology: SWT vs Swing (OK, I mean your grandpa's Swing). Let me explain in simple words: Swing uses a general approach on every platform, while SWT uses native widget from Windows/GTK/Motif etc. Some developers like SWT because it's faster with less layers. Some developers like SWT because its look and feel rocks! "oh, how could that be a java application!".

    Just my 2 cents.

     
    Tag: software
    1/10/2006

    JScript code sample: list files in a folder

    With JScript and VBScript, we can write powerful tools. I prefer JScript better because I doubt VBScript is only supported by MS. But I found sample code for JScript is more difficult to find. So here I will contribute one.
     
    It's quite simple if you know the following little secrets:
    1. You can use WMI (Windows Management Instrumentation) to operate the file system (and more).
    2. In WMI, The path shouldn't contain the driver info. It should start and end with "\\".

    I failed a hundred time before learned the 2nd point. Maybe in scripting language, experience and instinct is more important than hardworking.
     
     
     
    // Sample code to get all data files under a folder. It works on Simon's XP.
    var strFolderName = \\Documents and Settings\\Default User\\Start Menu\\";
    strFolderName = strFolderName.replace(/\\/g, "\\\\");
    var cmd = "Select * from CIM_DataFile where Path = '" + strFolderName + "'";
     
    var wmipath = "winmgmts://./root/cimv2";
    var objWMIService = GetObject(wmipath);
    var colFiles = objWMIService.ExecQuery(cmd);
     
    var fl=new Enumerator(colFiles);
    for(;!fl.atEnd();fl.moveNext()) {
        var objFile=fl.item();
        WScript.echo("File: "+objFile.Name);
        break;  // in this sample, we break at the 1st result.
    }
    WScript.echo("done");

    Tag: javascript vbscript

    9/14/2005

    The 2nd day of JavaChina 2005

    Today is the 2nd day of JavaChina 2005.

    Today the most impressive words to me are "JSF" and "JCP". I enrolled the J2EE technical sessions this afternoon.

    There was no breaking news in the keynote speeches this morning. Dr. James Gosling was a little bit tired. Anyway, it's a relief to know that a great architect doesn't have to be a good evangelist.

    Mr. Edward Orange from IBM must have changed his topic last night. His speech is totally a fight back to SUN. He tried to state that IBM has contributed most to the Java technology. And IBM really think community (but not JCP) matters.

    I noticed that all guests from SUN had left when IBM was speaking.

    I will bring you more on technic in the near future.

    Tag: java

    9/13/2005

    2005 JavaChina Developer Conference

    2005 JavaChina Developer Conference opened today in Beijing. It's the first time Java Developer Conference hosted in China. I'm very exciting to join this 2 days conference.

    For the first day, the most impressive words to me are "participate" and "Netbeans". Seems that Sun is launching a campaign to reclaim its leadership in Java technology.

    IBM was not show up in this conference, however, an expert from Microsoft will host a technical session tomorrow. That's really interesting.

    Scott McNealy gave a keynote speech today. To my surprise, he is not an aggressive man; you can even say he is a quiet guy comparing with Steve Ballmer. This is very different from his image I've gotten from the media. But he still hasn't missed the chance to "attack" Microsoft. He said (not exactly the original word) "To run software on every desktop is not Sun's goal, but someone else's." And he tried to define the campaign between Java and .Net as "developer community vs. Microsoft". I can feel MS is really a headache for him.

    He also made a mistake when trying to speak a joke. He said "maybe you can find his (Steve Ballmer's) email address on Google or Alibaba". Apparently, he mixed Alibaba up with Baidu. This made me believe the western investigators still don't have a clear understanding on Chinese company.

    I will give you more on this conference tomorrow. Stay tuned.

    Updated 2005-09-14:
    Sorry to have made so many mistakes in this blog.
    1. IBM did participate in this conference.
    2. Alibaba does have searching business after it purchased Yahoo China.
    3. So many typos and semantic mistakes.

    Tag: java

    8/25/2005

    No more bonus... 5 hours later

    Online games are very hot in China, many Children have got addicted. Sometimes people just keep online day and night, busy killing and fighting, for virtual glory they can't gain in reality.

    I feel very sad about this situation, I worry the young generation might be ruined. People know that the addiction is closely related to the bonus system. The longer time you stay online, the more experience and bonus you may have.

    It's ironic that the biggest online game company in China said that they are not to be blamed because they request young people to buy "limited card" that won't allow people login after midnight.

    Finally, the government is taking action. A new standard will be enforced this year. For any online game, the experience growth rate should decrease by half if the player has online for more than 3 hours a day. And the experience should stop growing if player has online for more than 5 hours a day.

     

    Tag: game


    8/15/2005

    Virus broke out!

    One virus broke out this afternoon in my office. Through some system hole in Windows, one file name winpnp.exe is injected into system32 directory. It also generates a file named o to ftp winpnp.exe from the pc that infect you.

    I noticed the warning message from my antivirus software and checked immediately the system32 directory. I intuitively unplugged my network because I feel it's beyond my knowledge. Fortunately, it hasn't done big damage to my computer comparing with some other colleagues.

    The virus will do the following:
    1. Add 2 files (winpnp.exe and o) in system32 directory.
    2. Add some info in registry. HKEY_USER\.DEFAULT\Config, and HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    3. (I guess) it will also create a local user account (name and password are both 1)

    To remove the virus, we took the following steps:
    1. Unplug the network.
    2. Kill the winpnp.exe process. (If failed, rename winpnp.exe in system32 directory to _winpnp.exe, restart and try again)
    3. Run regedit, and remove all entries include winpnp.exe.
    4. Delete winpnp.exe and o in system32 directory.
    5. Get the latest patch from Microsoft. (DON'T TRY TO USE THE INTERNET! GET A COPY FROM A TRUSTED SOURCE.)
    IE6.0sp1-KB896727-Windows-2000-XP-x86-ENU.exe
    Windows2000-KB896423-x86-ENU.EXE
    Windows2000-KB899588-x86-ENU.EXE
    6. Install the patches and restart.

    Tag: microsoft virus