Feeds:
Posts
Comments

여러가지 비법이 있을 수 있지만, Paul Hong 선교사님이 자신의 체험을 바탕으로 한 영어 잘하기 비법 3가지를 공개하셨다. 이 세가지 비법이 가진 강점은 본인이 직접 실행하여 그 효과를 체험하였다는 것.

  1. 영어 공부의 목적이 “영어를 쓰는 사람들을 사랑하기 위한 것” 이 되어야 한다. 사랑하면 두려움이 없다. 비록 저 사람이 영어를 잘 하고 (native니까 당연히!) 내가 잘 모르는 사람이지만, 그 사람을 주님안에서 사랑해야 하겠다고 마음먹으면 두려움없이 approac 할 수 있다. 사랑하는 마음으로 두려움을 극복하라. 영어를 쓰는 사람을 사랑하기 위해 영어를 공부하라.
  2. Words power and words pronunciation.
    대부분의 한국 사람들은 문법으로 영어를 잘 해보려고 하는데, 문법보다 어휘의 양을 늘려 대화의 폭을 넓히고 말하기 시작하라. 어휘가 늘면, 자연이 영어가 는다.
  3. 영어 신문 보기
    New York Times, Guardian, Financial Times 등을 매일 읽으라. 앨빈 토플러는 신문을 10씩 읽는다고 한다. 선교사가 되기 위해서는 성경과 신문을 함께 읽으라.

이 중에서 구체적인 실천법으로 영어 신문을 읽으라가 무척 마음에 다가온다. 사실 신문은 워낙 다양한 내용을 다루기 때문에, 다양한 어휘와 표현을 배울 수 있다. 매일 Susanna와 신문 1페이지를 읽도록 하자.

We just had a sprint review meeting with Olly who is the technical architect. One thing I am impressed with is that he actively suggest different ways to achieve the value to the product owner. I seem to have an technical guy mindsent and usually I do not challange the business value of the user story or suggest a different way to achieve the business goal. I thought it was a good thing to be open-minded and ready to do anything a product owner wants to have. In today’s meeting, I realised PO also needs feedback from us and we can find something better together, which is the agile way.

Susanna가 갑자기 한국에 가게 되어서 조엘이의 British Passport를 신청하고 있다. Check and Send service 를 이용하면 약 2주 안에 받을 수 있다. 신청할 수 있는 Post office는

POST OFFICE LTD
MEDIA VILLAGE SPSO
MEDIA VILLAGE, UNIT 8
BBC MEDIA CENTRE
LONDON
LONDON
W12 7TQ

요금은 46 파운드가 되겠습니다.

어린이가 태어났을 때 아버지가 영주권자 이면 자동적으로 어린이는 British Citizen이 됩니다. (ILR – Wikipedia)

Recently, I had a chance to refactor codes for a system that sends a file to DreamMail. Because we did not touch any FTP functionality, we were complacent and tested it up to where files are exported and sent via FTP. Development is completed and the application was deployed to a testing environment. Very thankfully and luckily, Jon (a team mate) and I happened to see that all new files generated by the refactored code are rejected in DreamMail ftp server. First we thought they fail because we use a testing account but it was worring that all files fail. We started investigating the issue. Picked one file that was successfully processed and uploaded it again. It worked without any problem. Then we compared the two files, successful one and failed one. Yet there was no difference. I assumed that something was different but was not visible, so downloaded Ultra-Edit because it can display file in hex code and checked the two files. The difference was the first 3 characters which is called BOM, Byte-Order Mark.

BOM is zero-width, no-break space and therefore, not visible in most of text editor. “It is conventionally used as a marker to indicate that text is encoded in UTF-8, UTF-16 or UTF-32.” (wikipedia) In hex value it is EF BB BF.

If the file stars with BOM, DreamMail client rejects it for some reason, thinking it is malformed.  My code that prepended BOM to the file was this.


using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))

Fix for this is simple. Do not specify encoding in StreamWriter constructor.


using (StreamWriter sw = new StreamWriter(fs))

There is a post in Expert Exchange that tells you to use Encoding.ASCII. It fixes the problem, but all text will be written in ASCII. You will lose lots of characters.

Honestly I panicked when I tried to open a text file and found that I could not open the file nor copy it. I installed Windows Home Server. I liked the simple interface and enjoyed the straightforward backup. I deleted and installed Windows XP, because my HP Deskjet 1560 did not have its driver for windows server.

Then the problem appeared. As Windows Home Server does it, all my data files were on D:\ drive. When the XP installation finished, I tried to open a text file. I had an error messsage saying “the file cannot be accessed by the system.” First, I thought, ah it must be something with NTFS ACL. I managed to find xcacls.vbs which shows NTFS ACL permission. It was ok. “Builtin\Administrators” had “Full Control” permission on the file. I googled the error message, and http://support.microsoft.com/kb/262320 said I have to install “Remote Storage Database” back. Probably, it was true partly, and WHS seems to use it underneath. But I couldn’t install WHS back, because WHS deletes all data on disk on installation. I googled again, adding “Home Server” to the error message. And at last, a social MSDN post gave me a very simple solution. It seems that there was a guy who panicked like me.

The solution is to find the hidden /DE folder on your disk and copoy from it. Please visit the link and read the post. A guy called “bruber” really explained it very professionally.

I think Windows Home Server is a very good idea, but if it is intended to be used at home, I believe it should handle driver issues. Many cheap peripheral devices for PC usually do not provide drivers for server windows.

I bought a refurbished vaio NR38M earlier 2 months ago. It is a nice laptop with good price and has Vista installed with lots of other programs. I wanted to use Windows 7 on it, and usually windows 7 performs better than Vista.

I can find all drivers, but it is very difficult to find a utility programs that enable keyboard function key. I don’t understand why Sony did in this way, using special program to enable function key.

A day later, I found that the above drivers page has links to Vaio’s driver and utility repository ftp.

You can see all originally installed drivers and utilities. Keyboard shortcuts are manaaged by a program called “Vaio Event Service.” I managed to figure it out using process explorer, thought some other guys on Internet already mentioned it. You can find Event service installation program from the above ftp link. I tried a seeminglyl latest one

옛날에 마소에 기고했던 글인데 인터넷에 pdf 파일이 떠돌기에 아예 내 블로그에 올려버렸다. 마침 동아일보의 손영일 기자님과 우연한 기회에 인터뷰도 하게되기도 했고.

I have installed office 2007, but the product key was used too many times, and the office failed in activation. I received another product key, but was not sure if I could change it wihtout reinstalling it. A simple google search takes me to http://bloggingabout.net/blogs/mglaser/archive/2006/12/12/Change-Office-2007-Product-Key.aspx. I tried and succeeded in changing the product key and activation. Thanks google.

References

Since last year, I have used Selenium IDE and core. I love Selenium IDE as it is so easy and handy to record the test cases and also to run test cases one by one by clicking on it. A colleague of mine used Selenium RC with C# but it did not impress me much because he started RC server first, then executed NUnit to lanuch the test suite. Also, I did not like coding in C# selenium test cases. How simple and elegant those html test caes are!

Then today, a bit shame to say, I realised I can use html test suite on Selenium RC. Oh how fantastic Selenium RC is. My scrum team had scores of accumulated html test cases, and we can use them as they are.

First, let’s see how to install Selenium RC

  1. You download Selenium RC from http://seleniumhq.org/download/
  2. Unzip it into local hard drive, for example, c:\Selenium. Because Selenium RC is written in Java, you need to install java runtime if you do not have it.

selenium-server.jar is the main engine that runs test suite. You can run it on command prompt, but it is very handy to create a batch file to run it as the above reference link showes it.

For IE


cd \
cd C:\Selenium\selenium-server-1.0-beta-2
java -jar selenium-server.jar -port 4545  -htmlSuite *iehta "http://www.sekyee.com" "C:\Selenium\Test_Suite.html" "C:\Selenium\Results.html"
pause

For firefox


cd \
cd C:\Selenium\selenium-server-1.0-beta-2
java -jar selenium-server.jar -port 4545  -htmlSuite *chrome "http://www.totaljobs.com" "C:\Selenium\Test_Suite.html" "C:\Selenium\Results.html"
pause  

A simple selenium-server.jar usage is like this.
selenium-server.jar -port {your port number} -htmlSuite {firefox or ie} {base url} {absolute path for your test suite} {absolute path for your test result file}

I’m not sure why * is required befire iehta, yet without the *, it does not find testsuite. Also, Results.html must exist before you run this even though it is an empty file.
I find {base url} very handly, so you can put relative path in your test cases. This enables you to use the same test cases to test on different environments such as Dev, Int, Staging, and Live.

Hoep this helps

References

SEO is becoming more and more important issue these days, and your site root url can lose its SEO rank if there are too many different query string attached such as www.yoursite.com/?a=b&b=c and www.yoursite.com/default.aspx?wt=129. It will be nice you can keep the site root clean lik www.yoursite.com

My company employed Scrum from this year and in March sprint, the above was one of the user stories I worked on.

The implementation logic is like this

  • If the url has any query string, store query string values into cookie and redirect it to site root without query string.
  • If there is no query string, then check if cookie has any query string. If the cookie exists, then manually populate Request.QueryString object with the values from cookie.

One tricky bit is Request.QueryString is read only property. So you need to find a private value that the property uses inside. I could do that using .Net reflector and it is _queryString. Using Reflection, you can set the value of a private variable.

The followings are the codes I wrote for this. Of course, I could not write this without the help from the above links.


        protected override void OnInit(EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Request.QueryString.Count > 0)
                    RedirectToCleanSiteRootUrl();

                if(Request.Cookies["QS"]!= null)
                    PopulateQueryStringFromCookie();
            }

            base.OnInit (e);
        }

        private void RedirectToCleanSiteRootUrl()
        {
            HttpCookie cookie = new HttpCookie("QS");
            foreach (string key in Request.QueryString.AllKeys)
            {
                cookie.Values[key] = Request.QueryString[key];
                cookie.Expires = DateTime.Now.AddDays(1d);
            }
            Response.Cookies.Add(cookie);

            PageUtility.RedirectPermanent("/");
        }

        private void PopulateQueryStringFromCookie()
        {
            NameValueCollection collection = (NameValueCollection) Request.GetType().GetField("_queryString",
                BindingFlags.NonPublic | BindingFlags.Instance).GetValue(Request);
            PropertyInfo readOnlyInfo = collection.GetType().GetProperty("IsReadOnly",
                BindingFlags.NonPublic | BindingFlags.Instance);
            readOnlyInfo.SetValue(collection,false,null);

            collection.Add(Request.Cookies["QS"].Values);
            Response.Cookies["QS"].Expires = DateTime.Now.AddDays(-1d);
        }

Older Posts »