網路語錄 - 12/03/2012 Mon

2012年12月3日 星期一
0 意見
Via INSIDE
    — Instagram創辦人Krieger談產品設計的八條原則

如何做出優秀的應用程式?「仔細觀察人們在生活中真正需要什麼,而不是瞎猜」— Krieger, Instagram 創始人
「要想真正建立某個產品來解決問題,你得比人們更了解他們自己。」— Krieger, Instagram 創始人



原來的文章列舉了 Krieger 覺得新創事業裡重要的八個項目。基於記憶方便,我用 PDCA 方式歸類了一下:

PLAN:
  1. 從舊有的經驗出發,想想過去你曾經思考過的,在這些領域你有更多的了解。
  2. 知道自己有麼不同之處,弄清為什麼現在是一個特殊的機會
  3. 與使用者保持順暢的溝通,不要花上數月埋頭做產品,卻不知道使用者要不要這個功能。

DO:
  1. 先畫草圖再寫程式
  2. 每週進步一點

CHECK:
  1. 在日常生活場景驗證功能。將某個功能解釋給酒吧裡的陌生人聽,如果對方聽不懂,那就表示需要簡化。不要只是找你周圍的技術咖測試新功能。
  2. 社群原型測試。沒必要一開始就寫出所有程式,你可以隱藏在幕後做人工測試。比如說初期可用人工方式手動測試新功能,如果會員反應不理想,那也不用寫程式實現新功能了,多棒。

ACTION:
  1. 知道何時該轉型。當發現已經沒有什麼問題可以解決,就是該轉型了。

你是一首安靜的詩 - takako 攝影


閱讀更多 »

網路語錄 - 11/30/2012 Fri

2012年11月30日 星期五
0 意見

via MYDESY



「人們將在前所未有的深度和廣度上自動地收集和利用數據,為社會科學的研究服務。」— 大衛·拉澤(David Lazer)美國哈佛大學學者

「人人網」從實踐中總結出以下值得重點關注的研究點:社會關係強度信息的絕對價值和相對價值新鮮事排序算法隱私性以及社會化搜索

群體智慧的典型應用是「維基百科」和「百度知道」。這些互聯網平台系統不僅幫助用戶相互溝通聯繫,更重要的是將用戶組織起來,發揮他們的群體智慧,以協作的方式一起創造、加工和分享知識。

我們對人們心理和情感的理解卻仍然可能處於十分幼稚的階段,僅僅依靠算法,遠遠還不能懂得人心。騰訊近期提供試用的新產品QQ圈子就是一個例子。這款產品能夠根據QQ後台的數據為他們實名推薦好友,但用戶卻被騰訊對他們社交網絡的精確了解所驚駭,乃至恐慌和憎惡。

KK在其所著的一書《失控》中曾提出,上傳全部的生活已經是人類不可阻擋的命運,但終究還是會有區分,哪些是用戶真正願意的,哪些是還不能讓人接受的。或者說,一切都還需要時間來讓人們適應。


 Photos from MYDESY

works from Studio Lindfors

via MYDESY

閱讀更多 »

jQuery 基本概念摘要

0 意見


Via Sixrevisions, impressivewebs


===============
     PART 1
===============

要徹底發揮 jQuery 的威力,通常你要對 CSS 有充足的了解。至少要了解

  • Type selectors
  • Class selectors
  • ID selectors
  • Descendant selectors
  • Child selectors
  • Attribute selectors
  • CSS specificity
  • The cascade & inheritance

※ 這些應該都是現代前端工程師所必備的知識


The jQuery wrapper

$("li a"); // 這個等同於下面的
jQuery("li a");

jQuery commands

// 加入淡出的特效
$("li a").fadeOut(); // 會淡出所有 li 內的連結
$("li a").fadeIn();  // 又淡入所有 li 內的連結

Chaining commands

$("li a").fadeOut().fadeIn();

Running code when the DOM is ready

// 有了(document).ready,程式碼會在 DOM tree 準備好時立刻執行,
// 而不會痴痴等待圖片或其他媒體全部下載完畢。
$(document).ready(function(){
  $("li a").fadeOut().fadeIn();
});

===============
     PART 2
===============

Selecting Elements in jQuery

$("div"); // selects all HTML div elements
$("#myElement"); // selects one HTML element with ID "myElement"
$(".myClass"); // selects HTML elements with class "myClass"
$("p#myElement"); // selects paragraph elements with ID "myElement"
$("ul li a.navigation"); // selects anchors with class "navigation" that are nested in list items

// jQuery 還支援使用 CSS selectors, 甚至是 CSS3。幾個例子:
$("p > a"); // selects anchors that are direct children of paragraphs
$("input[type=text]"); // selects inputs that have specified type
$("a:first"); // selects the first anchor on the page
$("p:odd"); // selects all odd numbered paragraphs
$("li:first-child"); // every list item that's first child in a list

// jQuery 還允許使用它自身定義的 selectors
$(":animated"); // selects elements currently being animated
$(":button"); // selects any button elements (inputs or buttons)
$(":radio"); // selects radio buttons
$(":checkbox"); // selects checkboxes
$(":checked"); // selects selected checkboxes or radio buttons
$(":header"); // selects header elements (h1, h2, h3, etc.)

Manipulating and Accessing CSS Class Names

// jQuery 讓你可以很輕易地增加、移除、和張合 CSS classes
$("div").addClass("content"); // adds class "content" to all <div> elements
$("div").removeClass("content"); // removes class "content" from all <div> elements
$("div").toggleClass("content"); // toggles the class "content" on all <div> elements (adds it if it doesn't exist, and removes it if it does)

// 還可以用 if 做檢查
if ($("#myElement").hasClass("content")) {
    // do something here
}

Manipulating CSS Styles with jQuery

// 輕易地將元素增添 CSS 樣式
$("p").css("width", "400px"); // adds a width to all paragraphs
$("#myElement").css("color", "blue") // makes text color blue on element #myElement
$("ul").css("border", "solid 1px #ccc") // adds a border to all lists

Adding, Removing, and Appending Elements and Content

// 取得 HTML 內容
var myElementHTML = $("#myElement").html(); // variable contains all HTML (including text) inside #myElement

// 倘若你只想取得裡頭的文字
var myElementHTML = $("#myElement").text(); // variable contains all text (excluding HTML) inside #myElement

// 利用同樣的語法,你也可以改變 HTML 內容
$("#myElement").html("<p>This is the new content.</p>"); // content inside #myElement will be replaced with that specified
$("#myElement").text("This is the new content."); // text content will be replaced with that specified

// append (添加)內容
$("#myElement").append("<p>This is the new content.</p>"); // keeps content intact, and adds the new content to the end
$("p").append("<p>This is the new content.</p>"); // add the same content to all paragraphs

// jQuery 還有 appendTo(), prepend(), prependTo(), before(), insertBefore(), after(), insertAfter() 等類似函式

Dealing with Events in jQuery

// 只有當連結被點選時,function() 裡的程式碼才會啟動
$("a").click(function() {
    // do something here
    // when any anchor is clicked
});
// 其他常見的 events 有:blur, focus, hover, keydown, load, mousemove, resize, scroll, submit, select

Showing and Hiding Elements with jQuery

$("#myElement").hide("slow", function() {
    // do something once the element is hidden
}
 
$("#myElement").show("fast", function() {
    // do something once the element is shown
}
 
$("#myElement").toggle(1000, function() {
    // do something once the element is shown/hidden
}
// 第一個參數指定速度(單位是千分之一秒),若無指定則立即發生。第二個指令是命令執行完後會呼叫的(optional)函式。

$("#myElement").fadeOut("slow", function() {
    // do something when fade out finished
}
 
$("#myElement").fadeIn("fast", function() {
    // do something when fade in finished
}

$("#myElement").fadeTo(2000, 0.4, function() {
    // do something when fade is finished
}
// 第二個參數,0.4,代表的是透明度(opacity)。

jQuery Animations and Effects

// 將元素 slide up or down
$("#myElement").slideDown("fast", function() {
    // do something when slide down is finished
}
 
$("#myElement").slideUp("slow", function() {
    // do something when slide up is finished
}
 
$("#myElement").slideToggle(1000, function() {
    // do something when slide up/down is finished
}

// 要讓一個元素有動畫效果,jQuery 透過改變 CSS 樣式以達成
$("#myElement").animate(
    {
        opacity: .3,
        width: "500px",
        height: "700px"
    }, 2000, function() {
        // optional callback after animation completes  
    }
);


更多

51+ Best of jQuery Tutorials and Examples (via noupe)
閱讀更多 »

網路語錄 - 11/29/2012 Thu

2012年11月29日 星期四
0 意見

Via MR JAMIE 

日本的社群與手機遊戲市場,最成功,也最被關注的兩家公司,當然是非 DeNA GREE 莫屬了。

DeNA 這家公司創辦於 1999 年,直到 2004 年切入手機電子商務與行動廣告業務,才算是找到了初步的商業模式。在 2009 年跨足社交遊戲,才一舉成為一家重量級的科技公司。一開始做的是跟遊戲完全沒有關係的拍賣網站。GREE 則是一家標準的「Web 2.0」公司,2004 年創業,一開始主打的就是手機社交,2010 年則飛速成長至 2,000 萬人,同年讓遊戲等第三方應用進駐,正式切入遊戲市場,並且在東京證交所掛牌。 ... 

綜觀全世界的線上遊戲市場,目前幾乎同時在經歷一場幾乎是史無前例的大型 Paradigm Shift (政權轉移),傳統的萬人連線用戶端遊戲日漸式微,取而代之的是以瀏覽器為主的網頁遊戲,以及以智慧手機、平板為主的 App 遊戲。

Via Mydesy
 「do what others won’t, to achieve what others don’t.」 做別人不做的,才能成就別人不能的。— Lesean Thomas,一個在南韓工作的美國動畫人 

Via TechOrange

每一家公司都提供遊戲化手段之後,同質化的體驗更加容易產生審美疲勞。... Garnter 的副總裁 Brian Burke 指出,遊戲化已經接近 Garnter 定義的炒作週期曲線的頂峰,離泡沫化的谷底期僅有一步之遙。

Garnter 認為,隨著遊戲化被許多企業廣泛採納,必須理解遊戲化的基礎原則,並掌握如何將其運用到 IT 組織的辦法,才有可能取得成功。Garnter 發現,遊戲化的目的設定為以下 3 個比較有利於企業受益:「改變行為」、「發展技能」以及「促進創新」。


古怪但有趣的午睡枕頭 XD
Designed by Kawamura Ganjavian (via dornob)


閱讀更多 »

網路語錄 - 11/28/2012 Wed

2012年11月28日 星期三
0 意見
今天閱讀網路世界時拾獲的語錄:

From INSIDE
  • 「無人駕駛汽車、智慧型眼鏡就是這樣的產品。「我們把它們當做已有優勢的延伸——汽車是地圖能力的延伸,同樣地,眼鏡是通訊和在地服務的延伸。」 — Peter Norvig, Google's director of research

  • 「9/11 是一個決定性的時刻。從那時候起,網路成為重大消息的來源。9/11 和卡崔娜颶風讓 Google 以新的視角看待自身的服務。人們開始問「紐爾良今天看起來和昨天有什麼不同?」。這使他們意識到時間將成為地圖服務的重要維度,「人們會要求更多的即時訊息」。」 — Peter Norvig, Google's director of research

  • 「認為智力最重要的態度其實是一種偏見...如果我們是大象,或許我們會希望得到超級力量,或者如果我們是獵豹,會希望獲得超級速度。有些社會問題非常困難,因為它們就是那個樣子,那不是我們夠聰明之後就可以解決的。」 — Peter Norvig, Google's director of research

中文字體海報系列 (via pick.mydesy)


閱讀更多 »

如何在 scrapy shell 裡正確顯示中文

2012年10月4日 星期四
0 意見
photo credit: molechaser

Scrapy shell 提供了很多互動方式,便於檢查網頁結構和設計的擷取規則究竟適當與否,是個非常方便的功能。然而要怎麼樣才能在 shell 裡看見中文字呢?答案很簡單 ─ 使用 print (或許加上 encode)

// 進入 scrapy shell
scrapy shell

// 以 yahoo 電影的排行榜網頁為例

>>> fetch("http://tw.movie.yahoo.com/chart.html")

2012-10-04 17:36:09+0800 [default] INFO: Spider opened
2012-10-04 17:36:09+0800 [default] DEBUG: Crawled (200) <GET http://tw.movie.yahoo.com/chart.html> (referer: None)
[s] Available Scrapy objects:
[s]   hxs        <HtmlXPathSelector xpath=None data=u'<html lang="zh-tw"><head><title>\u53f0\u5317\u7968\u623f\u699c - '>
[s]   item       {}
[s]   request    <GET http://tw.movie.yahoo.com/chart.html>
[s]   response   <200 http://tw.movie.yahoo.com/chart.html>
[s]   settings   <CrawlerSettings module=None>
[s]   spider     <BaseSpider 'default' at 0x1a72f90>
[s] Useful shortcuts:
[s]   shelp()           Shell help (print this help)
[s]   fetch(req_or_url) Fetch request (or URL) and update local objects
[s]   view(response)    View response in a browser


// 選取第一個 option 元素,抽出文字
>>> desc = hxs.select('//option/text()').extract()[0]

// 原始 unicode 格式
>>> desc
u'\u96fb\u5f71\u6642\u523b'

// 正確地顯示中文
>>> print desc
電影時刻

>>> print desc.encode('utf-8')
電影時刻

閱讀更多 »

crawler 軟體清單 & scrapy 的替代物

2012年9月29日 星期六
0 意見
photo credit: Ian Sane

Scrapy 是什麼?來看看官方的定義:

Scrapy is a fast high-level screen scraping and web crawling framework, used to crawl websites and extract structured data from their pages. It can be used for a wide range of purposes, from data mining to monitoring and automated testing.

哇嗚,它可以用來扒取網站,擷取網頁上結構化的資料。100% python,可以在 Linux, Windows, Mac 及 BSD 上運行,而且,有很詳盡的說明文件 ...嗯聽起來挺不賴的嘛。

然而我還是想知道有哪些可用的取代軟體,這時候有個聲音傳來了:

If you're looking for a python based crawler, Scrapy is probably your best bet.
─ Eric Wu

所以意思是 scrapy 已經非常好了是嗎?無論如何,Eric Wu 還真是個好心人,他在 Quora 留下了非常有用的爬蟲 (crawler) 清單,記錄用各式各樣語言寫成的爬蟲軟體。

Java
    Nutch => http://nutch.apache.org/
    Heritrix => https://webarchive.jira.com/wiki/display/Heritrix/Heritrix...
    WebSPHINX => http://www.cs.cmu.edu/~rcm/websphinx/

Python
    Scrapy => http://scrapy.org/
    Scrape.py => http://zesty.ca/scrape/
    HarvestMan => http://harvestmanontheweb.com/
    Mechanized (ported from the perl version) => http://wwwsearch.sourceforge.net/mechanize/

Ruby
    scRUBYt => https://github.com/scrubber/scrubyt
    Anemone => http://anemone.rubyforge.org/

Ruby: Not Really Crawlers but can be used like one
    hpricot => http://hpricot.com/
    Nokogiri => http://nokogiri.org/

PHP
    Snoopy => http://sourceforge.net/projects/snoopy/
    PHPCrawl => http://phpcrawl.cuab.de/

Erlang
    eBot => https://github.com/matteoredaelli/ebot


這個清單可以無窮地長下去,然而這是我很不樂見的 XD。因為 python 對我來說是個蠻美的語言,所以我會比較偏好先試用 python based 的軟體。你用過哪些爬蟲軟體呢?如果有推薦的爬蟲軟體,歡迎告訴筆者囉 :)
閱讀更多 »

在使用 Scrapy 之前: Scrapy 安裝方法

0 意見


在使用 Scrapy 之前,有一些套件必須先安裝好:

  1. Python 2.6 或 2.7
  2. OpenSSL (除了 Windows 之外的作業系統都有配備)
  3. pip easy_install python 套件管理


▄▄▄

Scrapy 官方的安裝指南在開頭處寫說用 pip 或 easy_install 皆可,然而我卻 pip 失敗了,因此我改成用 easy_install:

※ 筆者的使用環境是 Virtual Machine 上的 ubuntu 12.04 32-bit 作業系統

// 先安裝 easy_install pytohn 模組
sudo apt-get install python-setuptools
// 透過 easy_install 安裝 scrapy
sudo easy_install scrapy

好了,安裝完後,先查看一下版本
$scrapy version
Scrapy 0.14.4


※ (2012.12.04)
筆者之後在另外一台電腦安裝 Scrapy 時,遇到沒有 python.h 而導致安裝失敗的問題。網路上的朋友很好心地提供了非常簡單的解決辦法,安裝 python 的開發套件。只要在終端機前下指令:

sudo apt-get install python-dev

▄▄▄

恭喜夫人,賀喜老爺,scrapy 已經安裝好了。可以參考底下連結,邁向下一個關卡。


※ 使用 easy_install 的話,安裝好的scrapy 應是位於  /usr/local/lib/python2.6/dist-packages/Scrapy-0.14.4-py2.7.egg/
※ 若想要移除 scrapy,可以 rm -rf 該資料夾,或者使用 pip uninstall
閱讀更多 »

Hacker News 宗旨所教我的事

2012年9月14日 星期五
0 意見

底下是部分 Hacker News (HN) 歡迎頁面的中文翻譯:

...

這裡的文章不只是關於技術,因為好的電腦高手不僅僅是對技術感到好奇,而是擁有能夠「深度地好奇」的能力。

然而什麼事情是「深度有趣」的?我們認為,是那些能夠幫助人們更了解這個世界的事情。比方說,一則關於搶劫的故事,可能不怎麼「深度有趣」。但倘若這則搶劫是某個大事件的前兆,是一個隱藏的趨勢,那麼可能它就是「深度有趣」。

那,什麼東西是屬於「不深度有趣」的呢?關於名人的八卦、好笑或可愛的影音、圖片,宣傳黨派的政治文章等不是。如果這些東西被放上網站,它們會排擠真正「深度有趣」的事物,並且害它們漸漸被冷落。[註一]

至於什麼是好的評論呢?這得看一則評論能教給我們什麼。這有兩個層面,比如指出之前沒有被提過的思考方向,以及提供更多關於該主題的資訊。從個人的經驗來說,像是「XD」或「這蠢斃了!」等等評論則什麼也沒教我們。[註二]

...


註一:這令我想到有名的破窗理論 ─ 犯罪學裡的一個理論,由詹姆士·威爾遜(James Q. Wilson)及喬治·凱林(George L. Kelling)提出。此理論認為環境中的不良現象如果被放任存在,會誘使人們仿傚,甚至變本加厲 (維基百科)。

註二:讀了這裡,我終於弄懂了為什麼有些人的話聽來總是「沒有營養」,而有些人的話則聽來「很有想法」。重點是要講出沒有被提過、觀察過的新方向,或者提供更深入詳盡的資訊。你的身邊有多少人擁有這兩點能力?

註三:Hacker News 由 Paul Graham 於2007年2月建立,是一家關於電腦駭客和創業公司的社會化新聞網站。被台灣的 Inside 歸為「硬派」的資訊集散地。是網路創業者、網路觀察者與相關從業人員討論議題的重要場地,創業經歷以及新技術的分享是一大賣點。




筆者的想法

之所以會特別思考琢磨 HN 的歡迎頁面,是因為筆者對於 HN 所講的許多概念很有共鳴。我對於現下社群網站上廣泛流傳的「淺薄」資訊感到一點噁心,也對很多只會進行單向思考的人們開始感到厭煩。真實的世界會比一個人理解中的世界複雜,而越來越多往平均靠攏且膚淺的言論最終只會破壞人們對真實世界的理解。

所以,HN 的宗旨到底教了我什麼?我想,是一種對於「深度好奇」能力的追求,以及認識一個真正具有意義的評論,到底是指具備什麼條件。 HN 的主張看起來簡單明瞭,然而也因為它的簡單明瞭,令我感到很務實。我想一個人若是能夠武裝上這些能力,經常提出創意性的評論,那麼他所身處的「那個世界」必定和很多人所處的「世界」不同,而且,也很有可能過著非凡有趣的人生。當然這只是我的猜測,然而看看我心中尊敬的一些人士,比如安藤忠雄、茂呂美耶、Paul Graham 等等...我覺得這個猜測一點也不過分。




心想 HN 應該不會介意我把原文放在這裡分享,所以若你感到好奇,請看:



Welcome to Hacker News


Hacker News is a bit different from other community sites, so we'd appreciate it if you'd take a minute to read the site guidelines.

HN is an experiment. As a rule, a community site that becomes popular will decline in quality. Our hypothesis is that this is not inevitable—that by making a conscious effort to resist decline, we can keep it from happening.

We don't know whether this hypothesis is correct, but it has held up for a surprisingly long time already.

Essentially there are two rules here: don't post or upvote crap links, and don't be rude or dumb in comment threads.

A crap link is one that's only superficially interesting. Stories on HN don't have to be about hacking, because good hackers aren't only interested in hacking, but they do have to be deeply interesting.

What does "deeply interesting" mean? It means stuff that teaches you about the world. A story about a robbery, for example, would probably not be deeply interesting. But if this robbery was a sign of some bigger, underlying trend, then perhaps it could be.

The worst thing to post or upvote is something that's intensely but shallowly interesting. Gossip about famous people, funny or cute pictures or videos, partisan political articles, etc. If you let that sort of thing onto a news site, it will push aside the deeply interesting stuff, which tends to be quieter.

The most important principle on HN, though, is to make thoughtful comments. Thoughtful in both senses: both civil and substantial.

The test for substance is a lot like it is for links. Does your comment teach us anything? There are two ways to do that: by pointing out some consideration that hadn't previously been mentioned, and by giving more information about the topic, perhaps from personal experience. Whereas comments like "LOL!" or worse still, "That's retarded!" teach us nothing.

Empty comments can be ok if they're positive. There's nothing wrong with submitting a comment saying just "Thanks." What we especially discourage are comments that are empty and negative—comments that are mere name-calling.

Which brings us to the most important principle on HN: civility. Since long before the web, the anonymity of online conversation has lured people into being much ruder than they'd dare to be in person. So the principle here is not to say anything you wouldn't say face to face. This doesn't mean you can't disagree. But disagree without calling the other person names. If you're right, your argument will be more convincing without them.


閱讀更多 »

Ubuntu 安裝 MongoDB,測試資料庫連結

0 意見

在練習教學範例之前,必須先安裝 MongoDB。底下是在 Ubuntu 上安裝 MongoDB 的步驟:

步驟很簡單,只要鍵入:

sudo apt-get install mongodb

就是這麼簡單,你可以輸入 mongo 連結資料庫:

seyna@ubuntu:~/mongoDB$ mongo
MongoDB shell version: 2.0.4
connecting to: test
>

接著寫一個簡單的 javascript 程式,測試資料庫是否能順利連結。範例:
// db.js

var mongo = require('mongodb'),
  Server = mongo.Server,
  Db = mongo.Db;

var server = new Server('localhost', 27017, {auto_reconnect: true});
var db = new Db('exampleDb', server);


db.open(function(err, db) {
  if(!err) {
    console.log("We are connected");
  }
});

// 如果沒有安裝 mongo,則不會有任何輸出


在提示命令列輸入 node db.js 試試看:
seyna@ubuntu:~/mongoDB$ node db.js
"We are connected"


閱讀更多 »

你以及你的研究 ─ Richard Hamming

2012年9月2日 星期日
0 意見
「為什麼有些科學家能夠得到具有長遠影響的結果,而其他絕大多數都被遺忘了?」 Richard Hamming 時常問自己這個問題。

在具備高度競爭張力的 Bell 實驗室裡,人們相互競爭、相互學習模仿。綜合超過二十年以上的研究經驗, Richard 在 1986 年的一場演講裡分享了「如何從事屬於你個人的研究」。


當時的錄音帶被謄寫成了逐字稿,題名為 "You and Your Research" (pdf)

Richard Hamming 的這場演講給了我很多的啟發:尤其是在方法學構思題目個人特質等方面,在看了兩遍文稿後,讓我徹底反省過往的毛病,然後進而逐漸改善許多生活實務上的細節。

我利用 impress.js 製作了一個 browser-based 的簡報。

簡報 ─「你與你的研究」




為了便於(自己的)回顧,稍微將長達十幾頁的文字做幾點摘要:

迷思
|
|─ 優秀的科學成果是因為運氣好
|─ 要有好的腦袋才能有優秀的成果


具體的方法 (12原則)
|
|─ 轉變看問題的角度,或,稍微修改原先的問題
|─ 比別人多 10% 的努力
|─ 能夠忍受「不確定」以及「曖昧」狀態 (tolerate ambiguity)
|─ 問自己「什麼是重要的問題」
|─ 分配時間給「偉大的點子」
|─ 口袋裡有 10-20 個重要的問題
|─ 辦公室的門隨時敞開
|─ 發表可作為其他人研究基石的作品 (don't do isolated work)
|─ 不要埋怨工具
|─ 學會寫的好、寫的清楚
|─ 學會給予正式的演講
|─ 學會給予非正式的演講


人格特質
了解你的人格特質,了解你自己。比如,如果你不善於管理時間,因此而讓低效率影響研究的進展,請現在就學會時間管理,或者請專人幫助你。如果你時常因為邋遢的穿著而使別人不懂得尊重你的發言,請學會控制自尊心,下次穿著看起來更符合你專業的服裝出門。


Richard Hamming 是誰?
Richard Hamming 被視為數學與電腦科學領域中最偉大的人物之一,他的貢獻包括 Hamming window, Hamming numbers, Hamming distance ... 。他曾參與製作人類的第一顆原子彈;在 1968 年領取 Turing Award;在電腦科學領域裡擁有超過十本著作。


簡報 ─「你與你的研究」   "You and Your Research" (pdf)   
閱讀更多 »

在 blogger 上使用 syntaxHighlighter (含安裝)

2012年9月1日 星期六
0 意見

考慮到筆者之後可能張貼有關 R, perl, python, javascript, CSS, HTML 等語言的程式碼。為了方便閱讀起見,於是採用的似乎廣受歡迎的 syntaxHighliter。它是 Alex Gorbatchev 在2004年開發的開源碼客戶端 javascript。

安裝方式:
1. 在 Blogger 的後台,打開「設計」、「修改HTML」。
2. 輸入 CTRL+F 找到 </head>
3. 複製底下程式碼





















4. 將這些程式碼貼在 </head> 之前
5. 預覽結果,如果沒有錯誤,儲存離開。



基本使用方法


利用 <pre></pre> 標籤,將想要 highlight 的程式碼安插其中。利用 brush 指定對應的程式語言。請見此網頁參考更多的 brush 以及對應的別名 (aliases)。

<pre class="brush:js">
function helloWorld() {
  alert('Hello World!') ;
}
</pre>

進階使用方式


透過參數,我們可以調整畫面顯示的感覺。底下提供一些好用的參數:


摺疊程式碼
<pre class="brush: js; collapse: true">

</pre>

關閉超連結
<pre class="brush: js; auto-links: false">

</pre>

部分 highlight
<pre class="brush: plain; highlight: 2">

</pre>

<pre class="brush: plain; highlight: [1, 3]">

</pre>

gutter - 開啟/關閉行數的顯示(line number)
<pre class="brush: php; gutter: false;">

</pre>

關閉 toolbar (移除右邊的?小綠點)
<pre class="brush: php; toolbar: false;">

</pre>


HTML無法正確顯示 & 風格 styling


<pre class="brush:html"></pre> 之間的 HTML 無法正確地顯示在 blogger 上。解決問題的方法之一是使用 Format My Source Code for Blogging 等線上工具,用跳脫字元取代使 blogger 解譯錯誤的部分。再將轉出的編碼資料改由 SyntaxHighlighter 處理。步驟如下:

  1. 不要勾選「Embed Stylesheet」選項進行「Format Text」
  2. <pre class="source-code"> 標籤替換成 <pre class="brush: html">
  3. 移除前後的 <code></code> 標籤(如果沒有移除, 則 <code>< /code> 標籤會一併出現在畫面上)。


關於佈景主題,syntaxHighlighter 目前提供了七種,而筆者比較喜歡 RDark theme,於是將它取代了原來的 shThemeDefault.css。想參考更多佈景主題可以見此網頁

方法是將當初安裝在 blogger 上的這行程式碼
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>

換成:
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeRDark.css' rel='stylesheet' type='text/css'/>




相關閱讀
玩物尚誌 ─ Blogger加掛SyntaxHighlighter,顯示漂亮的彩色程式碼
cyberack ─ Adding a Syntax Highlighter to your Blogger blog

閱讀更多 »

實用的 ncRNA 資料庫

2012年6月26日 星期二
0 意見
自己準備 non-coding RNA (ncRNA) 的清單未嘗不可。讓我們來想像一下準備的步驟。一,從表現量的資料中過濾出可靠的轉錄物,二,找出這些轉錄物的座標,三,比對已知的蛋白質的對應的位置,四,分離出 protein-coding transcript 與 non-coding transcript。然而當中最麻煩的步驟可能就是找出所有已知蛋白質的資訊,因為這需要蒐集各大資料庫的蛋白質註記,還有令人白髮的諸多資料前置處理的程序。

建立自己的清單還是相當重要,不過若是資料來源相當的可靠(自己動手做也比不上人家的話),或者只是想初步檢驗問題的潛力,那麼使用別人已建立好的資源可能會是幫助自己研究過程更有效率的辦法之一。

在 2008 年,John S.Mattick 的實驗室建立了 NRED 資料庫,全名是 Noncoding RNA Expression Database。這個資料庫厲害之處在於不僅展示自己實驗室得到的數據,還搜刮了 GNF 與 Allen Brain Atlas 兩個大型資料庫的資訊,前者擁有 44,775 筆人類、36,182 筆老鼠的 transcript 的資料,後者則藏有成鼠大腦裡大約兩萬筆 transcript 表現量的資料。看來已是相當豐富。

他們將這些蒐集而來的轉錄物和底下三個來源的蛋白質資料做比對: Refseq [1] , MGC [2] , UCSC known genes [3] 。除此之外,他們也利用 CRITICA 演算法 [4] 來預測轉錄物有多少 protein-coding 的潛在能力。剩下的轉錄物,若沒有比對到已知的 ncRNA 就會被歸類為 'Unknown',比對到已知的 ncRNA 的話則歸類為 'noncoding'

NRED 擁有很貼心的介面,設計了許多過濾器(filter)。表現量: P-values, B-statistics, q-values。 fold change:M-values。表現量的強度: A-values, Affymetrix present/absent calls。另外還提供了許多有助於研究的資訊,如 transcript 有無 spliced,有沒有 PhastCons 的 conservation 分數,有沒有 RNAz 預測的二級結構等等。也提供了關於 sense, cis-antisense 等資訊。

決定要拿這個資料庫裡的資料來玩一陣子了。


[1] Pruitt, K.D., Tatusova, T. and Maglott, D.R. (2005) NCBI Reference Sequence (RefSeq): a curated non-redundant sequence database of genomes, transcripts and proteins. Nucleic Acids Res, 33, D501-504.
[2] Gerhard, D.S., Wagner, L., Feingold, E.A., Shenmen, C.M., Grouse, L.H., Schuler, G., Klein, S.L., Old, S., Rasooly, R., Good, P. et al. (2004) The status, quality, and expansion of the NIH full-length cDNA project: the Mammalian Gene Collection (MGC). Genome Res, 14, 2121-2127.
[3] Hsu, F., Kent, W.J., Clawson, H., Kuhn, R.M., Diekhans, M. and Haussler, D. (2006) The UCSC Known Genes. Bioinformatics, 22, 1036-1046.
[4] Badger, J.H. and Olsen, G.J. (1999) CRITICA: coding region identification tool invoking comparative analysis. Mol Biol Evol, 16, 512-524.


閱讀更多 »

淺論分辨蛋白質編碼基因和 ncRNA 的困難

2012年6月25日 星期一
0 意見
人類擁有超過三億個鹼基對,然而卻只有 2.3% 的部份能夠轉錄出 mRNA。這讓人們對於那些最終未能轉成蛋白質的 DNA 區域感到好奇,它們的存在有什麼作用呢?甚至於有些科學家還以 junk DNA 形容這些區域。直到 2005 一篇發表在 Science 的研究,指出了其實細胞內有大量不在預期中的轉錄產物,而這些轉錄產物絕大多數似乎都不會成為蛋白質,了解到這項發現的重要性,於是人們開始以「暗物質」(Dark matter ) 等引人遐想的名稱來形容這些物質 [1]。

毫無意外地,自那時候起便開始有了許多針對這些物質的研究。也因此出現了許多新的類別,比如: microRNA, PIWI-associated RNAs, endogenous small interfering RNAs ...等。而之後科學家在透過大規模地實驗發現長度較長的 (超過 200 nt) noncoding RNA (ncRNA) 似乎是這些「暗物質」的主要成份,研究結果也暗示這些長的轉錄產物可能是之後短的、具功能的 ncRNAs 的 precursor [2]。

然而這類的研究也並非總是一帆風順。有許多標記上的問題需要面對。怎麼說呢?在當時,老鼠的基因體中有 33% 的轉錄產物被標記為 noncoding,然而換成了人類的基因體,卻只有 7% 的轉錄產物被標記為 ncRNAs。 26% 是很大的差異,而這樣的差異也凸顯了將長 ncRNA 與 mRNA 清楚分類的困難度。

底下,筆者就會針對六種不同的策略,剖析科學界在區分 protein-coding 與 noncoding RNAs 上所面臨的混沌與挑戰。


策略一: Open reading frame 長度
有鑑於超過 95% 的蛋白質擁有超過 100 aa 的長度,所以FANTOM consortium 原本使用 300 nt,也就是 100 codons 的長度作為門檻,但誰都知道這樣是很粗糙的辦法。一些已知的具功能的 ncRNA 如 H19, Xist, Mirg, Gtl2 都會因此被剔除掉。另一方面,也有大約近 3700 個蛋白質會小於這麼門檻。


策略二: ORF conservation
科學界普遍存在的一種假設是,若 ORF 缺乏 conseravtion,則其「沒有功能」的可能性很高。一些常用的計算 ORF conservation 的工具有 BLASTX. Pfam, rsCDS, SUPERFAMILY。其它還有一些加入了跨物種資訊的計算工具,包括 CSTminer, CRITICA 等。這種方法的限制在於現有蛋白質資料庫的「完備程度」和「準確程度」。舉例來說, Xist 在 1992 年被確認為具功能性的 ncRNA 之前,被錯誤地歸類在蛋白質當中,時間長達十五年之久。另外,以 conservation 為依據也可能造成誤判,理由是一些 ncRNAs 可能是從 protein-coding 基因演化而來,因此可能留有 mRNA 的遺跡。比如說, Xist RNA 基因便是一個 protein-coding 基因 pseudogenization 後的結果 [3]。


策略三:Structural approaches
利用 conserved predicted RNA 的二級結構作為判斷 ncRNA 的依據。常用的工具有 QRNA, RNAz, EvoFOLD 等。然而這種方法很容易造成許多誤判,而且,其實 mRNA 裡頭也擁有許多 conserved 二極結構(尤其是 3'UTR)。


策略四:實驗手段
實驗室利用 In vitro translation assays 來鑑定一個 ORF 有無轉譯成為一個蛋白質。另一種方法是評估一個轉錄產物是否與 polysomes 緊密連結(雖然這種方法仍不是很可靠)。實驗手段很可能是所有手段裡最為可靠的(直覺上),然而在解讀這些實驗結果時我們仍須特別小心。原因是有些研究結果顯示, in vitro 中的肯定結果,在 in vivo 的情況下卻未能偵測到應該有的蛋白質。而另一方面,in vitro 實驗中的負面結果,我們也不能信心滿滿地百分之百地保證 in vivo 也能重複見到一樣的事情。


策略五:Artifact 過濾
舉例來說,FANTOM3 consortium 利用了很嚴謹的條件,包括 5'end 與 3'end 的 CAGE signal strength 和需吻合 polyadenylation 等,將原來的三萬多條 ncRNA 過濾到只剩三千六百多條 [4]。還有方法將那些會與另一股會產出 mRNA 重疊到的 ncRNA 通通丟棄。可想而知,若按照後者辦法,現在很熱門的 anti-sense transcript 等研究通通都無法做了。


策略六:綜合辦法
在 2006, 2007 年有兩個方法不約而同的使用了 SVM,透過學習 peptide length, amino acid composition, protein homologs, secondary structure, protein alignment information 等特徵,來預測 protein-coding 的機率值 [5,6]。這是一個將生物問題成功重塑為機器學習問題的好故事,也都刊上了很好的期刊。然而,光依賴(黑盒子)機器提供的預測數據,我們是無法對於核心問題 ─ protein-coding gene 與 ncRNA 之不同,有更清楚深入的了解的。


結論:
近來人們在多細胞和單細胞生物體內觀察到一種神奇的現象,那就是有些轉錄產物不僅可以以蛋白質的角色進行任務,也可以以 RNA 的角色執行工作。例子包括人類的 steroid receptor activator,果蠅的 Oskar mRNA,或者是 E.Coli 的 SgrS RNA。這些觀察都在挑戰著科學家之前對於轉錄產物的認知。RNA 事實上是可以有雙重角色的,一個是當它為蛋白質時擁有的,另一個是當它以 RNA 的角色出現時擁有的。這樣的結果衝擊人們熟悉的二分法,理論開始有了修補的需要。毫無疑問地,未來關於 ncRNA 的研究數量會更加速地成長,刺激人們的想像,開拓更多知識的疆土。眼前看來有無窮盡的寶藏即將開展。然而讓我們在此稍作歇息,拍拍肩上的灰塵,深呼吸,然後問問自己,你想出一個好問題了嗎?


[1] In the forests of RNA dark matter. Science, 2005
[2] RNA maps reveal new RNA classes and a possible function for pervasive transcription. Science, 2007
[3] The Xist RNA gene evolved in eutherians by pseudogenization of a protein-coding gene.Science, 2006
[4] The transcriptional landscape of the mammalian genome. Science, 2005
[5] Distinguishing protein-coding from non-coding RNAs through support vector machines. PLoS Genet, 2006
[6] CPC: Assess the protein-coding potential of transcripts using sequence features and support vector machine. Nucleic Acids Res, 2007

photo credit: NASA's Marshall Space Flight Center via photo pin cc
閱讀更多 »

處理 R 的 sparse matrix 問題

2012年4月11日 星期三
0 意見
遇到 sparse matrix 是很棘手的事情。原因是一不小心它會使檔案變得肥大,佔盡了記憶體資源,同時拖垮了 script 的效率。

真的是很棘手的敵人。

幸虧已經有許多人研究、提出了一些解決辦法。比如說 R 的 Matrix 套件。



了解格式

比較推薦使用的是 MatrixMarket 格式。

5  5  8
1  1  1.000e+00
2  2  1.050e+01
3  3  1.500e-02

第一行記錄的分別是 rows, columns, entries (列、行、總數)。接著每一列表示每一個 entry。可加入註解,行首以 % 標示,放在檔案的開頭處。更詳細的說明可以見此網頁


建立 sparse matrix

可參考底下的範例,試著在 R 重複一遍(鍵入 ?sparseMatrix 查更多說明)。

i <- c(1,3:8); j <- c(2,9,6:10); x <- 7 * (1:7)
(A <- sparseMatrix(i, j, x = x))

輸出結果

8 x 10 sparse Matrix of class "dgCMatrix"
                             
[1,] . 7 . . .  .  .  .  .  .
[2,] . . . . .  .  .  .  .  .
[3,] . . . . .  .  .  . 14  .
[4,] . . . . . 21  .  .  .  .
[5,] . . . . .  . 28  .  .  .
[6,] . . . . .  .  . 35  .  .
[7,] . . . . .  .  .  . 42  .
[8,] . . . . .  .  .  .  . 49


讀、寫外部 sparse matrix

我們可以藉著 read.table() 讀入 MatrixMarket 格式的檔案,再利用 sparseMatrix() 製作 sparse matrix。筆者相信應該還有更好的方法,讀者可以自行嘗試其他指令。底下的範例亦僅供參考。


dd <- read.table("D:/test.mtx", header=FALSE)
mm <- sparseMatrix(i = dd$i, j = dd$j, x = dd$x, dims=c(row_dim,col_dim))


如果你已經擁有了一個 sparse matrix,使用 writeMM() 可以幫您輸出成為外部檔案
data(KNex)
writeMM(KNex$mm, "mmMM.mtx")

這部份可鍵入 ?readMM 看更多說明。


閱讀更多 »

用 Jensen-Shannon divergence 計算相似度

2012年4月5日 星期四
0 意見
今天認識到了 Jensen-Shannon divergence,它似乎是一個常用於計算兩個機率分佈間之相似程度的方法。

where  and


根據維基百科的條目,它又被稱為 information radius (IRad) 或 total divergence to the average。儘管是筆者自己的猜測,但我想後者名字的由來應該與 M = 1/2(P+Q) 這個平均值脫不了干係。

2009 年 PNAS 刊了一篇充分運用 Jensen-Shannon divergence 方法以比較多種基因體的文章。對於想運用 Jensen-Shannon divergence 以計算 DNA 序列間相似程度的話,裡頭的公式與步驟應已經夠詳細與清楚了。

標題:Alignment-free genome comparison with featurefrequency profiles (FFP) and optimal resolutions



另外,筆者發現 R 有一個名為 textcat 的套件,裡頭含有可以計算 Jensen-Shannon divergence 的函式 ─ textcat_xdist()。這個函式的優點在於,給定 n-gram profiles,它還可以計算 Kullback-Leibler I-divergence, Kullback-Leibler J-divergence, the sum of the absolute differences in n-gram log frequencies, 以及 cosine dissimilarity 等等。

雖然有現成的 R 套件可以使用,但也不需要高興的太早。依照筆者這幾天的經驗,資料量太大(一千個維度以上) 的情況就開始可能會有「記憶體不足」的錯誤發生,差不多的意思就是這函式報廢了。

所以最好還是從頭了解,弄清楚每個算式,別擔心把手弄髒。如此一來最壞的情況下也有辦法實作演算法,把任務完成。



提醒

若要得到距離,記得將 Jensen-Shannon divergence 開平方根
The Jensen-Shannon divergence is not a distance (as it  does not obey the triangle inequality), but its square root is. ─ "What Makes a Query Difficult?" Carmel et al., ACM, 2006. 


閱讀更多 »

實用的演化分析工具:ape package of R

2012年3月27日 星期二
0 意見
R 套件 ape 是筆者最近發現的一個非常好用的工具,它可以幫助你從事親緣關係 (phylogenetics) 和演化的分析研究。ape package 自從在 2004 年發表在 Bioinformatics 後,至今已有超過七百次的引用數,可以想見它的應用之廣泛與實用。

標題:APE:Analyses of Phylogenetics and Evolution in R language

就以測量兩條 DNA 序列的距離來說好了,ape 能夠彈指間幫你計算完成,真是大快人心。可以泡杯咖啡,想想晚上要看什麼戲劇了。

由於筆者目前有比對 DNA 序列的需要,所以底下會簡單介紹如何利用 ape package 計算多條序列之間的相似程度 (similarities of DNA sequences)。


輸入資料 (讀取檔案)

比對序列前,至少要先有 input 吧。ape 擁有讀取多種資料格式的函式,並且轉化成自己專屬的資料型態。目前它支援的檔案格式有 "interleaved", "sequential", "clustal", 和 "fasta"。我想後兩者應該是很多生資學生熟悉的吧。

您可以在 R console 裡輸入 ?read.dna 了解更多資訊和範例說明。為了方便解釋,筆者僅以 fasta format 為例:

### ... 建立一個擁有三條 DNA 序列的 fasta 檔案,
### ... 取名為 exdna.txt
cat("> No305",
"NTTCGAAAAACACACCCACTACTAAAANTTATCAGTCACT",
"> No304",
"ATTCGAAAAACACACCCACTACTAAAAATTATCAACCACT",
"> No306",
"ATTCGAAAAACACACCCACTACTAAAAATTATCAATCACT",
file = "exdna.txt", sep = "\n")
### ... 讀取 exdna.txt
ex.dna <- read.dna("exdna.txt", format = "fasta")



計算距離

我們使用 dist.dna() 計算多個序列間的距離。 您可以鍵入 ? dist.dna  或者到此網頁看更多資訊。dist.dna() 支援的 model 非常多,有 "raw", "N", "TS", "TV", "JC69", "K80" (the default), "F81", "K81", "F84", "BH87", "T92", "TN93", "GG95", "logdet", "paralin", "indel" 以及 "indelblock"。

不過我想最為人知的還是 1980 年 Kimura 所提出的 “Kimura's 2-parameters distance” model。在沒有特別指定 model 之下, K80 是 dist.dna() 的預設 model。

### ... 計算距離
dist.dna(ex.dna)

### 結果
           No305      No304
No304 0.05561282        
No306 0.02703361 0.02703361


等等

筆者調整了範例中的 DNA 序列,修修改改後意外地發現若提供了太短的序列的話,會出現「錯誤在obj[i, ] <- sequ : 被替換的項目不是替換值長度的倍數」的警示訊息,然後就卡關了。原因是什麼呢?原來是 read.dna() 原始碼之中有最短長度的限制。筆者手邊的序列長度皆不到 10 bp,而 read.dna() 卻設有長度限制。要如何破解它呢?



破解方法
先在 R console 裡輸入 read.dna 印出原始的函式,將程式碼複製,接著打開記事本或任何上手的文字編輯器,貼上 (不要保留 <environment: namespace:ape>)。

找到這一行,
   
pat.base <- "[-AaCcGgTtUuMmRrWwSsYyKkVvHhDdBbNn?]{10}"


把後面的 10 換成你想要的任意長度,比如改成 7 好了:
 
pat.base <- "[-AaCcGgTtUuMmRrWwSsYyKkVvHhDdBbNn?]{7}"


為了避免破壞原來的函式,我們將修改過後的函式重新定義為自己的函式,比方說, 改名為 seyna.read.dna() 好了。在程式碼開頭處,找到:

function (file, format = "interleaved", skip = 0, nlines = 0,
    comment.char = "#", seq.names = NULL, as.character = FALSE,
    as.matrix = NULL)
{

我們只需要放上新定義的函式名稱,其餘維持不變就好了 (修改過的地方為紅色處)

seyna.read.dna <- function (file, format = "interleaved", skip = 0, nlines = 0,
    comment.char = "#", seq.names = NULL, as.character = FALSE,
    as.matrix = NULL)
{

接著把筆記本上完整的程式碼複製貼上到 R console 裡,執行,讓 R 儲存此函式  。然後您就可以執行變更過長度限制的 seyna.read.dna(),讀取更短的 DNA 序列以進行比對囉

# ... 用自行定義的函式讀取 DNA 序列檔
ex.dna <- seyna.read.dna("exdna.txt", format = "fasta")
dist.dna(ex.dna)


更多

R 套件 Biostrings 是個強大的字串處理工具,也能做到類似的事情。只是其建立相似程度的模型並不包含基於 K80 等演化模型,多是 BLOSUM、PAM 或參數化的 nucleotideSubstitutionMatrix。然而使用者也可以自行定義 substitution matrix,以完成自己的任務。


閱讀更多 »

值得注目的 affinity propagation clustering

2012年3月26日 星期一
0 意見
近來有個問題在腦中逐漸成形,出現了將 DNA 序列做分群的需求,因此著手尋找有用的套件。結果我找到了 APCluster,一個基於 affinity propagation (AP) clustering 的 R 套件。什麼是 affinity propagation clustering?它很強大嗎?查閱了一下原始出處,才發現這個演算法竟然是發表於 2007 年的 《Science》。

標題:"Clustering by Passing Messages Between Data Points"


《科學》裡的核心概念

在開始談 AP clustering 之前,先聊聊知名且常被使用的 K-centers clustering 演算法。K-centers 演算法會從一些隨機取得的 "exemplars" (被當做 center 的 data points)開始,並且迭代調整更新每個集合以減少整體的 suqared error。這個方法對於初始選擇的 exemplars 很敏感,所以通常需要更換初始選擇並且重跑許多次以獲得好的解答。然而這樣做通常也只有在 clusters 的數目少且恰好初始時選的種子 (seeds) 夠好才會趨近好的解答。

他們的方法中的一個創舉是,「同時考慮全部的資料點為可能的 exemplars」!藉由點與點之間的遞迴地交換資訊 ─ "responsibilities" 與 "availavilities",讓各個節點能夠知道誰是最適合自己的 exemplar 以及自己有多大程度適合當 exemplar。

真是妙極了。

若想要知道較多實作的細節,不妨查閱原始論文。如果您偏好分析程式碼, AP cluster 也有 Matlab 的實作版本。在程式裡頭的註解檔,有交待了演算法的整體概念,比如:

Each cluster is represented by a data point called a cluster center, and the method searches for clusters so as to maximize a fitness function called net similarity. The method is iterative and stops after maxits iterations.
For N data points, there may be as many as N^2-N pair-wise similarities (note that the similarity of data point i to k need not be equal to the similarity of data point k to i). These may be passed to APCLUSTER in an NxN matrix s, where s(i,k) is the similarity of point i to point k.

APCluster:R 套件

AP clustering 演算法也被實作成了 R 的套件,發表在 2011 年的 Bioinformatics。

標題:APCluster: an R package for affinity propagation clustering.

其實這篇論文才是我的主角。想了想後,發現序列不能以有序數值表示,代表內建的 negDistMat( ) 在分群序列上頭是沒有意義的。若參考作者們在分析蛋白質 coiled coil 所採取的方式,還得詳細了解 Carsten et al. 在 2011 的研究工作才行 (似乎不脫離 BLAST pair-wise alignment 的計算分數)。
程式擁有其他內建的函式,能將資料視覺化


參考文件
APCluster 的參考文件有很多,底下僅列舉一些:

閱讀更多 »

研究演化的 R 套件:RPHAST

2012年3月23日 星期五
0 意見

筆者會注意到 PHAST 的原因首先是因為身邊同事使用 PhastCons 的輸出資料進行分析,然後接著因為自己手上新題目的需要而尋找適當的工具,結果找到了 RPHAST ─ 一個 R 版本的 PHAST。

RPHAST 的官方下載網頁:http://compgen.bscb.cornell.edu/rphast/
原始文件:PHAST and RPHAST: phylogenetic analysis with space/time models. Brief Bioinform (2011)
http://bib.oxfordjournals.org/content/12/1/41


沒用過倒算了,一試用才發現這實在是太好用了。與同樣頂頂大名的 PAML 相比,RPHAST 可說像是有視窗介面的 windows 3.1 ,而 PAML 則是醜陋又 bugy 的 DOS。RPHAST 提供了足夠充分的說明文件,而且安裝起來快速容易,真是揪感心啊。

若是需要分析基因體,官網裡的 vignette1.pdf 以內建的番茄第二號染色體為例,示範了讀取 alignments、features,以及用 PhyloFit, PhyloP 與 phastCons 評估 neutral model 的方法。簡單清楚。

僅僅  ~50 行的 R 程式碼,就能產出這張圖


USCS 的 Table Browser 裡也可以找到 phastCons table,只是很可惜地對 human genome 來說,只有提供 44 個物種的比對 (phastCons44wayPrimates)。但其實若只是想要 (ultra-) conserved region 的座標,在這裡拉拉選選就可以得到輸出,省去了自己執行程式的過程,也是很愜意啊。

PHAST,最早是 2002 年由 Cornell University 的助理教授 Adam Siepel 開啟的計畫,到 2006 年都陸續有相關著作,然而卻突然地中斷,直到 2010 年 Melissa J. Hubisz 的加入,在 2010 年和 2011 年大爆發在 Genome Research、 Briefings in Bioinfomatics 等期刊發表著作。 若您好奇 PHAST/RPHAST 與其他工具的差別,可以見其官方網頁"Comparison with Other Packages"

閱讀更多 »

另一則實驗:G-quadruplex 與轉錄因子 SP1 之結合

2012年3月12日 星期一
0 意見
《核酸研究》 (Nucleic Acids Research) 又刊出了一個關於 G-quadruplex 的文章。標題是「透過體外實驗,非典型的 DNA 結構是轉錄因子 SP1 的結合特徵序列」(A non-canonical DNA structure is a binding motif for the transcription factor SP1 in vitro)   

他們的研究與前人的研究有很大的差別在於,他們所使用的G-quadruplex 候選序列是只會形成兩個平面 (tetrad) 的,而不像之前人們多是採用會形成三個以上平面的候選序列。然而從他們的研究結果中他們認為,這種只會形成兩個平面的 G-quadruplex 在真實的細胞環境下有可能存在。它們被討論的太少了,不應該被如此忽視。   

已有前人展示過鋅手指(zinc-finger)蛋白質和 G-quadruplex 結合的能力。好玩的是,SP1 也是一個鋅手指蛋白質。而透過 DNA 突變的分析實驗,他們展示了 SP1 蛋白質除了辨識雙股 DNA 上的結合序列之外,也會將 DNA 是形成特殊結構的 G-quadruplex 視為結合的另一個對象。   SP1 蛋白質其中一個最短的辨識序列是 5'-GGGCGG-3',擁有相當多的鳥嘌呤(guanine)。他們的研究數據顯示 SP1 的結合位置有高達 77-87% 是和可能形成 G-quadruplex 的位置重疊的。   

更有甚者,之前科學家已發現 G-quadruplex 能夠限制 CpG 核苷酸的甲基化。Sp1 可能會透過和 G-quadruplex 結合,避免 DNA 序列後續的甲基化,達到調控基因的效果。   

「我們的研究展現了人們至今對於 SP1 蛋白質對於辨識結合上仍不了解的特質,未來可能被證明對於調控基因的表現至關重要」Balasubramanian 教授說道。  

原始文章: "A non-canonical DNA structure is a binding motif for the transcription factor SP1 in vitro"
Eun-Ang Raiber, Ramon Kranaster, Enid Lam, Mehran Nikan, and Shankar Balasubramanian Nucl. Acids Res. (2012) 40 (4): 1499-1508.


(本文同步刊載於生資櫥窗 BioWindow)
閱讀更多 »

測序儀大戰:GridION 和 MinION 出陣

2012年3月2日 星期五
0 意見


如果真如新華網的新聞稿所言 (英研製出"USB"基因組測序儀),能在串接的方式在 15 分鐘內以僅僅 5000 美元的代價定序完成人類的基因組,那未來定序儀的戰爭可會非常有趣了。儘管先前 Life technologies 已經率先宣成達到以 1000 美元定序人類基因組的目標 ("Ion Torrent claims to be first with $1K genome sequencer")。

但我不覺得 4% 的錯誤率與產品「一次性的特性」僅是「小小的瑕疵」。畢竟若要真能實際運用到學術研究上頭,相較於其他 I、L 公司不到 1% 的錯誤率,這個英國牛津納米孔技術公司的準確度就有點難以令人接受了。
閱讀更多 »
 

Categories

 

© 2010 取火之路, Design by DzigNine
In collaboration with Breaking News, Trucks, SUV