HABIT IS POWER

习惯就是力量

0%

作为一个GTDer,我一直在使用RTM(http://www.rememberthemilk.com/ ),今天难得的可以停下来思考下人生,所以像整理办公桌一样把RTM里面的任务整理了下。

整理了什么?

1、把一年前的已完成的任务 存档

一年前的任务了,自然也不太可能去修改,存档起来可以提高访问效率,这是我每年都会做的事情;我的列表之前是类似这样的:

1
2
3
学习
工作
工作_存档

“_存档” 列表大部分时间都是处于“存档”状态,只有整理列表的时候,才会把它临时取消存档,然后把要存档的任务移动过来,之后就把这个列表继续变成“存档“。

2、做的第二个整理就是把“学习”这个很宽泛的列表给去掉了,取而代之的是具体的项目列表

在整理的时候其实没具体怎么想为什么要这样子做,但是做完后我突然觉得这里面是有道理的。

所谓学以致用,单纯为了学习而学习效果一般都好不到那里;

但是如果有一个“项目”来跟进这个学习,那么学习的结果向来会好很多;

很多牛人有自己的开源项目,这里面我觉得牛是开源项目的结果,而不是因为牛所以有了某个开源项目。

想到了?

GTD把事情切割成一个个的小任务逐个突破,分而治之,把大目标切割成小目标,逐步实现,每个阶段都有很明确的任务要完成,这是典型的目标导向;

GTD的核心之一是目标导向,学习是手段,用手段来当目标自然无法达到理想的效果。

有人说GTD是一种生活方式,我倒是觉得GTD只是换了一个角度来观察这个世界,观察的角度不一样,世界也不一样了。

我的问题:

环境:

Windows 8 版本 RTM (Build9200) + Visual Studio Ultimate 2012(Version 11.0.50722.1)

我希望在同一个无线网络下的PC和平板之间远程调试我们的Metro 应用,PC上安装了VS2012,平板上没有安装VS2012,但是遇到了些问题

解决方案:

  • 1、在平板上安装远程调试工具包:rtools_setup_x64.exe

  • 2、在平板上运行并配置Remote Debugger

    • 2.1 记得以管理员权限打开Remote Debugging Monitor
    • 2.2 配置认证方法,使用“No Authenticaton”并勾选”Allow any user to debug”
  • 3、在PC上,打开VS,菜单”Tools”->”Attach to Process”,选择Remote,然后输入平板的IP地址,随便选择一个进程进行attach**

  • 4、必须要有第三步,因为我发现我从PC竟然ping不到平板的IP,但是却可以用第三步attach到平板上的进程

  • 5、取消第三步的attach,打开你需要远程调试的工程,Debug Target选择“Remote Machine”,然后F5

  • 6、搞定

关键在于远程之前先attach下,应该是VS的一个Bug,不知道新版本是否解决了,这里备忘下

首先你应该知道这个类大概是做什么的:

Windows::ApplicationModel::Store::CurrentApp

MSDN上的说明:Windows.ApplicationModel.Store classes

上面的MSDN页面给我们提供的API主要是用于Metro Style App的Store购买相关的信息和功能,其实微软给我们提供了两个类:

1
2
3
4
5
CurrentApp class
Defines methods and properties you can use to get license and listing info about the current app and perform in-app purchases.

CurrentAppSimulator class
Defines methods and properties used to instantiate an object that you can use to get simulated license info during testing.

这两个类中,微软推荐我们用CurrentAppSimulator进行测试,可惜我有个坏毛病,代码一定要自己跑过一次才相信,微软所说的先用CurrentAppSimulator调试,上架的时候直接换成CurrentApp就万事大吉了,这样的“理所当然”我可不信,所以我想方设法想亲自验证下CurrentApp这个类的功能,下面是一些我自己的验证。

测试环境:

外网大家正在用的Windows 8 RTM版本,VS2012(这俩微软官没有正式版,所以本文的结论一段时间后可能会被微软自己推翻)

我遇到的问题:

微软的MSDN说要调试CurrentApp必须使用开发者帐号,且应用已经上架,那我就想我本地想调试应该怎么弄呢?我不想用CurrentAppSimulator敷衍我自己

1
2
3
2012/9/8 补充
这里其实有猫腻,所谓的已经上架还不够,还需要你在调试的机器上购买并下载了这个应用才算数
所以调试之前一定要到应用商店的“你的应用”中检查下要调试的应用的状态

最后成功的方案和需要注意的细节:

  • 1、应用已经上架,这个是必须的,如果没有的话就确实只能用CurrentAppSimulator
  • 2、Package.appxmanifest里Packageing Tab页的Publisher属性必须是你已经上架了的应用的开发者帐号对应的证书,这个证书在你创建用于上传到Store的Package时会自动帮你填充(这个证书是关键
  • 3、只要你调试的时候符合上面两个条件,无论你是本机直接F5调试还是编译本地安装包然后测试,都能获取到CurrentApp的Store信息。你会发现异步获取到的ListingInformation就是你在Store后台配置的应用信息。(ListingInformation->Name就是Store上的应用名)

修改安装后的应用文件是否会影响CurrentApp->LicenseInformation的IsActive和IsTrial呢?

我的实验结果是不会,而且我发现这影响Store返回的两个属性值的关键在于我上面提到的Package.appxmanifest里Packageing Tab页的Publisher这个证书。

也就是说你从Store安装了某个应用,然后修改这个应用安装目录下的文件,CurrentApp->LicenseInformation的IsActive和IsTrial属性并不会受到影响,其他的属性我就没有进一步确认,大家有兴趣可以自己验证。

2012/9/8 21:18 今晚调试后再补充点信息吧,希望对读者有用:

  • 1、没有网络的时候获取License Information是会失败的
  • 2、没有购买的时候获取License Information也是会失败的
  • 3、License获取的线程也是有讲究的,你用线程定时器起来的异步操作中执行的话,需要先做下线程切换

所以我们需要对代码进行异常捕获,要这么写才可以:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void AppEngine::InitializeLicenseCore()
{
try
{
m_licenseInformation = CurrentApp::LicenseInformation;
task<ListingInformation^> listingTask(CurrentApp::LoadListingInformationAsync());
this->m_licenseInformation->LicenseChanged += ref new LicenseChangedEventHandler(this, &AppEngine::OnLicenseChanged);
this->OnLicenseChanged();

listingTask.then([=](ListingInformation^ listing)
{
this->m_listingInformation = listing;
Platform::String^ name = this->m_listingInformation->Name;
// ...
})
.then([=](Concurrency::task<void> t)
{
try
{
t.get();
}
catch (Platform::Exception ^ e)
{
log_error("license listing task exception");
}
});
}
catch (Platform::Exception^ e)
{
log_error("InitializeLicenseCore exception");
}
}

Windows 8还没正式发布,我所说的都是错的 :)

有段时间没有写WinRT相关的文章了,这段时间还会继续,因为我们目前在进行界面应用层的HTML5化 :)

今天要和大家分享的是:

WinRT下,使用HTML+JavaScript实现的界面应用层,调用C++实现的底层WinRT组件(Windows Runtime component)的相关注意事项

嗯,标题很长,下面我们来干货:

  • 0、提供给JS工程调用的C++类必须是ref类,这个好像不用说吧?:)

  • 1、JS调用的函数名首字母必须是小写,无论你C++代码实际是不是小写,比如:KillBill(),在JS中调用的时候必须写成killBill()

  • 2、JS调用的delegate方法,在赋值时要注意加上前缀”on”,同时全部字母小写,比如:C++类中有这么一个成员变量:

    event OOXXEventDelegate^ OOXXEvent,
    那么你在JS中给他赋值时必须这么写:
    objOOXX.onooxxevent = handler_ooxx;

  • 3、提供给JS工程调用的C++类的命名空间必须和DLL的名字相同,比如你的DLL叫做SuperEngine,那么你的类的顶级命名空间也必须是SuperEngine

  • 4、JS可以调用ref 类的静态方法,但是记得方法名一样要首字母小写

  • 5、回调回JS的代码必须在主界面线程中回调,否则会失败,这个在XAML下也是一样的,解决的方法还是比较简单的,就是在一开始保存下当前的Dispatcher,

    auto dispatcher = Windows::ApplicationModel::Core::CoreApplication::GetCurrentView()->CoreWindow->Dispatcher;
    然后回调的地方用RunAsync跳转下:
    auto callback = ref new Windows::UI::Core::DispatchedHandler(={
    m_event->OOXXEvent(eCode, ref new Platform::String(strErrTip.pstr));
    });
    m_dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, callback);

  • 6、导出的类必须要有CPP文件JS那边才能访问的到

  • 7、导出的类所继承的类不可以包含数据成员变量和Event类型的成员变量,private的也不行

  • 8、导出的类可以继承接口,接口中可以包含event类型的变量(理论上其实event就是个函数),这条和上一条并不冲突。
    举个例子说明下这两点:

    • 8.1、你有一个接口INotifyPropertyChanged,接口只有一个方法:event PropertyChangedEventHandler^ PropertyChanged;
    • 8.2、如果:你的实现类直接继承了INotifyPropertyChanged,那么这样的导出类是没有问题的(这个时候按照语法你需要在你的实现类中这样声明下:

    virtual event PropertyChangedEventHandler^ PropertyChanged;

    • 8.3、如果:你的实现类,继承了一个类叫做NotifyPropertyChangedBase,而NotifyPropertyChangedBase又继承了INotifyPropertyChanged,那么这个代码在C++这边编译没有问题,但是JS一调用就会crash:

    An unhandled win32 exception occurred in WWAHost.exe

  • 9、还有什么回头想到我再补上

微软官方提供的例子其实还是挺不错的,只是说的没那么清楚:

[http://msdn.microsoft.com/en-us/library/windows/apps/hh755833(v=vs.110).aspx MSDN:Walkthrough: Creating a basic Windows Runtime component in C++ and calling it from JavaScript]

作为一个中国人,台湾是那样的熟悉,却又是那样的陌生;没有人不知道台湾,但也没几个人能说的清楚台湾。

在刚刚过去的6天5夜,我有幸和同事们一起和台湾来了个亲密接触。

6天5夜的台湾之行根本不够我们认真的体验台湾,但却足以感受台湾的热情,台湾最美的不是她的风景,不是购物天堂,不仅仅是台妹销魂的声音,而是台湾的风土人情。

台妹的声音

大陆媒体上能听得到的好多台湾女孩的声音都很做作,听到鸡皮疙瘩都快起来了,但我们在台北听到了声音是自然的、舒服的、骨头都会酥掉的

汽车

汽油、的士没有垄断!我们只打过一次的,在车上和司机简单的聊了会,发现:

  • 1.没有燃油附加费(台湾的油价对市场的反应很快,升得快,降得也快);
  • 2.不用交份子钱,车归自己,包括税在内一个月交2000块新台币左右后其他的都算自己的(我们去的那几天1元钱人民币可以换4.6元新台币);
  • 3.只要你有驾照交1万新台币就能拿到的士拍照
  • 4.马路上几乎有8成以上是日本车(丰田、三菱、日产……),然后是宝马,奔驰,在夜市见过一辆兰博基尼
  • 5.我们回来的那天台湾98#的油价小涨了点,是新台币35.3,约合人民币7.6,这个时候深圳的97#是¥8.6

购物点

相对来说没有大陆的那些购物点那么让人反感,没有表现出那么势利好像

阿德哥

我们的台湾地陪阿德哥,是一个很黄但又有点淳朴的大叔,他总是说:“好啦,我给你们讲个黄色笑话”。

去完阿里山的那个晚上,我们还有一个景点没去,但是大家都很累了,所以一致统一不去那个景点了,但大陆旅行社的领队就说必须写下这个情况,所有人签字才可以。阿德哥写完后给大陆领队看,领队说不行不行,怎么能写:“由于天色已晚,考虑到安全问题,大家一致同意……”,要写“由于天色已晚,所有团员主动要求……”

景点

景点不会让你震撼,但都挺舒服的

由于我一贯主张出来旅游不能累着自己,所以好几个地方如果我觉得可去可不去的话我就不去了,比如野柳地质公园,我就是走了一半我就回去找了个凉快的地方等他们;这样的整个行程下来走的最累的应该是故宫博物院。

城市

我最喜欢的是台中,惬意的有点像珠海;台北人太多,像香港;高雄是重工业城市,弥漫着浓厚的油烟味。

期待什么时候可以台湾自助游~

这个是个作业,看书的同时用XMind做读书笔记,今天快速读完这本书后逼出来的读后感,放出来是为了恶心以后的我自己。其实书里的道理讲的没错,只是这种读书的方式有点极端。

《卓有成效的管理者》读后感


刚拿到书时,我就被扉页上的文字所吸引:

“卓有成效是管理者必须做到的事,但是在所有的知识组织中,每一位知识工作者都是管理者”;

读书笔记

自认为是一位知识工作者的我躺着也中枪,这让我很想一口气读完这本书,看看究竟如何才能做到这样一件“必须做到的事”。

有效的工作

书中作者首先告诉我们“卓有成效是可以学会的”,而且如果你的工作缺少有效性,那么你对做好工作和做出贡献的热情很快就会消退,你将很快成为朝九晚五在办公室消磨时间的人!
我可不想消磨人生,在沉默中灭亡,我需要有效的工作。
有效的工作是一种后天习惯,是一种实践的综合,为了达到这样的目标,我们必须在思想上养成一些习惯:

  1. 有效的管理者知道他们的时间用在什么地方
  2. 有效的管理者重视对外界的贡献
  3. 有效的管理者善于利用长处,包括自己的长处、上司的长处、同事的长处和下属的长处
  4. 有效的管理者集中精力与少数重要的领域,在这少数的领域中,如果能有优秀的绩效就可以产生卓越的成果
  5. 有效的管理者必须善于做有效的决策

掌握自己的时间

其中最重要的一点就是要“掌握自己的时间”,我个人很喜欢的另一本书《把时间当作朋友》,书中的内容和观点与彼得.德鲁克有很多的相似点。

掌握时间我们有三个环节需要去认真的执行:

记录时间、管理时间、统一安排时间,这是一项需要当成习惯来培养并持续坚持的事情。效率的基础是时间,时间是所有资源中最为稀缺的,人才和资金都没有时间重要,我们如果无法完全认识自己,那就先从认识自己的时间开始,做时间的朋友。

效率和管理的联系

把书名生硬的分成两个部分的话,第一部分是效率,第二部分是管理,那么之于管理作者德鲁克又有什么样的建议呢?

首先是明确目标:“我能贡献什么”。重视贡献有效性,其实就是你的重视你的成绩单,你能为公司和自己带来怎样的收益,贡献的有效性表现在以下三个方面:

  1. 自己的工作,包括工作内容、工作水准及其影响
  2. 自己与他人的关系,包括对上司、对同事和对下属
  3. 各项管理手段的运用,例如会议或者报告等

另外,我们要需要着眼于人际关系的培养,要注重互相沟通、团队合作、自我发展和培养他人。

执行

关于管理,有了目标之后就是执行,而人才是执行力的有效保证。 “如何发挥人的长处”?作者告诉我们:扬长避短是组织存在的重要意义。人无完人,要让合适的人做合适的事情。

一位有效的管理者,在深陷杂事之中时,能够做到“要事优先”,他们会把主要经理集中在当前进行的工作上,而不会再去兼办其他工作。要想集中精力,全神贯注于一项工作,首先要有足够的勇气,要敢于决定真正该做和真正先做的工作。

管理者还要善于做决策,这是管理者水平的一个重要衡量指标,道之所在。

小结

提高管理者的有效性,是促进现代社会经济增长的希望所在,也是现代社会得以生存和发展的一大保障。作为一个知识工作者,我要走的路还很长。

对于音乐我是个门外汉,本文讨论重点在于音乐电台这类互联网应用的产品体验。

一直用着豆瓣电台,最近开始体验jing.fm感觉眼前一亮,所以觉得有必要写点东西推一推新产品的新思维,希望QQ音乐电台能更给力点,这样也就不枉费我的QQ绿钻了 :)

douban.fm

我最开始用的音乐电台,很省心的产品,但是在我听过的歌曲达到了2W之后我开始稍微有点反感了:

  1. 大部分的音乐都是演唱会的歌曲,质量很低(也许是版权费的问题,专挑免费的歌曲,歌手总要出来说说话,类似“杰伦加油”这种,当然这个我还是可以接受的,无法接受的是唱完歌还要说几分钟话的那种)
  2. 推荐的歌曲已经开始变成一个大循环了,歌越听越少
  3. “发现DJ”的出发点很好,用户创造内容是未来发展的大方向,但是目前来看高质量的DJ还是太少,而且不一定符合自己的心情,寻找合适自己的DJ电台比较麻烦
  4. 不能屏蔽艺人(某些道德沦陷的艺人,我一点都不想听到,和歌曲无关)

fm.qq.com + y.qq.com

  1. 和豆瓣音乐和豆瓣电台比唯一的优势是正版音乐比较多,音乐质量稍微高点
  2. 有y.qq.com做支持,不担心版权的问题,歌曲比较全,艺人电台比较全
  3. 猜你喜欢的算法对于我来说还太弱了,总是没能找准我喜欢的音乐,这点不如豆瓣电台(这点不同人理解不同,我也见过说好的)
  4. 有歌词,不过听电台很少看这个,偶尔会看下
  5. 不能屏蔽艺人(某些道德沦陷的艺人,我一点都不想听到,和歌曲无关)

jing.fm

  1. jing.fm是最近刚出来的一款音乐电台应用,他的Genius功能可以说是惊艳!艺压群芳!(可以根据你的情感. 风格. 艺人来进行快速的搜索听歌)
  2. 同时具备个人电台. 喜欢、删除,还有刚刚推出的屏蔽艺人的功能(赞!)
  3. 可以说是在众多音乐电台吵来吵去的时候出现的一次大变革,大突破。
  4. jing.fm 的音乐关键字竟然有“雨声”!其他的音乐电台瞬时被秒杀
  5. HTML5播放器下经常听歌听到一半卡住,换成flash播放器后就比较少出现,不过产品刚出来不久,后面应该会改善(记得豆瓣电台刚开始也有类似的问题,我还在twitter反馈过,现在偶尔也会这样)

xiami.com/radio和meile.com/fm 我个人用的很少,只是简单体验过,没有太多新意。

小结:

  1. 老牌劲旅豆瓣电台如果不收费的话必然受限于版权问题,歌曲越听越少
  2. QQ音乐电台依靠QQ音乐强大的音乐版权,艺人电台是最大优势,猜你喜欢还有很大的提升空间
  3. jing.fm 刚刚推出,不仅界面交互让人眼前一亮,Genius的音乐搜索功能绝对算的上是一次变革,很让人期待

怎么写得有点像软文,我觉得最快把Genius COPY过去的会是QQ音乐,豆瓣电台会在“发现DJ”这块继续发力,用户创造内容是大方向,但是搜索要优化。

感慨

2000
看上面的时间,其实还没到2年的时间,不过时光流逝的感觉非常强烈。

当初刚换工作,难得有心境可以做些自己想做的东西,投入的时间不是很多,但很开心。

当初其实一开始知道做这个应用不是一个终究目标,而只是一个练手,毕竟M8的开发能力还是受到很大的限制,于是在不久之后自己就决定会利用业余时间实现一个iPhone应用,结果呢?快两年了,思考过、准备下手开发的应用思路补下10来个了,但没有一个真正开始过。

下面的文字补充于 2012/6/20


之前的草稿放了这么久了,思路有点断线了
昨天凌晨的Linode新用户注册送$100活动差点就下单了,花$28,可以用6个月零11天的Linode VPS,多么实惠啊!
最终,我还是没买。

原因:

  1. 自己一直新的应用项目开展,当下没有实际的VPS需求;
  2. 好读书不求甚解的心态,导致我最近看的书,学的东西很杂,VPS只会另我的精力进一步分散;
  3. 严重的拖延症,想法太多,但是实践的太少

明年今日不知道会怎么样,希望自己能够更多的实践而不是停留在瞎想和扯淡上面。

事出有因.采访

下午接受了Stack突然的采访,或者说是聊天,主题是关于编程心得,由于事先也没有准备过,说的也比较杂乱,回想了下把我下午说过的点大概备忘如下。

要点备忘

  1. GTD和我的设计哲学,把大的事情细化,切分成小任务来执行
  2. 够用就好(不过度设计,经常重构),小步快跑的节奏来进行开发
  3. 争取把工作在下班前完成
  4. 下班后要有自己的业余兴趣,有自己工作以为的编程学习,学习些自己工作中接触不到的方面,比如客户端开发学些后台开发等等
  5. 关注. 参与开源项目
  6. 代码洁癖,编码风格对我来说很重要

本来还想着每条都可以扩充来解释下,但是敲完上面的字我发现没这个必要了 :)

“The world is a book, and those who do not travel read only one page.”
– Saint Augustine

世界是本书,没旅行过的人只看到其中一页。

旅行,释放心灵,吸收来自世界各地的养分,在有限的生命中更快的成长

为什么要旅行?旅行只是出去玩吗?旅行最吸引我的可不是那些好玩好吃的种种,而是旅行时的心态。

旅行,最重要的其实是放下,说服自己放下目前手头的事情,放空自己,让自己有机会接触到新鲜的世界。
浮躁的都市生活下,人们往往活的很被动,日复一日,年复一年的工作之后,生活变得越来越没有创造性!
日子像是有重量一般,不断累加,把人压得喘不过气来。

无法放下,又怎能自由!

旅行就像是修筑马路时的分割线一样,一路平坦下去看上去没什么不好,但一旦出现裂缝就是一整条马路全部坏掉,分割线的作用在于将影响控制在有限的区间内,旅行就是生活的分割线。

从去年年底开始就一直在做Win8QQ,从无到有的主导一个产品,让我成长了很多,但也积压了很多的负担,我想我应该给自己的人生像git打标签一样,切出一条分割线来。

分割线之后,继续发力,创造更美的未来。