Samson's Blog

  • Home

  • About

  • Archives

Multiple line support in SublimeTask

Posted on 2013-02-20 | Edited on 2018-11-29 | In Share , Sublime Text 2 , Technique , TextMate , Tools , Vim
Symbols count in article: 1k | Reading time ≈ 2 mins.

[废话] 鄙人新一年有个小计划,那便是需要开始protect起自己的private personal time,过去的一年因为工作牺牲了太多的个人时间,这样的策略抑或无奈是物有所值还是得不偿失需要被重新审视和评估; ==================== 废话的分割线 ==================== [Introduction] Check out this introductory post if you don’t know what is SublimeTask. [Overview] Let’s keep it simple and short this time, since it’s very late now :(. As issue #3 indicated, previous version of SublimeTask lacks the feature of multiple line support, this update just addressed this issue and addressed it well. 2 kinds of multiple types are now supported:

  • Multiple selections (hold ⌘ during multiple selections, one key fancy feature of Sublime Text)
  • One selection with multiple lines (this should be self explanatory)

So from now on you should be able to mark multiple tasks as completed/incomplete in just one shot, enjoy! [Upgrade] If you have Sublime Package Control installed, just do a “Upgrade Package” to get the latest version of SublimeTask. [Report Issues] Please feel free to report any issues here: https://github.com/samsonw/SublimeTask/issues

Update 71: "kat poop" coffee

Posted on 2013-01-29 | Edited on 2018-11-29 | In Life , Minds
Symbols count in article: 571 | Reading time ≈ 1 mins.

1. 已经不知道多久没时间抑或是没心情这么静静的坐下来码点什么;今天无故如此平静(也许是晚上9点还去喝了不应该喝的咖啡所致),奇怪之余也觉不update点什么有点对不起自己,这是某第71次update,但绝对不是第71次如此的平静; 2. 上帝说一扇门关闭便会有另一扇门敞开,现实也许真是如此,只希望上帝不要再给我选择的机会,因为我一直有选择性障碍,给我选择的结果也许就是永远不选择,直到不能再选择… 3. 今天被介绍了一部电影叫The Bucket List,据说介绍了身前应该干的十件事还是什么,今天某人情理之中意料之外的一下子完成了两个list item,一个是标题的所谓猫屎咖啡,一个是和陌生女生搭讪,情理之中是因为猫屎咖啡并不难找,意料之外是因为pp mm便是里面的服务生;这是我这个星期里面第二次来这个屎地方,计划中似乎还有第三次,因此今天我特地办了一张会员卡…… lol 4. 隔壁不知道已经结婚多久但一直门上贴着个囍字的那对couple突然发出了奇怪的笑声,我很清楚的知道我的平静即将被打破,不过值得庆幸的是我今天好歹平静了好一会儿了,我很欣慰,因为这在最近几个月里面几乎都是mission impossible; 5. 8 days non stop now, to be frank, I’m really tired.

"So long"

Posted on 2013-01-23 | Edited on 2018-11-29 | In Life , Minds , Share
Symbols count in article: 798 | Reading time ≈ 1 mins.

I don’t know “so long” means “bye” at the first time I saw this idiom. I actually just thought it means something like the chinese version of “long time no see”, but apparently I’m wrong. I’m saying “so long” to this site, but with the accidentally incorrectly interpreted meaning above, so please don’t think i’m abandoning this site. Call it a happy accident if you did :) This site definitely needs more love and time from me, which is a luxury for me these days. So sad that I’m giving away a lot of my good habits but picked up lots of other bad habits during the way. Sad itself doesn’t fix this problem. Keep feeding it with new posts does. So this no-meaning post starts this journey, just hope I can keep on… again, sad face :( ((which means I’m not sure if I can keep it up… let’s see.))

YUI3: Creating a Module with Dependencies

Posted on 2013-01-06 | Edited on 2018-11-29 | In Front-end , JavaScript , Share , Technique , YUI3
Symbols count in article: 2.7k | Reading time ≈ 5 mins.

与前文类似,本文为译文,相关事宜同前文。 [问题] 你想要创建一个自定义的YUI模块并确保它会把另外一个YUI模块作为依赖加载。 [解决办法] 使用YUI.add()方法注册你的code作为一个YUI全局对象(YUI global object)的一个模块,注册的过程中把模块的依赖作为配置对象传给它。在模块名字和定义之后,YUI.add()还接收两个可选的参数:

  • 一个模块的字符串形式的版本数字。这是你的模块的版本号,并不是你的模块所兼容的YUI版本。
  • 一个包含模块metadata的配置对象。目前这个配置对象(configuration object)里面最常见的field是一个叫requires的array,它列出了该模块的所有依赖。对里面所列出的每个模块,YUI会自动在需要的时候加载它们,必要的时候会远程的加载。

下面的例子对前文例子做了修改。Y.Hello.sayHello()不在返回一个字符串值,而是改变一个单个Y.Node的内容。这个hello模块定义了一个node-base的依赖,来确保调用hello模块的时候node.setHTML()是存在并可用的。 为了让事情变得更有趣一些,sayHello()使用了一个叫setNodeMessage()的私有helper函数。因为setNodeMessage()并没有被attach到Y实例上,所以我们并不能直接调用setNodeMessage()。setNodeMessage()使用了Y.one()方法确保input参数是一个YUI的node,然后给该node设置相应的message文本。 [cc lang=”html” nowrap=”false”] Creating a module that depends on a YUI node

YUI.add(‘hello’, function (Y) { function setNodeMessage(node, html) { node = Y.one(node); if (node) { node.setHTML(html); } } Y.namespace(‘Hello’).sayHello = function (node) { setNodeMessage(node, ‘GREETINGS PROGRAMS’); }; }, ‘0.0.1’, {requires: [‘node-base’]}); YUI().use(‘hello’, function (Y) { Y.Hello.sayHello(Y.one(‘#demo’)); }); [/cc] 不同于前文例子,上面例子的use()并不需要显式的引用node-base。这个新的改进过的hello模块会自动的加载这个依赖。 [讨论] 上面例子中hello模块在requires数组里面列出了依赖的node-base模块。这样就能保证YUI().use()在加载完node-base模块(或者其它任何在requires数组里面列出的依赖模块)之后再加载并attach hello模块到Y上。 在提供依赖的时候,要小心的避免循环依赖。比方说,如果hello模块定义了goodbye模块必须在hello模块之前load,但是goodbye模块却定义hello模块需在goodbye模块之前load,这就有了问题。加载器(The Loader)确实有相关代码来处理metadata里面循环依赖,即便如此,你也不能指望你的code会执行的如你所愿。 如Recipe 1.10里面所描述的(稍后奉上),为了效率考虑,你应该同时在Loader的metadata里面提供你模块的依赖信息。 正如之前所提到的,requires是最重要的field。YUI.add()的其它一些field还包括: optional 一个在YUI config选项loadOptional被设置成true的时候,引用你的模块时需要自动被加载的模块的名字的数组。比如,autocomplete-base模块定义了一个非必须的对于autocomplete-sources的依赖,该模块里面包括了额外的从YQL和其它remote sources给AutoComplete控件填值的功能。loadOptional默认是false。即使loadOptional被设置成false,如果该非必须的模块代码恰巧已经在页面上被加载过了,该模块依然可以被激活(activate)。当前页面已经存在该模块代码可能是一个较早的YUI().use()调用引用了该模块,也可能是该模块代码被静态的加载了,我们会在Recipe 1.20里面讨论它。 skinnable 这是一个指定你定义的模块是否支持CSS皮肤的Boolean值。如果该值是true,YUI会在document里面自动的创建了一个link element并以如下的URL加载CSS文件: [cc lang=”bash”] base/module-name/assets/skins/skin-name/module-name.css [/cc] 这里面base是config对象的base field的值(在Recipe 1.11里面讨论,稍后奉上),skin-name是皮肤的名字,默认是sam。 use Deprecated. 一个用来定义“physical rollups”(老的已经deprecated的rollup)的模块名字的数组。 除了模块依赖,后面相关例子(见后文,稍后)里面展示了一个模块里面的私有函数。因为Javascript缺失一个显式声明private的关键字,很多Javascript开发者用一个下划线前缀来象征性的描述私有数据,这会警告其他开发人员这个函数或者变量“应该”是私有的。很多情况下,这种形式已经足够了。 不过,上面例子的setNodeMessage()函数是真正的私有的。一旦YUI执行add()的回调函数,模块用户可以调用sayHello()方法,但是他们却不能直接调用setNodeMessage(),虽然sayHello()内部维护着其对于setNodeMessage()的引用。JavaScript里面一个inner函数可以访问其outer函数的所有member,即使outer函数已经执行完毕。这个重要的语言特性叫做闭包(closure)。 [相关] Recipe 7.10; Douglas Crockford的“Private Members in JavaScript”.

YUI3: Creating Your Own Modules

Posted on 2013-01-06 | Edited on 2018-11-29 | In Front-end , JavaScript , Share , Technique , YUI3
Symbols count in article: 2.5k | Reading time ≈ 4 mins.

本文节选翻译自YUI3 Cookbook,翻译的目的是force自己focus看完,因为最近实在过于焦躁不安心神不宁;好了废话不多说,我们开始,因为可能牵涉到版权问题,所以恕不能同时附上英文原文。水平有限,如有错误皆是本人认知问题,与原文无关。 [问题] 你需要以YUI模块的形式来包装并复用你的code。 [解决办法] 使用YUI.add()方法把你的code注册成为YUI全局对象(YUI global object)的一个模块。最少需要给YUI.add()提供:

  • 一个模块的名字。习惯上,YUI模块的名字一般为小写字母,使用hyphens(-)分割;
  • 一个实际定义模块代码的回调函数(callback function)。可以通过把这个component定义到Y对象上的方法来expose这个模块的相关属性或方法。

一旦YUI.add()执行完毕,你便可以像其它任何YUI模块一样来使用你自己的代码。下面的例子里面 ((译者改成了使用yui3最新版:3.8.0)),模块定义之后紧接着的就是YUI().use(),它会加载模块以及其依赖,并在回调函数里面执行其模块方法。 [cc lang=”html” nowrap=”false”] Creating and using a Hello World module

YUI.add(‘hello’, function (Y) { Y.namespace(‘Hello’); Y.Hello.sayHello = function () { return ‘GREETINGS PROGRAMS’; }; }); YUI().use(‘node-base’, ‘hello’, function (Y) { Y.one(‘#demo’).setHTML(Y.Hello.sayHello()); }); [/cc] 为了避免命名冲突,你可以使用Y.namespace()来创造一个“Hello”的namespace作为这个sayHello()方法的命名空间。Y.namespace()是个方便实用的工具,虽然这里例出的例子非常简单,本质上等同于: [cc lang=”javascript”] Y.Hello = {}; [/cc]

注:上面这个例子只展现出最基本的创建模块的代码block。这个example对于构建真正可复用的code并不足够。真实世界里面的模块需要定义依赖和其它metadata,且它们通常会被定义在另外独立的文件中。

[讨论] 正如介绍和Recipe 1.1里面提到的,YUI分离了模块定义注册和模块执行。YUI.add()在YUI全局对象(YUI global object)上注册模块,YUI().use()则是把该模块附到一个Y实例上,从而让你可以执行模块定义的函数和方法。YUI.add()和YUI().use()被设计成协同合作;首先你注册你的code,然后晚些时候你取回并执行它。 当设计应用程序时,一直思考怎样才能尽可能的把最多的code移出use()方法而移到add()方法里面。在add()里面的回调函数是可复用的,在use()里面的回调函数则是不可复用的,它们应该是一些胶水代码(glue code)被用来把一个application code应用到某个特定的页面。 如果你仔细比较YUI().use()和YUI.add(),你可能会注意到YUI.add()方法里面少了一对括号。这是一个重要的不同:

  • YUI.add()是个静态方法(static method),它注册模块code到YUI全局对象(YUI global object)上
  • YUI().use()是个工厂方法(factory method),它用相关的config来创建YUI实例

YUI全局对象存储着一堆可用的常用code。Y对象里面则hold着特定的代码子集,这些代码是你想要在YUI.add()里面注册的或是在YUI().use()里面使用的。另外,命名成Y则是一个strong的习惯约定。在一个沙盒(sandbox)里面,你可以把这个YUI实例命名成任何名字,不过通常你应该只在嵌套的使用use() sandbox的时候修改此约定命名,否则你需要告诉其它的开发人员这个instance的命名相对奇怪。 YUI.add()的核心则是那个定义模块代码的回调函数。所有被附在Y实例上的函数或对象会在之后的use()回调函数里面可用。所有未被附在Y实例上的东西都保持私有(private)。 当需要附加函数和对象的时候,考虑使用namespace隔离命名空间而不是直接附到Y上,因为这块空间被用来预留给少数的YUI核心方法。你可以通过创建空对象来手动创建namespace,或是调用Y.namespace()实用方法。Y.namespace()接受一个或多个字符串并在该Y对象上创建相对应的namespace。已经存在的namespace并不会被覆盖。在需要一下子创建多个namespace或者像Y.Example.Hello这样的嵌套namespace的时候,Y.namespace()会非常方便。Y.namespace()还会返回最后一个指定的namespace,所以需要的话还可以inline的使用它: [cc lang=”javascript”] Y.namespace(‘Hello’).sayHello = function () { … [/cc] 你可能会好奇YUI的核心模块是不是也是用YUI.add()?实际上,所有的YUI核心模块全部在构建时被包装到一个YUI.add()方法里面,这些都归功于YUI构建工具(YUI Builder tool)。如果你下载并解压YUI SDK,你会在/src文件夹下找到原始未被包装的源代码文件,被包装过的模块文件则在/build文件夹下面。换言之,这里没有任何magic,所有YUI的核心模块其实也都是使用和我们自定义模块使用的相同接口来注册它们自己。 [相关] 使用YUI Builder的相关instructions。

Life of Samson

Posted on 2012-12-28 | Edited on 2018-11-29 | In Life , Minds , Share
Symbols count in article: 508 | Reading time ≈ 1 mins.

已经听说那部传说中的life电影有段时间,一直没机会观看,不知道回来之后国内是否早已为1942让位,不过其实下了也不打紧啦,缘分不能强求,在家自己下个blueray的看看我觉得我也满足了,再大的噱头也就一部电影罢了,虽然可能基于现实但也毕竟超越现实。 之前从来没看过life的影评,所以并不清楚电影本身在讲啥,不过望文生义断章取义是本人的长项,移花积木偷梁换柱 (见标题) 亦可以信手拈来,lol:) Speaking of life,人都应该是个复杂的综合体吧,不过说起原则有时候却出奇的simple,之于我则是看到人家快乐我也快乐,看到人家悲伤我也悲伤,看到人家不舒服我也浑身不自在,所谓随众人之忧而忧,随众人之乐而乐,你也可以称之为随大流、中庸,我也totally ok with that啦。 So in order to make myself happy, i need to make others happy first, that’s the simplicity and beauty of the life of samson (not life of pi apparently, lol)

Finally we can code

Posted on 2012-12-18 | Edited on 2018-11-29 | In Life , Minds , Share
Symbols count in article: 172 | Reading time ≈ 1 mins.

Finally… finally we’re there, almost, not yet tho… I can foresee a super super busy January, the productivity better be huge when I change back my physical location… sigh.

mac之永远的flash cpu问题

Posted on 2012-12-16 | Edited on 2018-11-29 | In Mac , Minds , Share , Technique , Tips
Symbols count in article: 1k | Reading time ≈ 2 mins.

这是一个mac上永远存在却永远不得解决的问题,全部归责于adobe似乎又有点不近人情因为毕竟人家在windows上performance据说还是可以的,于是有人会去总结windows和osx的系统design,因为据说osx因为某种安全机制的全局考虑不允许这不允许那,apple限制这限制那也不是新闻,所以总而言之这是个一个巴掌拍不响的勾当。 于是乔布斯两年前开始另辟蹊径釜底抽薪,这就是我们所知的html5。不过不知道是雷声大雨点小还是本人一向的懒惰以致孤陋寡闻,虽然对国内很多视频网站早就支持html5有所耳闻 ((要不还就还只是支持mobile device,抑或各种lab各种beta)),但至今各大网站的各种视频页面的右击结果却还是深深的带着flash的胎记,于是接踵而至的就是cpu high了,fan开始转了,人转而就down了,你们都懂的。 抱怨不是本文要做的事情,事实上跟我以往update跑题千里无疾而终的习惯类似上面两段亦是我原计划外的废话,但是有时候写下标题后你就发现有些话你没办法憋着,这几年的浪荡让我发现要show自己的talk往往是件不难的事情,难的确反而是可以不talk; anyway,貌似又扯远了,嗯哼言归正传我们开始来tackle标题所说的臭名昭著的问题;本人主要的浏览器是chrome,我记得一年前我研究过同样的flash视频safari比chrome相对cpu低一点 ((当然我的研究么你也懂的,无非就是开个视频看看cpu占用率)),于是那时我的习惯便是flash开safari,网页浏览开chrome;最近直到我发现两者实以相差无几后safari就再也没有多少被touch的机会了,那会一般的flash视频cpu还是在20%~40%,最近的最近的一次flash丢失声音的问题让我无意中发现了还有一个可以暂时有限的降低cpu占用率的方法,截图如下: chrome flash chrome不知道从什么时候built in了一个叫PepperFlash的flash plugin,默认enable,将之disable掉之后,flash视频播放的cpu占用貌似很少再会超过15%了,full screen模式下亦是如此,唯一的缺憾可能是对retina screen的支持可能没有上面被disable的那个好,不过这个可能只是本人的一种感觉甚至是心理感觉,各位看官如果亦被flash的问题困扰可以不妨一试。

外面的世界

Posted on 2012-12-15 | Edited on 2018-11-29 | In Life , Music , Share
Symbols count in article: 48 | Reading time ≈ 1 mins.

外面的世界 -> [music.samsonw.info] 外面的世界很精彩 外面的世界很无奈

Update 70: 人类不思考 上帝也发笑

Posted on 2012-12-11 | Edited on 2018-11-29 | In Life , Minds , Share
Symbols count in article: 550 | Reading time ≈ 1 mins.

1. 首先的,标题纯粹是标题党,纯粹是为了呼应上一篇不知道什么时候的update,纯粹是一时兴起不假思索,纯粹中不带任何射影含沙指桑骂槐,纯粹的纯粹,亦只是为了纯粹; 2. 因为,这个世界上有太多的不纯粹; 3. 想多了自然容易不快乐,妇孺皆知的事实自然无须赘述,所以尝试着这段日子不去思考或者至少不去过多的思考,但是各种不纯粹还是每天迎面而来,每天笑脸相迎各种苦涩无奈,见识各式各样的辛酸往事抑或忆苦思甜,然后笑笑告诉自己,这,就是生活,生活就是有很多的不happy,然后某天一幸福的突然就能体会到happy,生活就是这么的平凡,平凡的每天pursue着happiness,然后某一天再归零重启…… 偶就是喜欢跑题,三句话五个逗号都能跑掉十万八千里,唉,懒得改了,你们懂的…… 4. 两个月整了,头发渐长,却依然一行code没写,感觉一事无成却又被告知责任重大,矛盾的感觉给人一种完整的挫败感,negative的情绪因为耳目众多且无从track不宜在此过多宣泄点到即止,不过文字本身应该也能感觉到一种情绪高涨不起的无奈; 5. 某向来码字天马行空文不对题,不求准确达意只求自爽,今天难得折腾一天还有心情,估计和本人归期不远有关,这几天忘了买可以当做安眠药用的过敏药,不然估计晚上睡觉我都在笑 :)

1…678…35
Samson Wu

Samson Wu

天与弗取,反受其咎;时至不行,反受其殃

347 posts
148 categories
140 tags
GitHub
Creative Commons
Links
  • Portfolio
  • Resume
© 2007 – 2018 Samson Wu | 309k | 8:35
0%