Nov 6, 2008

Compiler Kernel

簡單做個筆記

1. 從 www.kernel.org 下載最新版 kernel source
2. cp /boot/config-2.6.xx /usr/src/{new-version-kernel}/.config //如已安裝相近版本的kernel,直接使用它的 config-2.6.xx 在修改就好了
3. sudo make oldconfig
4. sudo make menuconfig
4.1 加入版本名稱 // Gerneral setup -> Local version 如 : -blue119-01
5. sudo make
6. sudo make modules_install
7. sudo make install
8. cd /boot; sudo mkinitramfs -o initrd.img-2.6.xx-blue119-01 2.6.xx-blue119-01 // 2.6.xx-blue119-01 的目錄名稱在 /lib/modules/
9. sudo vi /boot/grub/menu.lst //加新新的kernel

PS : 也可以使用 make-kpkg來制作 kernel,安裝與移除方便很多 :)
make-kpkg binary --rootcmd=fakeroot --revision=修訂版本 --append-to-version=核心擴充版本

reference link:
http://www.howtoforge.com/howto_linux_kernel_2.6_compile_debian

Oct 30, 2008

USB vendor id and device id

可以從 /var/lib/usbutils/usb.ids 得知,vendor id & device id

Oct 29, 2008

strace

  1. strace - A very powerful troubleshooting tool for all Linux users
  2. Fun with strace and the GDB Debugger
  3. 5 simple ways to troubleshoot using Strace
  4. reducing Requests-Setup-Costs
  5. strace 命令用法

rtorrent.rc 備份

# This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.

# Maximum and minimum number of peers to connect to per torrent.
min_peers = 40
max_peers = 100

# Same as above but for seeding completed torrents (-1 = same as downloading)
min_peers_seed = 10
max_peers_seed = 50

# Maximum number of simultanious uploads per torrent.
max_uploads = 3

# Global upload and download rate in KiB. "0" for unlimited.
download_rate = 0
upload_rate = 10

encoding_list = UTF-8

# Default directory to save the downloaded torrents.
directory = ./

# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = ./session

# Watch a directory for new torrents, and stop those that have been
# deleted.
schedule = watch_directory,5,5,load_start=./watch/*.torrent
#schedule = untied_directory,5,5,stop_untied=

# Close torrents when diskspace is low.
#schedule = low_diskspace,5,60,close_low_diskspace=100M

# Stop torrents when reaching upload ratio in percent,
# when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.
# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
#schedule = ratio,60,60,"stop_on_ratio=200,200M,2000"

# The ip address reported to the tracker.
#ip = 127.0.0.1
#ip = rakshasa.no

# The ip address the listening socket and outgoing connections is
# bound to.
#bind = 127.0.0.1
#bind = rakshasa.no

# Port range to use for listening.
port_range = 6890-6999

# Start opening ports at a random position within the port range.
port_random = no

# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
#check_hash = no

# Set whetever the client should try to connect to UDP trackers.
#use_udp_trackers = yes

# Alternative calls to bind and ip that should handle dynamic ip's.
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa

# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
#
# encryption = allow_incoming,enable_retry,prefer_plaintext

# Enable peer exchange (for torrents not marked private)
#
# peer_exchange = yes

#
# Do not modify the following parameters unless you know what you're doing.
#

# Hash read-ahead controls how many MB to request the kernel to read
# ahead. If the value is too low the disk may not be fully utilized,
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
#hash_read_ahead = 10

# Interval between attempts to check the hash, in milliseconds.
#hash_interval = 100

# Number of attempts to check the hash while using the mincore status,
# before forcing. Overworked systems might need lower values to get a
# decent hash checking rate.
#hash_max_tries = 10

screenrc 備份

caption always "%{= wk} %{= KY} [%n]%t @ %H %{-} %= %{= KR} %l %{-} | %{= KG} %Y-%m-%d %{-} "
hardstatus alwayslastline " %-Lw%{= Bw}%n%f %t%{-}%+Lw %=| %0c:%s "

# some environment setting
vbell off
autodetach on
startup_message off
shell -$SHELL
dfscrollback 5000
defencoding utf8
#
# # buttom status bar
#caption always “%{=u .G} %-w%<%{=ub .y}%n %t%{=u .G}%+w ”
#hardstatus alwaysignore
#hardstatus alwayslastline “%{= .K} [%l]%<%=%{= .W}@%H %=%{= .y} %Y/%m/%d%{= .m} %C %A”
#
# # C + left : prev
# # C + right : next
bindkey “^[[1;5C” next
bindkey “^[O5C” next
bindkey “^[[C” next
bindkey “^[[1;5D” prev
bindkey “^[O5D” prev
bindkey “^[[D” prev
#
# # C-a b : encoding big5
# # C-a u : encoding utf8
bind b encoding big5 utf8
bind u encoding utf8 utf8
bind j encoding eucjp utf8
#
# # C-b $num : move current window to number $num
bind -c move 0 number 0
bind -c move 1 number 1
bind -c move 2 number 2
bind -c move 3 number 3
bind -c move 4 number 4
bind -c move 5 number 5
bind -c move 6 number 6
bind -c move 7 number 7
bind -c move 8 number 8
bind -c move 9 number 9
bindkey “^b” command -c move
#
# # F12 : fast kill
bindkey “^[[24~” kill

Oct 27, 2008

Linux MTD Driver Reference

引用至 lazyf's den

MTD NAND Driver Programming Interface

Thomas Gleixner
http://www.linux-mtd.infradead.org/tech/mtdnand/book1.html

HOW TO USE MTD/JFFS2 UNDER µClinux
Patrice KADIONIK, Professor Assistant at the ENSEIRB School of Electrical Engineering, Telecommunication, and Computer Science
http://uuu.enseirb.fr/~kadionik/embedded/uclinux/mtd/howto_mtd.html

Find your Root File System with MTD
http://www.ucdot.org/article.pl?sid=03/01/11/1049210&mode=thread

JFFS2 筆記

JFFS2的特性
  • 其斷電可靠度
  • 在MTD裝置上實做耗損平衡(wear leveling). 可以確保flash 上所有的區塊具有一致的使用率, 因此可以平衡每個區塊的損耗程度
  • 在MTD裝置上實做資料壓縮(data compression). 除了節省空間外, 在使用資料前先將它解壓到RAM上.不過, jffs2不能使用XIP(就地執行eXecute In Place)
  • 有實做垃圾收集(garbage collection). 它可以確保你的應用程式不會成長到到埴滿整個檔案系統.也就是寫入前會先檢查檔案系統的可用空間

Create jffs2 root file system
1. mkfs.jffs2 -d ./rootfs -o rootfs.bin -e 0x40000 --pad=0x02000000
2. file rootfs.bin
rootfs.bin: Linux jffs2 filesystem data little endian


Mount JFFS2 by MTD
1. modprobe jffs2
2. modprobe mtdblock
3. modprobe mtdram
4. dd if=rootfs.bin of=/dev/mtdblock0
5. mkdir /mnt/flash
6. mount -t jffs2 /dev/mtdblock0 /mnt/flash

Save as .....
1. dd if=/dev/mtdblock0 of=./your-modified-fs-image.bin

Sep 12, 2008

install ubuntu 8.04 on usb stick

前幾天,照著 USB Ubuntu 8.04.1 Persistent install from Linux 在隨身硬上安裝 ubuntu 還蠻有趣的,有時間可以在進一步的研究研究

Aug 28, 2008

Java 中文字型 on Linux

  1. Change to "/usr/lib/jvm/java-6-sun/jre/lib/fonts"
  2. Create a "fallback"
  3. ln -s /usr/share/fonts/truetype/arphic/uming.ttf /usr/lib/jvm/java-6-sun/jre/lib/fonts/fallback
  4. cd fallback; mkfontscale; 會產生 fonts.scale
  5. 把 fonts.scale 裡的字型資訊加到 fonts.dir; 第一行的 數字也需要一起更改

Feb 23, 2008

How to read a book

Ch2 : 閱讀的層次
1. 基礎閱讀(elementary reading) [Ch3]
2. 檢視閱讀(inspectional reading) [Ch4]
3. 分析閱讀(analytical reading) [Ch6 ~ 12]
4. 主題閱讀(syntopical) [Ch20]

Ch3 : 基礎閱讀
四個階段:
1. 閱讀準備階段(reading readiness)
2. 讀一些簡單的讀物
3. 從上下文所提供的線索,「揭發」不熟悉的字眼
4. 精練與增進前面所學的技巧

Ch4 : 檢視閱讀
1. 有系統的略讀或粗讀的六個步驟
1. 先看書名頁及序
2. 研究目錄頁
3. 簡閱索引
4. 出版者的介紹
5. 挑幾個看來跟主題相關的篇章來看
6. 東翻翻西翻翻,唸個一兩段,有時候連續讀幾頁
2. 粗淺的閱讀
1. 頭一次面對一本難讀的書的時候,從頭到尾先讀一遍,碰到不懂的地方不要停下來查詢或思索
2. 慢不該慢到不值得;快不該快到有損於滿足與理解

Ch5 : 如何做一個自我要求的讀者
1. 閱讀者要提出的四個基本問題
1. 這本書整體說來,到底在談些什麼? [Ch6 ~ 7]
2. 作者細部說了什麼,怎麼說的? [Ch8 ~ 9]
3. 這本書說得有道理嗎?是全部有道理,還是部份有道理? [Ch10]
4. 這本書跟你有什麼關係? [Ch11]
2. 三種筆記的方法
1. 結構筆記(structural note-making):重點是全書的架構,而不是內容
2. 概念筆記(conceptual note-making):讀同一主題書時,同時記下其它書籍的頁碼
3. 辯證筆記(dialectical note-making):針對一場討論情境的筆記

分析閱讀的三階段 [Ch6 ~ 12]
1. 分析閱讀的第一階段:找出一本書在談些什麼的四個規則 [Ch6 ~ 7]
1. 依照書本的種類與主題作分類。
2. 用最簡短的文字指出整本書在談些什麼。
3. 按照順序與關係,列出全書的重要部份。將全書的綱要擬出來後,再將各個部份的綱要也一一列出。
4. 找出作者在問的問題,或作者想要解決的問題。
2. 分析閱讀的第二階段,或找出一本書到底在說什麼的規則(詮釋一本書內容的規則) [Ch8 ~ 9]
1. 詮釋作者使用的關鍵字,與他達成共識。
2. 從最重要的句子中,抓出作者的重要主旨。
3. 找出作者的的論述,重新架構這些論述的前因後果,以明白作者的主張。
4. 確定作者已經解決了哪些問題,還有哪些是未解決的。在未解決的問題中,確定哪些是作者認為自己無法解決的。
3. 分析閱讀的第三階段:像是溝通知識一樣的評論一本書的規則 [Ch10 ~ 11]
A. 智慧禮節的一般規則
1. 除非你已經完成大綱架構,也能詮釋整本書了,否則不要輕易批評
2. 不要爭強好勝,非辯到底不可
3. 在說出評論之前,你要能證明自己區別得出真正的知識與個人觀點的不同
B. 批評觀點的特別標準
1. 證明作者的知識不足
2. 證明作者的知識錯誤
3. 證明作者不合邏輯
4. 證明作者的分析與理由是不完整的

[Ch12] 輔助閱讀
1. 相關經驗的角色:運用自已的經驗
2. 其它的書可以當作閱讀時的外在助力:閱讀與巨著相關的著作
3. 如何運用導讀與摘要
4. 如何運用工具書:字典與百科全書

[Ch20] 主題閱讀精華摘要
1. 觀察研究範圍:主題閱讀的準備階段
1. 針對你要研究的主題,設計一份試驗性的書目。你可以參考圖書館目錄、專家的建議與書中的書目索引。
2. 瀏覽這份書目上所有的書,確定哪些與你的主題相關,並就你的主題建立起清楚的概念。
2. 主題閱讀:閱讀所有第一階段收集到的書籍
1. 找到相關的章節
*瀏覽所有在第一階段被認定與你主題相關的書,找出最相關的章節。
2. 帶引作者與你達成共識
*根據主題創造出一套中立的詞彙,帶引作者與你達成共識 - 無論作者是否實際用到這些詞彙,所有作者,或至少絕大部分的作者都可以用這套詞彙來詮釋。
3. 釐清問題
*建立一個中立的主旨,列出一連串的問題 - 無論作者是否明白談過這些問題,所有的作者,或者至少大多數的作者都要能解讀為針對這些問題提供了他們的回答。
4. 界定議題
*界定主題及次要的議題。然後將作者針對各個問題的不同意見整理陳列在各個議題之旁。你要記住,各個作者之間或之中,不見得一定存在著某個議題。有時候,你需要針對一些不是作者主要關心範圍的事情,把他的觀點解讀,才能建構出這種議題。
5. 分析討論
*分析這些討論。這得把問題和議題按順序排列,以求突顯主題。比較有共通性的議題,要放在比較沒有共通性的議題之前。各個議題之間的關係也要清楚地界定出來。

Feb 18, 2008

有錢人想的和你不一樣

這本書的二大重點:「金錢藍圖」「財家檔案」,感覺跟過年時又在一次 review 的窮爸富爸所要表達的差不多,就是改變你對錢的想法與賺錢的方法

第一篇「金錢藍圖」:致富其實是一種心理遊戲。
第二篇「財富檔案」:則提供了有錢人與窮人不一樣的17種思考方式和行為。

有錢人相信:「我創造我的人生。」

窮人相信:「人生發生在我身上。」

有錢人玩金錢遊戲是為了贏。
窮人玩金錢遊戲是為了不要輸。

有錢人努力讓自己有錢。
窮人一直想著要變有錢。

有錢人想得很大。
窮人想得很小。

有錢人專注於機會。
窮人專注於障礙。

有錢人欣賞其他的有錢人士和成功人士。
窮人討厭有錢人和成功人士。

有錢人和積極的成功人士交往。
窮人與消極的人或不成功的人交往。

有錢人樂意宣傳自己和自己的價值觀。
窮人把推銷和宣傳看成不好的事。

有錢人大於他們的問題。
窮人小於他的問題。

有錢人是很棒的接受者。
窮人是差勁的接受者。

有錢人選擇根據結果拿酬勞。
窮人選擇根據時間拿酬勞。

有錢人想著:「如何兩個都要?」
窮人想著:「如何二選一?」

有錢人專注於自己的淨值。
窮人專注於自己的工作收入。

有錢人很會管理他們的錢。
窮人很會搞丟他們的錢。

有錢人讓錢幫他們辛苦工作。
窮人辛苦工作賺錢。

有錢人就算恐懼也會採取行動。  
窮人卻會讓恐懼擋住了他們的行動。  

有錢人持續學習成長。
窮人認為他們已經知道一切。

Jan 19, 2008

引用[電腦職稱縮寫]

常常看到bbs高科技工作版提到的一些縮寫,常常不知在講什麼,剛在yahoo 知識+找到以下內容

RD : 研發設計類的工程師
QA : 品質管理工程師
SQE: Supplier Quality Engineer 供應商品管工程師
IE : Industrial Engineer 工業工程師
TE : Test Engineer 測試工程師
EE : Equipment Engineer 設備工程師
EE : Electronic Engineer 電子工程師
OP : Operator , 作業員
QA : quality assurance engineer , 品保工程師
QE : quality (control) engineer, 品管工程師
QS : quality system engineer , 品質系統工程師
SQE: supplier quality engineer , 供應商品管工程師
ME : manufacturing engineer , 機製工程師
PM : Project Manager , 專案經理
PE : Product Engineer , 產品工程師
PE : project engineer , 專案工程師
PE : procurement engineer , 採購工程師
PIE: Process Integration Engineer , 製程整合工程
PC : Production Control , 生產控管
TF : Thin Film , 薄膜製程
ET : Etch , 蝕刻製程
LIT: Litho or Photo , 黃光製程
DF: Diffusion , 擴散製程
IE: industrial engineer , 工業工程師
MIS: 資訊管理人員
IE : industrial engineer , 工業工程師
IE : test engineer , 測試工程師
ID : Industrial Designer 工業設計師
CIM: Computer Integrated Manufacturing CIM工程師


Dec 20, 2007

一個好用的 Patch 管理工具 - quilt

先在目錄下 mkdir patches
  1. quilt new patchname #新增一個patch file
  2. quilt add filename #把要修改的 file 加入 top most patch 中,也可使用 quilt [vi] edit filename ,這樣就會幫你自動先 add 就直接建入 editor
  3. quilt refresh #updata your patch
  4. quilt remove filepath #把 此 file 的更改移出此patch
  5. quilt delete patchname #remove unapplied patch
  6. quilt push #將下一個patch file apply進來,或是全部的apply [-a]
  7. quilt pop #unpapply回上一個 patch,或是全部都unpapply [-a] 回去
  8. 一些 display 指令
quilt files #list files in patch
quilt diff #show patch
quilt previous, top, next #show previous, topmost, next patch name
quilt filename #list patches modifying file
quilt applied/unapplied #show applied/unapplied patch names
quilt series #list all patch names in series

我想,在配合下面這張圖應該就能很清楚的了解,他的使用


如果還不是很了解,可以看一下,下面這幾個連結 :)

Dec 16, 2007

screen capture with import

以前在windows時,都是使用 HyperSnap 而Linux下,一直沒去注意,是否有取代方案,剛剛google一下,發現,原來 ImageMagick裡早已有這樣的功能,我主要要求是可以讓我自已選譯 capture 的 region,於 ImageMagick 裡有一個名為 import 的工具,只需打 import {Filename}.{File format},螢幕就會出現一個十字, Draw 出一個 region 後會自動幫你存檔,真是太方便了 XD。
不過,要一直打 command 真的有點麻煩,有時我只想砍下我要的畫面檔名對我來說不是很重要,所以寫了一個非常簡單的 script
#!/bin/sh
/usr/bin/import $RANDOM.png
在加到 Gconf 中的快速鍵,哈,這樣使用起來比 HyperSnap 還要方便

Dec 13, 2007

我要看 海賊王 :)

前段時間,跟一位朋友聊到,平時到 ptt 都會逛那些好玩的板,中間他有提到 海賊版 ,之前無聊,把所有熱門的版加到 我的最愛裡,海賊版就是其中之一,也沒認真去逛過,只是覺的,一個卡通有那麼好閒嗎 = =“ (有也是海賊迷),昨天去認真小看一下,丫勒,原來熱門是因該有很多黑暗在,哈哈,這時又想起,我好像有快半年沒看海賊王了,下載了幾集試看看,發現,電 腦裡沒有 realplayer codec 試了把 win32codec 裝到 /usr/lib/win32 播放時,會出現下現錯誤,但是有聲音沒畫面,我一直以為,它在 /usr/lib/codecs 找不到 drvc.so 會換至 /usr/lib/win32 試看看,原來不會 - -“,只好在建一個 ln -s win32 codecs 這樣就沒問題了,哈,又可快快樂樂看海賊王了 :)
============== 下面是難看的 Error Output ====================
Opening video decoder: [realvid] RealVideo decoder
Error: /usr/lib/codecs/drvc.so: cannot open shared object file: No such file or directory
Win32 LoadLibrary failed to load: drvc.so, /usr/lib/win32/drvc.so, /usr/local/lib/win32/drvc.so
Error loading dll
ERROR: Could not open required DirectShow codec drvc.so.
Read the RealVideo section of the DOCS!
VDecoder init failed :(
Opening video decoder: [realvid] RealVideo decoder
Win32 LoadLibrary failed to load: drvc.dll, /usr/lib/win32/drvc.dll, /usr/local/lib/win32/drvc.dll
Error loading dll
ERROR: Could not open required DirectShow codec drvc.dll.
Read the RealVideo section of the DOCS!
VDecoder init failed :(
Opening video decoder: [realvid] RealVideo decoder
Error: /usr/lib/codecs/drv4.so.6.0: cannot open shared object file: No such file or directory
Win32 LoadLibrary failed to load: drv4.so.6.0, /usr/lib/win32/drv4.so.6.0, /usr/local/lib/win32/drv4.so.6.0
Error loading dll
ERROR: Could not open required DirectShow codec drv4.so.6.0.
Read the RealVideo section of the DOCS!
VDecoder init failed :(
Opening video decoder: [realvid] RealVideo decoder
Win32 LoadLibrary failed to load: drv43260.dll, /usr/lib/win32/drv43260.dll, /usr/local/lib/win32/drv43260.dll
Error loading dll
ERROR: Could not open required DirectShow codec drv43260.dll.
Read the RealVideo section of the DOCS!
VDecoder init failed :(
Opening video decoder: [realvid] RealVideo decoder
Error: /usr/lib/codecs/drvc.bundle/Contents/MacOS/drvc: cannot open shared object file: No such file or directory
Win32 LoadLibrary failed to load: drvc.bundle/Contents/MacOS/drvc, /usr/lib/win32/drvc.bundle/Contents/MacOS/drvc, /usr/local/lib/win32/drvc.bundle/Contents/MacOS/drvc
Error loading dll
ERROR: Could not open required DirectShow codec drvc.bundle/Contents/MacOS/drvc.
Read the RealVideo section of the DOCS!
VDecoder init failed :(
Cannot find codec matching selected -vo and video format 0x30345652.
Read DOCS/HTML/en/codecs.html!
==========================================================================
密碼被暴力破解時間表全面披露

剛剛想到,我常使用的密碼到底安不安全,上網google找到一篇文章 密碼被暴力破解時間表全面披露,不過本身自已對密碼學好無研究,就先相信一下他的資料吧。


在 “F級:1,000,000,000 Passwords/sec--大型電腦網路/超級電腦“裡,我的密碼還是有可能在83天被破解,這.....或許因該是考慮在加長我的密碼了 XD

Dec 7, 2007

一些關於測試的名詞

Unit test: 單元測試,針對某個component或method做的測試
Black box test: 黑箱測試
Unit test: 單元測試,針對某個component或method做的測試
Black box test: 黑箱測試,針對功能面來做測試
White box test: 白箱測試,針對內部實作的流程來做測試
Stress test: 壓力測試,測試系統的效能極限
Regression test: 回歸測試,當新功能增加的同時,會不會影響到舊功能的正確性
Integration test: 整合測試,兩個系統整合後有沒有錯誤
System test: 整個system跑起來後的測試
Alpha test: 開放內部測試人員做測試
Beta test: 開放給外部使用者做測試
Monkey test: 搞怪測試,盡可能惡搞來看系統穩定度
,針對功能面來做測試
White box test: 白箱測試,針對內部實作的流程來做測試
Stress test: 壓力測試,測試系統的效能極限
Regression test: 回歸測試,當新功能增加的同時,會不會影響到舊功能的正確性
Integration test: 整合測試,兩個系統整合後有沒有錯誤
System test: 整個system跑起來後的測試
Alpha test: 開放內部測試人員做測試
Beta test: 開放給外部使用者做測試
Monkey test: 搞怪測試,盡可能惡搞來看系統穩定度
Acceptance test: 測試系統或產品是否會滿足客戶的需求

Dec 6, 2007

Linux下的除錯工具

先記錄一下,有機會一定要試看看 :)

MPatrol : 記憶體除錯
http://www.cbmamiga.demon.co.uk/mpatrol/
OProfile : 系統負載低且全系統性的效能表現監視工具
http://rhn.uta.edu/pub/docs/RH-DOCS/rhel-sag-zh_tw-3/ch-oprofile.html
http://oprofile.sourceforge.net/
LTTng : LTTng is the kernel tracer that generates traces of an instrumented Linux kernel. LTTV is a modular viewer that can perform analysis on such traces and show the result in text or in a graphical interface.
http://ltt.polymtl.ca/
DevRocket : 結合了上面三個的商業套件

Dec 4, 2007

Gnome hotkey

剛想設定習慣的HotKey時,發現怎麼有麼東西在 Keyboard Shortcuts 工具裡找不到,如:我開了六個 workspace 但卻只能設定 前二個的 HotKey,後來發現,原來也可以直接在 gconf-editor -> apps -> metacity 修改就可以了 :)