2014年3月11日

[訊真科技技術園地] 產品經理的秘密

身為一位好的PM,應該要具備哪些本領呢?
以下為公司同仁J小姐看完之後,覺得非常心有戚戚焉的一篇文章,
提供給大家作為一個思考方向!















--------------------------------------------------------------------------------

看了這篇其實很有感覺,以前剛在開產品規格時的出發點都是想開一些很炫的規格,其實還真的沒有想說要解決什麼問題所以開出這個規格,然後和RD自嗨,覺得很讚,
後來做pre-sale常和客戶接觸,有些客戶很婉轉的告訴我東西不太友善,有些是直接酸難用死了,這時感覺就像往我臉上ˉˉ一拳,因為我也曾經參與產品開發,就算不是我負責的,但對整套產品也是有感情和驕傲的,也有一種客戶不懂啦的感覺。
但和客戶接觸多了之後,感覺客戶其實要的很簡單,就是產品到底能解決他什麼問題,有時demo 完產品,聽到客戶興奮的說這就是他們要的,真的很開心也很有成就感,後來在開規格時也就更加(盡我所能)以客戶角度發想。

希望這篇文章能夠讓我們在設計產品時有些不一樣的小小想法~

--------------------------------------------------------------------------------

以下文章摘自    http://www.thenewslens.com/post/25085/

是只有我,還是全世界都很想當產品經理?也許因為我自己本身就是一個產品經理,但是我最近常常聽到一些不是產品經理的人─顧問、MBA學生、工程師─想要做做看這一行。
如果事實確實如此,我其實不會太驚訝大家都想成為一個產品經理。因為這種工作的門檻不是很高,也不需要很難的專業技能,一個產品經理,不需要知道如何建立資料模型、寫程式、設計網站,這些技能的確可以為你的工作加分但非必需,跟當一個工程師或設計師不同,你可以想像有一天早上醒來就突然成為產品經理。
而且,這份工作會讓你的履歷看起來很漂亮:
  • 你是迷你CEO
  • 你領導他人
  • 你為某產業專家
  • 你決定現在和未來產品的樣貌
  • 你賺得很多
  • 你是老闆
上面的清單只是開玩笑的,我想要表達的是:其實當一個產品經理(PM),還有很多「驚喜」沒列出來,如果你不是一個PM或是沒有跟自己公司的PM合作過,那麼產品管理並非你以為的那樣。

產品管理是:

  • 成為使用者的心、想法還有聲音
  • 促進跨功能團​​隊合作
  • 對產品本身做出取捨
  • 在有限時間及資源內達成最終目標
  • 在產品製造過程帶領工作夥伴
  • 正面思考而且非常實際
  • 在有限的資訊時做出困難的選擇

產品管理不是:

  • 當最重要的聲音
  • 成為唯一發想點子的人
  • 當一個設計師
  • 當一個程式人員
  • 管理品管
  • 最佳化網站
  • 撰寫行銷相關資料

那我是怎麼知道這些事情的呢?

我是意外踏入這一行的,那時我大四、主修心理學,很想要畢業就回到位於舊金山灣區的家,讓我很恐慌的是,那邊的工作幾乎都是科技業,於是我將每份工作的職位說明都仔細讀過,看是否有工作可以和我的主修搭上線。
出乎我意料之外地,我在Intuit這家公司得到了產品管理儲備幹部的工作,而Intuit不論是在技術或是文化上都是一家很棒的公司,讓我感到訝異的是我並不知道什麼是產品經理。「哇!」我把錄取通知信讀了又讀還是覺得不可思議,我在面試的時候只是談到我很有熱情,不知道為什麼這樣就夠了。另外一個讓我驚訝的部分是我擅長的其實是心理語言學,我又再看了看,心理語言學跟財務軟體的關聯真的很小。
我的第一個管的產品是QuickBooks,負責每年推出Beta版本,光是這個工作就已經包含了所有讓我對產品管理感到驚訝的事,而它們完全沒有寫在工作職務說明裡。
主要有四點:

1.你不是在管理一個產品,而是在管理這個產品可以解決的問題

當我知道我要管的是QuickBooks時完全不敢置信,「QuickBooks?!」我聽到時嗤之以鼻,「這個產品的年紀都比我爺爺大了!」(其實這句話並非真的,但是住在矽谷這個每秒都有新產品推出的地方,QuickBooks就像是你老爸那輩的玩意。)我很失望因為我沒辦法做一個產品經理「真正」可以做的事,讓產品不斷「創新」,我想要管的是年輕而且很酷的產品。
但是我犯了大錯!
更多內容請參考  http://www.thenewslens.com/post/25085/






2014年3月5日

[訊真科技技術園地] An Introduction to CSP

訊真科技技術園地第二發文章出爐囉!
感謝公司同仁E小姐的提供
讓我們對CSP能夠有更深入的了解^^


----------------------------------------------------------------------------------

最近在看XSS攻擊的資料,
這篇文章介紹了CSP藉由限制可存取資源的白名單避免了潛在風險,
也提到了儘量不要使用inline script的觀念。
--
CSP is quite usable in Chrome 16+, Safari 6+, and Firefox 4+, and has (very) limited support in IE 10.

2014年3月3日

[訊真科技技術園地] 你看 YouTube,Google 幫你付上網資費?AT&T 大膽推出 “Sponsored Data” 計畫

就像中華電信和Line的關係,也是最近很熱門的應用。

http://www.theverge.com/2014/1/6/5279894/at-t-announces-net-neutrality-baiting-sponsored-data-mobile-plans

-------------------------------------------------------------------------------------------------------------------
文章轉自 http://mmdays.com/2014/01/07/at-t-sponsored-data/
AT&T 在今年的 CES 大展上,發表了一個嚇人的計畫:Sponsored Data
可曾想過當你看 YouTube 的時候,你的網路流量費是由 Google 來幫你付給電信業者?是的,Sponsored Data 就是這樣的一個計畫,AT&T 推出這個計畫的目的,就是讓網路服務業者 (像是 Google、Facebook、Netflix 等等) 可以「幫客人買單」:你上這些網站用掉的網路流量,將由這些網站的業者來幫你跟電信業者買單。
聽起來是個理想的世界,AT&T 也宣稱這是「顧客」和「企業」雙贏的一個方案。但是實際上,這個舉動可能會對網路產業造成深遠的影響,而且,可能是負面的影響。
Google 和 Facebook 這些網路業者早就讓全世界的電信業者恨得牙癢癢,因為這些公司利用電信業者的頻寬,免費提供消費者各式各樣的影音和網路服務,耗費大量電信業者頻寬的成本,可是卻一毛錢都不用付給電信業者,是所謂的 OTT 模式,總而言之,就是讓這些網路業者用免錢的。所以各國電信業者無不絞盡腦汁,想要幹這些網路業者的拐子,Google 至今還無法解決台灣使用者收看 YouTube 影片過於緩慢的問題,主因就是電信業者覺得自己從 YouTube 根本一毛錢都賺不到,卻要讓 Google 搭免費的頻寬列車,怎麼想都不划算,所以拐子一個接一個。
Google 也早就知道這件事情,知道自己的利益是和電信業者相衝突的,所以在世界各地也開始到處拉光纖,或是把熱氣球放到偏遠地區的上空、讓偏遠地區也可以無線上網,這些計畫的目的就是自己想要當電信業者,免得一再因為 OTT 的方式、被傳統的電信業者阻撓自己各項業務的發展。

[訊真科技技術園地] Git Branch 的操作與基本工作流程


關於Git Branch 的操作與基本工作流程,

這一系列是比較白話的解釋和指令使用的時機,甚至還有情境呢~!


Git branch

branch (分支)應該是 Git 最重要的技能了,在一個多人專案的開發過程中我們有時候要開發新功能,有時候是要修正某個Bug,有時候想要測試某個特異功能能不能 work ,這時候我們通常都會從主 branch 再開出一條新的 branch 來做,這支新開的 branch 會帶著你的主 branch 目前的最新狀態,當你完成你所要開發的新功能/ Bug 修正後確認沒問題就再把它 merge(合併)回主 Branch ,如此便完成了新功能的開發或是 Bug 的修正,因此每個人都可以從主 branch 拉一條新的 branch 來做自己想做的事,再來我們好好了解一下 branch 的使用。
了解 branch 最好的方法就是有圖像可以看,你可以用任何你已安裝的GUI來查看,但在你安裝 Git 的時候其實同時也安裝了最基本的 Git GUI 叫做 gitk,你可以使用 gitk --all 這個指令來呼叫他,此時你應該能看到以下的畫面:
gitk
點擊左上方區塊的 commit 節點你可以看到當次 commit 的詳細資料,例如作者以及他的更新記錄,但你會發現這時候終端機是無法輸入的,因此請你先關掉 gitk ,改打指令 gitk --all & 來讓 gitk 在背景執行。
git branch 這個指令可以列出所有的 branch 並告訴你目前正在哪個 branch:
$ git br
* master
  develop
  feature/test
上面的訊息告訴我們在這個 Git repository裡有3支 branch ,而你目前正在 master branch 上。假設我們現在要開一支新的 branch 叫做 cat ,使用 git branch 來幫助你開一支新的 branch
$ git branch cat
$ git branch
  cat
* master
上面我們開了一支新的 branch 叫做 cat ,使用 git branch 再查看一次發現已經多了這支新的 branch了,這時候你去查看你的 gitk 的圖像狀態會發現像下圖一樣,新的 branch cat 與 master 在同一條水平線上,表示目前他們的狀態是一模一樣的。
git branch
你應該也有發現,雖然我們建立了一個 cat 的 branch ,但其實我們所在的 branch 還是在 master branch,因此我們現在還需要切換過去,因此我們使用 git checkout 來切換:
$ git checkout cat
Switched to branch 'cat'
這樣就會從原本的 mater branch 切換到 cat branch 了。
接下來假設我正在 cat 這支 branch 做開發,因此新增一個檔案,加上一些內容,將它 add 到 stage 後再 commit 它。
$ vim lib/cat.rb
$ git status
# On branch cat
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#   lib/cat.rb
nothing added to commit but untracked files present (use "git add" to track)
$ git add lib/cat.rb
$ git commit -m "Add Cat.rb"
[cat ea7d309] Add Cat.rb
 1 files changed, 3 insertions(+), 0 deletions(-)
 create mode 100644 lib/cat.rb
cat branch
上面的流程你已經很熟悉了,接下來我們再切換到原本的 master branch ,這時候你會發現剛剛在 cat branch 新增的 cat.rb 檔案已經不見了。
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
master branch
Git 在我們切換 branch 的同時就會很聰明的會把我們的工作目錄更動成那個 branch 該有的狀態,如果你這時候切換到 GUI 去看,你會發現到與剛剛 cat 和 master branch 在同一條水平線上不同,cat branch現在已經比 master branch 再多出了一個 commit 的內容。
gitk
現在我在切換到 cat branch 去增加更多的內容,一樣再將它 add 到 stage 後,再 commit 它。
$ git checkout cat
Switched to branch 'cat'
$ mvim lib/cat.rb
$ git add lib/cat.rb
$ git commit -m "Add initializer"
[cat a3bce42] Add initializer
 1 files changed, 3 insertions(+), 1 deletions(-)
add initializer
切到 GUI 來看的話你會發現現在 cat 這支 branch 比 master branch 要在多上兩個 commit 的內容。
gitk

[訊真科技技術園地] GIT儲存檔案的方式:Git Pocket Guide




今天開會時提到,git儲存檔案的方式在這裡有比較詳盡的說明:

Every version of a file in Git is represented as a whole, with its own blob containing the file's complete contents. 
A fundamental design element of Git is that the object store uses content-based addressing. 
blob存的是整個檔案,但是它是 content-based addressing、也就是說,相同的檔案內容只會被儲存一次。

當前的檔案,如果有在之前的commit被儲存下來且沒有異動,那將不會儲存、而是指向先前commit時,該檔產生的SHA1 ID reference
詳參:
http://chimera.labs.oreilly.com/books/1230000000561/ch01.html#_object_ids_and_sha_1
--
The usefulness of hash-based object identifiers in Git depends on treating the SHA-1 hash of an object as unique; we assume that if two objects have the same SHA-1 fingerprint, then they are in fact the same object. From this property flow a number of key points:

Single-instance store......

|
|
|
ˇ
如何利用Dropbox將專案納入GIT版本控制

  1. switch to your working directory
  2. git init
  3. git add .
  4. use 'git status' to confirm the status
  5. git commit -m "init"
  6. use 'git status' to confirm the status
  7. switch to the dropbox folder, ex: cd ~/Dropbox/repos
  8. make a remote repo: mkdir _repositoryName.git
  9. git init --bare _repositoryName.git
  10. switch to your working directory
  11. git remote add origin _repositoryPath, ex: /home/erica/Dropbox/repos/repositoryName.git
  12. git push origin master
and if you want to checkout the project: git clone _repositoryPath _projectname

[訊真科技技術園地] New Java Time (Java8 SE)


分享一下最近看過的文章

New Java Time (Java8 SE)
http://ingramchen.io/blog/2014/02/brand-new-java-time.html


文章擷取

----------------------------------------------------------------------------------------------------------------

java.time.* API

首先來看 java.time 提供的新 API,它引進相當多的 class。好在常用的就只有幾個:LocalDateTimeInstantZoneOffsetClock。轉換的第一步驟是將過去使用 Date 物件的地方,都換成 LocalDate*,下面是一個常見的帳戶 entity:
public class Person {

  String name;
  LocalDate birthday;
  LocalDateTime createTime;
  LocalDateTime lastLoginTime;
  //你幾歲
  int age(LocalDate refDate) {
    return Period.between(birthday, refDate).getYears();
  }
  //生日到了沒?
  boolean isBirthday(MonthDay refDay) {
    return MonthDay.from(birthday).equals(refDay);
  }
  //距上次登入已經過了幾天
  long lastLoginDaySince(LocalDateTime refTime) {
    return Duration.between(lastLoginTime, refTime).toDays();
  }
}

//測試
@Test
public void variousDate() {
  LocalDate birthday = LocalDate.of(1985, 3, 16);
  LocalDateTime createTime = LocalDateTime.of(2014, 2, 3, 5, 0);
  LocalDateTime lastLoginTime = LocalDateTime.of(2014, 2, 7, 19, 11);
  Person person = new Person("Ingram", 
      birthday, createTime, lastLoginTime);

  LocalDate today = LocalDate.of(2014, 2, 28);
  assertEquals(28, person.age(today));
  assertTrue(person.isBirthday(MonthDay.of(3, 16)));
  LocalDateTime now = LocalDateTime.of(today, LocalTime.of(14, 51));
  assertEquals(20, person.lastLoginDaySince(now));
}



2014年3月2日

[訊真科技技術園地] GitHub新推出的程式編輯器

Dear all,

分享一些技術相關的資訊。

GitHub近日推出的一款程式編輯器,目前正在封測。

他宣稱是一款不同凡響的產品,希望改善舊有編輯器對初學者不友善的缺點,
「讓小學生從第一天開始學習程式到變成超強駭客時都能使用的編輯器」。

有Mac的朋友可以先下載試用。   https://atom.io/