More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  Freedo !PhotosProfileFriendsMore Tools Explore the Spaces community

Freedo

View spaceSend a message
Location:
Interests:
staffing @ Microsoft SQL Server team (BJ & SH)

Freedo !

View more of my blog & MS SQL open positions at: www.up9rade.com
June 26

Think and know it's not true


本周有四天要泡在培训教室里,关于<project management>, <agile and scrum project management> 的培训,把一些粗浅的想法记录下来。
自知离真正的 agile 还远着呢,所以就不敢胡乱写关于 software engineering topics。
记一点自己关于 time management 上面的体会。

来上培训的Principal PM 专门讲到了关于时间管理,计划之内和计划之外,计划之外占很大比重的是被打扰的时间。

Agile management 的并不是说一味跟着发生的事情去走,而是制定合适时间之内的计划,review 并且坚持它。比如说上班8小时的分配。

大家的工作基本上都是work on email, 有的时候光是处理邮件就能消耗一天的时间,这些邮件也会在工作中扮演打扰者的角色,让你感觉在工作中处于被动。

所以能够有一个培训课程,在培训中不接收邮件,只是接受老师的板砖一顿乱砸,就看能不能砸中某根神经,让人开开窍也不错。

看到过一天当中几种时间管理:

第一种,不作计划或者计划在脑子里,盯着邮件,有紧急重要事件优先处理。这算是第一层。

第二种,以前在墨西哥做项目的时候有一个对方的PM, 我看到他每天早上到公司里都先把一天的事项打印出来 (Outlook - > Task -> File -> Print)。 处理完毕的打勾,这种方式我相当欣赏。作为一个PM,一天之内可能有十几件,二十几件事情同时找到你,所以有一个checklist还是很好的。 By the way, 他的excel 技能也让我佩服不已,是属于传说中的完全脱离鼠标操作的那号人。这算是第二层。

上完今天的培训课程,我想时间管理的第三层境界是: 在被洪水淹没或者难以自拔之前,先想好每天的事务,分轻重缓急,记下来。把计划之内的事务至少分配4个小时,并且保持对计划的review. 也就是说,除了记下来所要处理的重要事务之外,并且给它们分配上各自的时间,并且坚持在那个时间做计划内的事情,而不被打扰。

做到这一点应该是最难的。因为除了别人打扰之外,最重要打扰是来自于内心。心里面经常会有一个声音告诉自己说,脑子里冒出来的那个主意,那件事情很不错,快去做吧。或者是,这件事情紧急程度不高,先休息下,做别的事吧。有没有想过,上班就象是坐禅,因为不管好的念头不好的念头冒出来的时候,都不要去理会它,也就是禅中所说的: 见佛诛佛,见魔诛魔。

要养成好的习惯,好的修养确实不容易,就象Prakash 所说的,好的习惯是帮助你成功的重要因素之一。我自己还在第一和第二层之间struggle.

 

 

food tasting

 继结束了员工座椅的投票之后,出炉了 "food tasting" invitation, 让员工自己选择食品供应商。


 



June 25

Materials tell

只上材料不说话:

在员工个人的力量之外,微软的培训和发展人的体系有三个重要模块:
1. Learning Portal, 这是一个员工自我管理的培训平台,可以在上面注册搜索培训课程,这些课程有在线的,面对面。可以在上面追踪自己和学习进度。培训的课程会多到点得人手软。
    可以参看 http://www.up9rade.com/blog/184 这里, 自己对于自我学习的看法。
2. Mentor System,  旨在把微软全球的人才联结起来,分享和学习。 所以,一个 HR 和 一个拥有超过10几年软件开发经验的 Dev Manager 结成对子,进行为期一年的 mentorship, 在理论上和实际上,都是可行的。 当然在正式成为 Mentor 和 Mentee 之前, 要先参加怎么样成为一个好的 Mentor 和 Mentee 培训, 确保双方可以借鉴以往的 best practice, 同时有共同的清晰目标。 可以参看 http://www.up9rade.com/blog/191 这里, 讲了个人关于 Mentor system 的经历。
3. Engineering Excellence, 通过全体技术人员的推动,倡导跨产品,部门,领域的 regular 沟通和交流。 Open door policy, 所以在一堆讨论得兴高采烈的工程师中间,出现 HR 的面孔也不奇怪, 当然尽力尝试去听 :) 

以下是本人的课程和培训计划,去掉了链接,从 Learning Portal 里导出来的,crazy :-D

今天刚好是我在微软一年,在这一年开始的时候,我听了 executive speech,  参看 http://www.up9rade.com/viewblog/109 这里。
一年以后的今天,我想以SQL 中国 GM 关于他个人在 career development 中的一些建议作为结束:

1.Know thyself: 
    If you’re an engineer, what discipline(s) do you want to build expertise in – Development, Testing, Program Management, User Experience or Product Planning? Do you want to follow an individual contributor track or the people management track? What kind of technology do you want to work on – consumer or business, platform or applications, hardware or software or service? Do you want to work on a start-up project or on a more established product?
“Are you a technology guy with a business interest, or are you a business guy with a technology interest?”

2.Make a plan – and keep it up-to-date:
Here’s an idea that might make it easier. Find a mentor, or at least a role model – someone in the organization you can look to and say ‘I want to be like that person’. Go talk to that person, find out how they got to where they are, and see how you can adapt that experience to your own situation.
 

3.Develop good habits:
I’ve seen many folks develop damaging habits and thinking “I know this is not a good habit, but when the real opportunity comes, I know I’ll be different”. Wrong. There is an English-language saying – “we’re all creatures of our habits” – meaning who we are and how we respond to a situation is determined to a great extent by the habits we have developed.

4.Be an expert - on being an expert:
It doesn’t really matter as much what particular subject matter you become an expert in, what matters more is that you become an expert in becoming an expert.

5.Help your manager and your team:
They often come to their manager to discuss what they can do to get that next promotion. I’ve always found these conversations somewhat strange. Of course, depending on the circumstances there may be a variety of things that you need to do that would help you advance in your career. However, one consistent way I’ve found that employees can help both themselves as well as their team is to ask a simple question – what does my manager worry about and how can I help him or her?

6.Drive your career, but don’t be obsessed with it 
So, while we all have our goals and we work towards them, it is important to take your time and smell the roses along the way.
 

原文很长,只能节选出来。每一次读都有不同的体会。
在这世界上,没有完美的公司,没有完美的人。我愿意作为一个微小的人,为了理想去战斗。也愿意作为一只晕了头的老鼠,沉醉在这个知识体系的大米缸里。
--写在微软一年

 

 

 (我的培训课程表)

Title Start  Priority Status
Creating Accessible User Experiences Oct. 29, 2008    
Program Management at Microsoft Jun. 27, 2008    
Scrum and Agile Project Management Jun. 26, 2008    
Project Management Jun. 23, 2008    
Moving to PM from Other Disciplines: Why Do You Want to and Should You? Jun. 13, 2008    
CandidTree and FacetLens Jun. 12, 2008    
Designing, Developing, and Deploying Internet-Scale Services Jun. 12, 2008    
Doing Design When You Are Not Designing User-Interface Features Jun. 12, 2008    
Building Consensus vs. Driving Consensus Jun. 11, 2008    
Product Life Cycle Basics May 22, 2008    
Building Business Models: Creative Destruction and Competitive Advantage      
Capturing and Viewing Big, Wide, and Deep Imagery      
Choosing the Right Agreement      
Classes of Security Defects - Online      
Communicating Up: Effective Interaction with Management      
Cool Stuff from Cambridge      
Creating a Team Environment      
Creating Accessible Content      
Customizing Agile Principles for Large Projects      
DealPoint      
Designing Your Feature—What You Need to Do BEFORE Writing the Spec      
DieHard: Memory Error Fault Tolerance in C and C++      
Different PM Styles at Microsoft      
Differentiated Project Management      
Driving Fit and Finish in User Experience Quality: Desirability Is in the Details      
Engineering Expert, Lead, and Manager Commencement (November 2007)      
Five-Minute Analyst      
Five-Minute Manager      
Forms of Intellectual Property (IP)      
Functional Specifications at Microsoft      
Getting a Handle on That "Vision Thing"      
Guidelines-Based User Experience Design      
Hero's Journey: The Art of Storytelling for Business Opportunity Proposals      
How to Build Credibility in Your Group      
How to Drive a Project and Not Leave Bodies in Your Wake      
How to Make Good Decisions      
How to Make Things Happen: Mastering Project Management      
How to Read Code for Fun and Profit      
How to Succeed at Cross-Group Work      
Increased Scope of Influence: Feeling Responsible for More Than You Own      
Introduction to Scrum      
Leveraging and Effectively Managing Cross-Group Dependencies      
Magical Interfaces: Using Sensing Technology to Create Mind-blowing UX Beyond the Mouse and Keyboard      
Making Decisions Using the OARP Model      
Managing Perceptions      
MeasureIt: Microbenchmarking for the .NET Platform      
Moving Up the Design Curve for Greater Competitive Advantage      
MythBusters: Does "PM" Really Stand for "Provider of Meals"?      
Negotiating Skills: Creating Win-Win Situations      
Program Management at Microsoft - Online      
Program Management Business Skills Challenge: Business Strategy and Rules      
Program Management Business Skills Challenge: Customer and Partner Engagement      
Recruiting and Interviewing for Program Management at Microsoft      
Risk Management: Tips and Tricks of the Trade      
Secure Software Basics - Online      
Security Development Life Cycle      
Security Testing - Online      
SEO Spelled Out      
Shared Development: Best Practices and Lessons Learned      
Shipping Services vs. Shipping Boxed Products      
Twelve Years of Visualization Research at Microsoft      
User Account Control: Why It Matters and How to Design Applications to Work Well      
Using Microsoft Project to Manage Projects      
What Makes a Great PM?      
When Working Software Is Not Enough: A Story of Project Failure      
Working with Your Counterparts in Design and Planning      
Writing Great Disclosures      

 

 

June 18

Doing what?

还需要一台1U服务器;

端午拍的照片也可以上传了.

还有最好有七天的假,可以写完 spec :)

最近有够忙

 

June 01

A program without a line of code

我自己当老师的时候写的一个程序,在数年前,使用的频率非常高。每周都有使用,可能前后有一两年吧。
之所以想起这个话题,是因为突然想起程序的好与坏这个话题。

当时写这个程序的动机很简单,为了看VCD,那时的VCD很多没有中英两种字幕可供选择,使用得最多的是超级解霸,号称任何烂碟都能读的那种。

为了能边看碟还能顺捎着学学英语,练练听力,我要有一个程序可以把VCD里面的字幕遮掉/抹掉,同时最大程序地减少对画面的影响。

下面是这个程序的功能分析:

方案一:

动态捕捉字幕,出现之后立刻同类似于PS中的图章工具复制周围图像到字幕上,遮住字幕。需要考虑的因素,字幕捕捉,可以定义为在特定区域出现的连续白色图像块,

功能要求尽可能地减少字幕出现之后的反映时间,允许动态调整周边补充色块的对比度,透明度。

方案二:

不进行逐字抹除,而使用条状窗口对字幕进行遮盖。对此,窗口的功能应该满足:对播放窗口的粘着性,可以动态调整宽、高,透明度。支持快捷键操作,自定义快捷键

来决定何时调出程序,何时最小化,何时关闭。

最后采用的方案没有写一行代码:

在Delphi里直接生成了一个always on tops的窗口,名字叫作:超级无敌遮遮布。我使用这个没有一行代码的程序的时间比其它自己写的任何程序都长。

用这个程序,就象是用手捂着书本后面的答案,在那所文化休闲生活比较贫乏的高中里,把《黑客帝国》看了十几遍,当然,有时候也算是一种发泄。结果就是,感觉英语不是

那么地难学,而且在片中的主人公张嘴前,基本上能接下去他的下一句台词:

在训练场上,Mophis 对 Neo 说: Don't think you are, know you are.

Neo 成功救出 Mophis 把他拉上平台之后, Mophis 对他说: Sooner or later, you going to realize there's difference between knowing the path and walking the path.

May 22

Brownbag talk

今天下午听了微软亚洲研究院来的guest做的关于search engine 的talk, 可以纠正很多关于技术和live search 本身的bias.
微软的支持每秒上千次query的search engine server clusters 是运行在自己的 windows server 2003上面的,5万台 server 的管理人员只有5名, 也用的是自己的服务器管理软件.
并不象外界描述的那样.
上周听的讲座是Redmond 来的 关于 high performance c# development.
很多牛人,很广的领域.
May 21

How to Left Join

It's about "LEFT JOIN" in SQL query.
I would like to blog it by 4 steps:

1. What's Left Join?
2. How to implement?
3. Common errors.
4. Some practise.

If you are seeking for an answer from internet for what’s going wrong with your SQL left join, you may try luck by directly go to item 3. If you would like learn something about left join, let’s start from the beginning.

1. What's Left Join?

Firstly explain it to a 10 years old boy about what’s left join.

Class you in, some mates have white paper on hands; The next class have some color pens on hands.
Now the teacher is asking you to: find out how many mates in your class with paper already find their partners with a pen, so they can play painting and how many mates left don’t have paper on hands so the teacher could get for them.
Now what are you going to say:
Hey, all of the us please stand in a queue, all of the next door buddies with pens on hands please come here find you partners with paper on hand.
Look, the words you are saying is exactly the “left join” command in SQL try to do, to match staffs from different places.

Secondly explain in programming:
"Select" in SQL is pretty much a function in programming language, with the indicated data sources generate into one & only one output.
The role left join plays here is to match different data sources, merge them into 1.

2. How to implement?

Now let’s back into the reality, as a DBA for an online store, you have 3 tables:
Table users for recording userid, username;
Table selling for recording users consume info, how much money they spent;
Table visits for recording how many times they visit the web after registration.
These 3 tables are just samples, doesn’t apply the 3NF checking :)

Userid username
1     Jack
2     Rose
3     Tom

table selling
Userid amount
1     100
3     150
1     200

table  visits
Userid visitcounts
1     5
4     2
3     4

Now, you boss comes to you, “give me the report of how many times the users visited our web”.

With left join, a piece of cake:
You do.. “ select users.username,visits.visitcounts from users left join visits on users.userid = visits.userid “

(No idea about left join syntax? Here you go:
http://msdn.microsoft.com/en-us/library/bb208894.aspx
http://technet.microsoft.com/en-us/library/ms190014.aspx
http://dev.mysql.com/doc/refman/5.0/en/join.html
)


Then you will get:
username  visitcount
jack     5
rose     NULL
tom     4

How does this happen?

select users.username,visits.visitcount from users left join visits on users.userid = visits.userid
The left table is on the left of the syntax; Right is on the right (visits here).
1. get all the data from the left table

Jack

Rose

Tom

2. pull out the date from right table

Jack

5

4

Rose

5

4

Tom

5

4


3. match them together, keep the matched data from right table, screen out none-matched

Jack

1

1

5

3

4

Rose

2

1

5

3

4

Tom

3

1

5

3

4


Ok, now, your picky boss said, page views means nothing to me, show me the total money people spent on my web together with those who hasn’t.

So you back and found in table selling there are multiple records for some users, how could left join work without 1 on 1 match?
Got stuck?

Try this out:
select users.username, selling.amount from users left join ( select userid,sum(amount) as amount from selling group by userid ) selling on users.userid = selling.userid

Here’s what you get:

username  amount
jack      300
rose      NULL
tom      150

See? By doing the sub-query, { select some-date from a-left-table left join ( select another-data from another-table ) another-table on condition-leftside = condition-rightside }, which makes the left join quite powerful.

To help understand the formula, separate it into several parts:
Select {  0  }  <= input the data/columns you want to get eventually in here
From { 1 }   <= input the left table
Left join { 2 }  <= input the data going to be matched to left table, sub-query is workable inside
On { 3 }   <= the condition going to match between each other
Where/order by / limit { 4 }  <= the condition you going to add into left table when pulling data out of there.


3. trouble shooting:

1. reported “Unknown column '' in 'on clause' error.
This is common, must because you omit something.

Take a look at following syntax, which will report above error:

SELECT users.username, selling.amount
FROM users
LEFT JOIN (
SELECT sum( amount ) AS amount
FROM selling
GROUP BY userid
)
selling ON users.userid = selling.userid

Here will report Unknown column 'selling.userid' in 'on clause'.
People tend to think, since not going to show the userid in final report/output, so not necessary to select it, that’s partially right, look at the matching condition, users.userid = selling.userid, how could the function find the variable “selling.userid” since it never been claimed ?
So, to correct it, add select userid before sum(amount).

Check this out:
SELECT users.username, selling.amount
FROM users
LEFT JOIN (SELECT userid, sum( amount ) AS amount )
FROM selling
GROUP BY userid selling ON users.userid = selling.userid

Will report syntax error.
Properly using the parentheses following left join, which should include the full syntax which helps pull out the data from another side, i.e.

(
SELECT sum( amount ) AS amount
FROM selling
GROUP BY userid
)

And also parentheses is required doing such kind of sub-query.

SELECT users.username, selling.amount
FROM users
LEFT JOIN SELECT userid, sum( amount ) AS amount
FROM selling
GROUP BY userid AS selling ON users.userid = selling.userid

Syntax error, if you want to use “as”, use it thoroughly.

error Column '' in on clause is ambiguous

select users.username, selling.amount from users left join ( select userid,sum(amount) as amount from selling group by userid ) selling on users.userid = userid

Very easy to understand, because you omit the users.userid = selling.userid

It’s all about good habits on coding.


* Homework:

How to get:
username  visitcounts
jack      5
tom      4

How to get:
username  visitcounts
jack      5
tom      4
NULL     2

Practise following commands:
"join/inner join/cross join/straight_join/left outer/right outer”.

 

P.S. This is my first blog purly talking about technical staffs, and they are my personal opinions.
The reason that I didn't do that before it's because my job, so I won't use it in interviewing :)
The reason for me talking about the "left join" staff is because I can't find the right thing I need from the web, so made myself one.

Your comments welcome.

 

 

May 07

some thoughts

一些想法:

1。老师是那个对你不好的人。
2001年刚到上海的时候,每天上网总归打开网易和易趣来看,那时候感觉易趣是个很有活力的网站和公司。
因为工作和ISP有一些关系,自己想了一个“创意”的点子,并把它写成计划书,就径自跑到易趣去,去找他们当时的一位高管。那天那位高管正好不在,另一位员工接待了我,说放心易趣不会窃取他人的点子,并且把那位高管的电话和邮件写在便签上给我。
我于是后来给她发了邮件,并且打了电话。
在电话里面,她问我,你在易趣上卖过东西吗?我说,还没有。
她接下来说的意思是,你不是易趣的真正用户,没有调查没有发言权,请我以后不要再给她打电话了。

我也后没有再打电话。
因为我学了一课:不知道就是不知道的另外一种意思是,请你知道了以后再说。
这种自我意识催促我去学习。

如果那位老师和颜悦色地说,小朋友,听话,不要再来闹了。我现在什么也学不到。


2。田忌赛马
这个道理非常简单,要用自己的长处去比别人的弱势。
五一的时候回了次老家义乌:看一个城市最大的感受可以从广告中得出来。
义乌的公交统一运营,上面有移动电视,轮换播广告。
广告里面很显著的一块是培训:教人说英语,日语,韩语,以及阿拉伯语。
比如说:欢迎来到我的摊位: Welcome to my stall! 这是一件新产品: This is a new product. 没有受过高等教育却正在把 made in China的东西发送到全球各地的经商人正在渴切地学习。
在火车站候车大厅里面,能看到巨大的广告牌,一些知名明星如李冰冰,成龙等正在为袜子,日用品等代言。
这是成长中的企业用到的最快最多的推广方式。

换一个角度,在上海,在微软,在招人过程中,一个受过高等教育的候选人,正在和其他非常聪明的候选人竞争。有的面试官已经表现出一些对于麻省理工,斯坦福毕业的学生的亲睐了。

很多年前,我因为要打破自身的局限来到上海。
如果可以重来,我会选择留在家乡。

很多刚毕业的大学生,500强固然很好,农村你会考虑吗?


3。盘点库存
有的时候周围朋友有些不愉快的时候,我就问:
你的父母,亲人身体好吗? 你现在担心吃饭问题吗? 你现在有住处吗?
这些问题似乎很愚,如果每个人都这样想,社会似乎就不会进步了。
但是想说的是,知道自己的底线在哪儿,比什么都重要。


4。戏如人生
每个人都是演出来的。凡是荧光灯下的人,全部都是在作戏。抱歉,可能比较愤世嫉俗。每个演员都在演一个人,观众在观看的时候,也没有把那个人当成是演员本身。换句话说,把他放到生活中。。。?
有一个在ICV上播放的节目:Faking It, 教群众演员,把游艇上的女侍应生在四周内教成帆船船长;把医院把片的医生教成专业的模特摄影师,外人真假难辩。

每个人心里都有想成为的那个人,区别是:有些人执迷于此。
现在是engineer, 心里经常在想的是,成为manager以后要怎么管人;现在是manager, 在想的是成为director以后要怎样把公司现有的一些流程推翻,重新改革。
对有些人来说,心里想成为的那个人,在有些人身上比“自己”更强大,他会迷了你的双眼,他会在你耳朵旁边说,不要放弃管理的机会,不要放太多的时候在技术上钻牛角尖。

有些人听不见想成为的那个人的声音。他很羡慕别人,可是认为自己起步太晚,改变太难。除了看 Faking It 之外,张开想像的翅膀吧。