Language

Friday, November 11, 2011

Improvement on matlab-emacs


Modification to matlab-cellbreak-face




Current cvs code for matlab.el does not handle cellbreak-face correctly. It cannot distinguish between %% and %%%%, but matlab-shell-run-cell can function well. But fontifying not well is still annoying, so we need to modify it. In matlab.el, find the following lines to modify from:




;; Cell mode breaks get special treatment
'("^\\s-*\\(%%[^\n]*\n\\)" (1 matlab-cellbreak-face append))




Change it to:




;; Cell mode breaks get special treatment
'("^\\s-*\\(%%[^%\n]*\n\\)" (1 matlab-cellbreak-face append))










Evaluate cell and advance (C-S-return)






In MATLAB editor, we can press C-S-return to perform "evaluate cell and advance" function. Minor modification to matlab.el can make it happen. You can just add the following code snippet to your .emacs file.





(require 'matlab-load)
(defun matlab-goto-next-cell ()
(interactive)
(re-search-forward "^%%[^%\n]"))

(require 'matlab)
(define-key matlab-mode-map [(meta control F)] 'matlab-goto-next-cell)
(defun matlab-run-cell-and-go ()
(interactive)
(progn
(save-excursion
(matlab-shell-run-cell))
(matlab-goto-next-cell)))
(define-key matlab-mode-map [(meta shift return)] 'matlab-run-cell-and-go)





The example for running matlab cell mode is like this:





a = [1,2,3];

c = [4,5,6];

%% This is first cell

d = a * c';

%%%% This is not a cell

b = [3,2,1];

%% Another cell

c = a + b;

kkk





After pressing three <C-S-return>, the matlab-shell screen will look like:






< M A T L A B (R) >
Copyright 1984-2010 The MathWorks, Inc.
Version 7.12.0.635 (R2011a) 64-bit (maci64)
March 18, 2011


To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.

>> addpath('/Users/jjhuang/elisp/matlab-emacs/toolbox','-begin'); rehash; emacsinit('emacsclient -n');
>> , a = [1,2,3];, c = [4,5,6];,
>> , a = [1,2,3];, c = [4,5,6];, d = a * c';, b = [3,2,1];,
>> , d = a * c';, b = [3,2,1];, c = a + b;, kkk,
??? Undefined function or variable 'kkk'.

>>





Okay, now matlab-emacs for me is more convenient right now. Hope you enjoy it!




--
My Emacs Files At GitHub

Friday, October 14, 2011

悼念 Steve Jobs


第一次知道 Steve Jobs 這個人,是在我大一開始接觸 NeXTSTEP 這個作業系統之後,當時 NeXT 以劃時代的物件導向技術、華麗的視窗外觀、當時時尚界流行的黑色元素、鎂合金的外觀,以及對開發者非常友善的開發工具,在 1990 年代初期登場,而 Steve Jobs 正是生產 NeXT 電腦的 NeXT 公司的 CEO. NeXT 也是他在被自己所創辦的 Apple 解僱之後所創立的公司。



NeXT 是我人生第一次如此著迷的軟體技術,也是我第一次如此深信這產品將會改變這個世界。因此,NeXTSTEP 上的應用程式也是我唯一會寫的視窗應用程式。我總是告訴別人 NeXTSTEP 是世界上最美麗的作業系統。在我大二時接管了一些 DEC Alpha 的工作站,於是我為系上設立了 FTP 站。我選定了 NeXTSTEP 相關的資源映射至 FTP 站裡,到後來系上的 FTP 站成為台灣 NeXTSTEP 資源最完整的 FTP 站,也使得系上的 FTP 站在某個小眾市場裡頗具知名度,而那也是我人生中做的第一個與 marketing 有關的決策。然而,我認為當時不擅長 marketing 的 NeXT 開始出售硬體工廠,而且營收不佳,幸而當時 Apple 正在為他的 OS9 尋著「下一步」,Apple 從 BeOS 與 NeXTSTEP 中選擇了 NeXTSTEP, 也使得 Steve Jobs 後來王子復仇重回 Apple 掌舵。我想 Steve Jobs 在這個時期學會了虛心,也學到了 marketing 的重要性與技巧,此後 Apple 的產品,在我看來,不再以技術上的創新為唯一的依歸,更多是使用者經驗的創新。



在 NeXT 被 Apple 收購之後,我開始接觸與 Steve Jobs 有關的書,有兩本,一本是 "Apple: The Inside Story of Intrigue, Egomania, and Business Blunders" by Jim Carlton, 另一本是由 Randall E. Stross 所撰寫的「電腦金童 NeXT 風雲再起」,分別描述了他在被 Apple 踢出公司前與 NeXT 時代的故事,當這些書完成的年代,Steve Jobs 對這些作者相當的不友善。他從不願提供任何資料,也不讓作者訪問他的家人,因此作者只能辛苦的從旁人口中得到 Steve Jobs 的資料。這個時期他脾氣暴躁,而我其實不太欣賞他。



他回 Apple 之後,開始推出彩色外殼的 iMac 以及貝殼造型的 iBook,但一直到 iPhone 的出現,我才又注意與欣賞 Steve Jobs 的才華。當時我擁有一支 Nokia Symbian S60 系列的智慧型手機,深深知道智慧型手機最重要的就是軟體與使用者經驗。iPhone 在當時並不是第一支智慧型手機,也不是第一支觸控手機,初問世時更因沒有觸控筆或鍵盤而被市場質疑,但當我試用過而且知道 Apple 將當初 NeXT 那一套有名的開發工具流程應用在 iPhone 的開發上,我知道這支手機絕對劃時代。再加上 AppStore 方便程式設計師以及 SOHO 工作室將開發出來的軟體很容易的銷售到使用者首中,iPhone 的軟體便像雨後春筍般蓬勃發展,這絕對是 iPhone 開發者、使用者、Apple 三贏的局面,也使得 iPhone 成為世界上單一機種銷量最高的智慧型手機。之後,Apple 更順勢推出 iPad 這個平板電腦,更帶起來平板電腦的風潮。回顧 iPod, iPhone, Apple TV, iTunes store, 以及 AppStore. 可以看得出來 Steve Jobs 逐步的將他心中的藍圖實現,將 Apple Computer, Inc. 從軟硬體整合製造商轉型為以內容與服務為主的 Apple, Inc. 這樣子的遠見與毅力,才是我佩服與欣賞 Steve Jobs 的原因。我想不可否認的,iPhone 與 iPad 的出現,的確完全改變了你我的世界。



今年八月 Steve Jobs 請辭 CEO, 大家就在猜測他的健康是否出現問題,而當我看到 Steve Jobs 與 Walter Isaacson 合作寫傳記,容許這個作者訪問所有他身邊的人,其實就大概可以猜到他已經在做準備了。但當 10 月 5 日,他過世的消息傳來,我仍然感到悲傷。雖然我總是說我並不是 Steve Jobs 迷,但當他過世時,我深深感到這世界失去了一個有遠見、有創意的奇才。而在他過世之後,我也重新觀看他對 Stanford 畢業生做的演講,裡面我最愛的一段是第三個關於死亡的故事,裡面說到如果你每一天都當做活著的最後一天來活,總有一天你會活出你的生命。當面臨死亡的時候,所有的外界期望、所有的驕傲、所有對於丟臉或是失敗的恐懼,這些都會消失。因為你已經光溜溜了,沒有理由不順從你的心。謝謝你,Steve Jobs,讓我有勇氣順從我的心,做我真正想做的事,而不恐懼失敗。謹以 Robert Frost 的詩來悼念這個不平凡的 CEO.



The Road Not Taken



Two roads diverged in a yellow wood,

And sorry I could not travel both

And be one traveler, long I stood

And looked down one as far as I could

To where it bent in the undergrowth;



Then took the other, as just as fair,

And having perhaps the better claim,

Because it was grassy and wanted wear;

Though as for that the passing there

Had worn them really about the same,



And both that morning equally lay

In leaves no step had trodden black.

Oh, I kept the first for another day!

Yet knowing how way leads on to way,

I doubted if I should ever come back.



I shall be telling this with a sigh

Somewhere ages and ages hence:

Two roads diverged in a wood, and I—

I took the one less travelled by,

And that has made all the difference.



           – Robert Frost







--
My Emacs Files At GitHub

Saturday, October 8, 2011

愛吃信用卡的高鐵自動售票機


有坐過高鐵的人, 有不少的比例會因為售票窗口大排長龍而像筆者這樣選擇自動售票機購票; 自動售票機售票有三種付款機制, 分別是現金、信用卡、金融卡。用現金購票有個惱人之處: 找錢一律用銅板, 就是會掉出一大堆的五十元銅板。再加上信用卡購票可以累積信用點數, 所以有一部分人會採用信用卡付款, 外國旅客來台灣也蠻常用信用卡付款的。


高鐵自動售票機可以說是信用卡吃卡機器, 原因就出在整體的使用者介面設計上。信用卡購票流程是這樣的, 首先先在下方螢幕點選「自由座」或「對號座」, 然後是乘車日期、時間, 選定班次, 接下來選擇付款機制, 如果選擇了信用卡, 這時候你的注意焦點要開始擺在上方小螢幕上, 自動售票機會有語音提示你這點, 但是我也常常看到不熟悉這個購票流程的人不知道該看上面的小螢幕。這個問題就出在使用者在按螢幕這麼多按鍵後, 心中其實是忽略所有語音的提示, 而把焦點放在視覺上, 如果這時候沒有視覺上的提示, 很容易被忽略。


如果使用者有注意到上方小螢幕的話, 接下來是插入信用卡, 等待輸入預借現金密碼或是生日。這部份的問題是按鍵頗難按, 而且如果你慢個二十秒注意到這個小螢幕, 很大的機會會在輸入完密碼後告訴你連線逾時, 一切又得重新再來。


當信用卡密碼輸入正確, 而且連線驗證成功之後, 以下的動作幾乎是同時發生: 1) 上方信用卡退出來, 2) 下方出票口「亮燈」並且送出車票與簽帳單。問題就發生在第二個動作是有亮燈而且有聲音的, 很多使用者都會被下方的事件所吸引, 而忽略了上方無聲無息的事件。也因此, 不少使用者拿了票之後就直接走人搭車去, 忘記了那張信用卡, 尤其是你後面排了不少人的時候。這也就是為什麼常常聽到車站廣播有人遺失信用卡的原因了, 筆者本身就提醒過幾次前方的使用者拿信用卡, 包括外國旅客; 個人也有一次親身經歷, 而且是我常常用信用卡在自動售票機買票搭高鐵好幾年之後, 在某個週日早上剛睡醒不久, 疏於注意就忘記信用卡了。


對於這樣的使用者介面, 我建議的改進方式是這樣: 在信用卡插入口上方加一個 LED 燈號, 要夠醒目, 當第一次要插入卡片的時候閃個四五秒吸引使用者注意。另外當密碼驗證成功之後, 上方信用卡退出來要一直閃爍直到取走, 然後出票口才出票。這樣的缺點當然是要比原先的流程再多個幾秒鐘時間, 但是卻少掉很多信用卡掉卡的機會, 應該也會吸引更多信用卡用戶從售票窗口移到自動售票機購票吧。整體而言, 高鐵的自動售票機已經做得不錯, 若吃信用卡這點能夠改善, 大家(尤其是外國旅客)對台灣高鐵的印象會更好一點。畢竟如果你只搭那麼一次高鐵要去機場, 卻因為售票機流程設計不好, 把你的信用卡而不是你的心留在臺灣, 那就不是我們所樂見的囉。

附記:2012 年 12 月 31 日恰好臨時在台北車站用信用卡買了高鐵票(筆者後來都用 iPhone app 購票), 發現購票機已改成上述的流程, 筆者沒有投書高鐵, 想必是英雄所見略同!

--
My Emacs Files At GitHub