Hightlight.js-9.15.6

2018年12月18日 星期二

[Web] 以iris建立允許CORS請求的JSON API server

先決基礎知識

Golang, JavaScript, ES6

學習目標

網路知識:到MDN了解什麼是跨來源資源共用 Cross-Origin Resource Sharing (CORS)。
JSON server: 將iris Application掛載可自動發送CORS標頭的cors中間件 (GithubGoDoc說明文件官方範例程式)
Web Client:參考MDN的Fetch API使用方法,用JavaScript從遠端取得資料。

程式碼

JSON server:
package main

import (
  "github.com/iris-contrib/middleware/cors"
  "github.com/kataras/iris"
)

type tmp struct {
  ValBool    bool   `json:"valBool"`
  ValString  string `json:"valString"`
}

func main() {

  // 建立一個允許cors的context.Handler
  crs := cors.AllowAll()

  // 建立iris Application,並且掛載crs作為middleware
  app := iris.New()
  app.Use(crs)
  app.AllowMethods(iris.MethodOptions)

  app.Post("/api", func(ctx iris.Context) {
    j := tmp{
      ValBool:     true,
      ValString:   "abc",
    }
    ctx.JSON(j)
  })
  app.Run(iris.Addr(":38080"), iris.WithCharset("UTF-8"))
}

Web client (按F12在Chrome的console中查看結果):
<script type= application/javascript>
 var url = "http://localhost:38080/api";
   fetch(url, {
    method: 'POST',
    body: JSON.stringify({}),
    credentials: 'include',
    mode: 'cors',
    headers: {
      'Content-Type': 'application/json',
    },
  })
    .then(res=>res.json())
    .catch(error => console.error('Error:', error))
    .then((res)=>console.log(res))
</script>

2018年4月1日 星期日

[NGS] 以seqtk對raw reads取樣,降低coverage

安裝seqtk

工具seqtk (https://github.com/lh3/seqtk)

可以用conda直接安裝:
conda install seqtk

取出序列

評估paired raw reads每一邊需要取出的reads數量:(基因體大小 x 需要的倍率/定序長度)/2

假設基因體大小是5M,需要的覆蓋率是100倍,需要取出的reads為:(5,000,000x100/126)2,大約是 2,000,000

以seed 100 取出2,000,000條raw reads,同一個樣本F跟R的seed要用一樣,取出來的raw reads才會是paired,原始序列可以是gz壓縮檔:

seqtk sample -s100 raw-reads_R1.fastq.gz 2000000 > subsample-raw-reads_R1.fastq
seqtk sample -s100 raw-reads_R2.fastq.gz 2000000 > subsample-raw-reads_R2.fastq