發表文章

pull(拉收)/push(推送),mercurial 跟 git 的不同

pull / push ,是分散式版本控制系統的指令 對於mercurial 中,執行pull 操作,把對方的changesets 抓回來時,"預設"不自動進行merge.抓回來的changeset 中如果有新的分支,pull 後自己的儲存庫就會多出一個新分支,名字跟遠端的那個新分支一樣.若是changeset是某一個支線的變更,則mercurial 會在那個支線生出新的head.push 也是一樣的作法.這樣一來,你就必須自行檢驗一下抓回來的changeset 內容,然後自己merge,這樣的機制提供了一個檢驗跟反悔的機會.當然也得出比較多的工 而git 的pull ,預設是會自動merge的.push 也是一樣,預設會進行merge.所以你可以聽到看到很多git 的教學網站/前輩,都呼籲大家在git 環境裡,謹慎的使用pull/push 指令,因為一旦merge 時產生衝突,反而得花更多的工在解決衝突,建議是先用fetch 指令.git 的fetch 指令,會先把遠端的changeset 抓回來,抓回來的changeset 會開一個新分支暫放,你可以切換到新分支檢查與驗證抓下來的changeset,有信心後再將這個分支merge 到你本身.

(x86)有關bootloader 過渡到kernel之間的一些資料紀錄

原來 bzImage 是由setup.bin 跟 vmlinux.bin 綁起來製作而成的 可以使用以下關鍵字查詢更詳細的資料 google://"bzImage" "vmlinux.bin" "setup.bin" vmlinux.bin 就是整個linux kernel 的壓縮實體.setup.bin 則是負責在配置一些在執行vmlinux.bin之間該要做的硬體環境設定.沒錯,setup.bin的角色很像u-boot的一部分功能 Grub or Lilo 這類bootloader ,都會聰明的把setup.bin 跟vmlinux 分開,setup.bin 放在0x90000處,vmlinux.bin放在0x100000位置.詳細的分開知識,可以查詢 google://"grub" "0x90000" "0x100000" setup.bin 的實際工作內容,可以查詢 google://"header.S" "setup.ld" 對於要開發bootloader 的地球人來說,以上都是必備知識

(ARM) bootloader 怎麼把kernel參數傳送給kernel.

首先,該看一下以下網址 http://www.simtec.co.uk/products/SWLINUX/files/booting_article.html 或者是Kernel 內附的文件 Documentation/arm/Booting ---------------------------------------------------------- 以下是個人心得 Arm 版本不是使用setup_header結構,而是一個所謂ATAG 的結構佇列,bootloader需要自行在記憶體中建立一個ATAG佇列.這個佇列的的開始位址,在bootloader 開始執行kernel的start code 前,放在Arm CPU 的R2暫存器內.(R1暫存器放機器型別代號) 每一個ATAG結構塊,都會有一個旗標顯示這個結構塊是屬於哪一種類型的ATAG ,像有ATAG_CORE壓,ATAG_MEM壓,ATAG_INITRD2等.一看名字就知道要幹嘛. 當我要把initrd/initramfs 的位置告訴kernel時,就可以利用ATAG_INITRD2這類型的ATAG.當我要把kernel command line 告訴kernel時,就可以利用ATAG_CMDLINE

(x86)bootloader 怎麼把kernel參數傳送給kernel.

一樣的,在setup_header 中,有一個欄位是cmd_line_ptr.這個欄位即是儲存了kernel 參數的C型態字串(就是0結尾拉),當然,在x86 old BIOS中,bootloader只能存取1M以下(真實模式嘛),所以cmd_line_ptr紀錄的也是真實模式的位址 好了,一樣可以參考Documentation / x86 / boot.txt

是bootloader 負責告訴kernel initrd/initramfs 在哪邊

bootloader 的功能就是把copy kernel image,copy initrd/initramfs 到記憶體,還有kernel 參數放到記憶體,然後執行kernel.可以這麼說. 找出initrd/initramfs image    copy initrd/initramfs image 到記憶體 的工作,都是bootloader 負責 所以當bootloader 完成以上的工作時.bootloader 就要把initrd/initramfs 所處的記憶體位置告訴kernel. linux kernel 文件中對於這部份有一個專門文件,詳細指示開發bootloader的人類該怎麼做.這文件叫' boot protocol ',你可以 google://linux kernel boot protocol 來研讀這份官方文件. 有關中文的介紹部份,以下兩個連結值得參考 http://sakbk.pixnet.net/blog/post/30315621-initrd-and-initramfs http://blog.csdn.net/cherryloo/article/details/2096682 為免以上兩個連結失效,我將研讀的心得寫下來: --------------------------------------------------------------------- kernel code 中定義了一個 setup_header 結構( arch/x86/include/asm/bootparam.h).這個結構中有兩個欄位專門紀錄initrd/initramfs 的記憶體位置.當kernel 編譯完成後,此結構的位置會 固定 在zImage(or bzImage)檔案的最開頭位置(可詳閱header.S 這個檔案). 首先,bootloader copy kernel image 到記憶體,接著bootloader再copy initrd/initramfs image 到記憶體中.然後bootloader就把記憶體位置寫到setup_header結構記憶體中的兩個欄位. 最後,bootloader 跳躍到kernel 開始,開始執行kernel. 就這樣

[備忘]一些有關加碼的私測心得

如果不限制加碼口數,口袋也夠深,核彈打下來都不會賠光的話,那麼一直不停的加碼下去會是比只加碼到一定口數就停止的策略來的好.當然! 現實生活是,因為錢不夠,或是擔心風險,或是其他屌毛原因,一定會被限制最大口數(俗話就是滿倉啦).那麼會有幾種狀況產生 1)出手加碼的單位越小,加碼次數越多,每趟獲利會越低,但每趟的最大虧損也會有越低的趨向,勝率會有下滑的趨向.有時候盤整太久,虧損的趟數太多,最大連虧有是可能比(2)還多 2)出手加碼的單位越大,加碼次數越少,單趟獲利會越高,但單趟虧損也會非常高,除非是勝率很高,否則最大連虧會非常驚人 要怎麼選1 or 2 ? 加碼的單位與次數該怎麼調?就看口袋深度囉

混沌,碎形,股價

以下說法為自行研究,未嚴謹證實之理論,寫在這裡只是為了筆記 股市,或是任何交易,可以化約為一個非線性動力系統(基於供需原理),既然是非線性動力系統,就跟混沌扯上關係. 將每筆成交的交易價格逐一記錄下來,就是這個非線性動力系統的相空間.這個相空間顯示了一個奇異吸子,一個碎形.所以股價圖(K線圖)就是一個碎形 不論你用任何時間尺度去觀看股價變化,都會看到股價圖大致上呈現類似的圖形,1分K的K線圖跟月K線圖長得樣子基本上很像,有上下震盪(趨勢)的時候,也有平靜(盤整)的時候,如果你願意,可以把平靜的區間再加以更細的時間尺度去看,仍然可以看到上下震盪與平靜交互顯現 既然已經做出"股價圖有碎形特性"的假設,那麼,依據此假設,任何追蹤形股價策略(均線策略,通道策略,追蹤形技術指標)再任何時間尺度下都是有效的,用在分K圖有效,用在周線圖自然也有效,用在月線圖也有效