2019年6月18日 星期二

UEFI X64 Exception

UefiCpuPkg\Library\CpuExceptionHandlerLib\X64\ArchExceptionHandler.c 
Line 121 

Git Command

Create Diff Patch
git format-patch --full-index -o "file_pathmaster 

Branch related 
  1. Create branch 
Git branch XXX 
  1. Switch to branch 
Git checkout XXX 
  1. Merge branch 
Git merge XXX 
  1. Get remote branch code 
Git checkout origin/XXX 
  1. Create remote branch 
Git push –u origin XXX 
  1. Reset local modification (un-commit) 

Git checkout filepath\filename 

Reset related
  1. Reset local modification (un-commit) 
Git checkout filepath\filename 
  1. Fix add wrong file 
Git reset 
Git reset filepath\filename 

2016年10月17日 星期一

vim buffer tips

vim的設定已經好一陣子沒有動了,不過有一個小問題一直著困擾我。

那就是在vim中用:ACK找出關鍵字之後開啟的quickfix視窗也算是一個buffer,這樣在使用熱鍵持續切換buffer的時候會變成quickfix的內容顯示在主要視窗裡,然後就會害我關錯視窗,非常惱人。

最近本來想說要開buftabline的原始碼自己試著改改看,不過動手之前還是先google看看有沒有人遇到一樣的問題,然後就找到了這篇

裡面提到使用:if &buftype ==# 'quickfix'可以判斷出是否為quickfix buffer然後就直接再切一個buffer。

再配上我自己用的熱鍵F9/F10 (上一個buffer/下一個buffer)就設成這樣。
map <F10> :bnext<CR>:if &buftype ==# 'quickfix'<Bar>:bnext<Bar>endif<CR>
map <F9>  :bprev<CR>:if &buftype ==# 'quickfix'<Bar>:bprev<Bar>endif<CR>

雖然切buffer還是會有點看得出來是先顯示quickfix再切下一個buffer,不過我覺得還算堪用。

2016年7月4日 星期一

What is the Redfish in BMC?

最近工作需要所以研究了一下。

簡單的說就是網管們已經不想要再用ipmitool下指令給BMC去看伺服器的狀態,每次都要輸入一堆參數,打完感覺很飽這樣,為了不想要這麼飽甚至還寫了一堆腳本去下指令。

現在已經是21世紀,什麼東西都要很先進才行(傻子才一直用終端機下指令),所以業界就訂了這個規格出來說:那就在BMC裡面放個RESTful架構的伺服器,然後提供透過HTTP提供web API,傳遞資料的格式就用JSON,讓你們想要什麼,就可以做什麼~於是乎Redfish就訂出來了,網管們表示非常開心

這樣某些公司就可以跟伺服器廠商買有支援Redfish功能的伺服器,再找Front-end工程師來客製化符合公司需求的網頁,然後再找iOS app工程師跟Android app工程師來客製化符合網管們需求的應用程式,提高就業率

RESTful有不少中文網站在介紹,而Redfish就很少資料,希望我這篇文章有幫助到大家。

參考資料:
https://www.dmtf.org/standards/redfish
https://tw.twincl.com/@arthurtw/*641y
http://www8.hp.com/us/en/products/servers/proliant/restful-interface-tool.html

2016年6月24日 星期五

[SVN] Commit solution, but author is not me!

今天下午用另一台不常用的工作站加了兩次程式碼進到SVN伺服器,不過看Log卻發現兩次的Author是另一位同事,上Google搜尋了一下卻沒找到答案。
自己在這邊卻看到三個亂數名稱的檔案
 $ls ~/.subversion/auth/svn.simple  
因為通常登錄伺服器都是用同一組帳號密碼,三個這種數字怎麼想都是有點問題。
所以把他們通通刪了
 $rm ~/.subversion/auth/svn.simple/*

再隨意加個檔案測試一下,果然Author就正常了。 OS: Ubuntu 12.04 Tool: svn 1.6.17 (r1128011)

2016年5月12日 星期四

Vim 256 color

之前在這邊,看到有人有好心人貼了能印出256色的Python程式碼。
我改了一下讓它可以一次印多行而不要一口氣印完。

話不多說先上圖。










程式碼在這邊,可以修改第三行row的值來更改一次印出的行數。
有了它拿來改vim的配色就很好用。
 #!/usr/bin/env python  
 row = 16  
 colornums = 256  
 for i in range(1, colornums / row):  
     for j in range(row):  
        color = i + ((colornums / row) * j)  
        fgstr = "\033[38;5;%03dm%03d"%(color, color)  
        bgstr = "\033[48;5;%03dm%03d"%(color, color)  
        if j == (row - 1):  
            print fgstr, bgstr, '\033[0m'  
        else:  
            print fgstr, bgstr, '\033[0m',  

這邊就不討論怎麼上色,玩過BBS的人應該都會

 print "%03d"%(color)  
這樣印出數字color並且會把不滿3位數的部分補滿0。

 print "abc",
後面加的逗號","可以讓輸出不自動換行。

2016年4月20日 星期三

LeetCode Algorithms Problems by Python

這兩天剛開始玩,重點是[Run]的時候只會給一組測試資料,[Submit Solution]會跑不只一組測試資料,所以沒考慮到所有的Case就會遇到[Run]沒問題,但[Submit Solution]卻一直過不了的情況。

這邊大概只會列一下重點,就是沒搞清楚會卡住的點。

1. Two Sum

用一個list來存找到兩個數的index。

2. Add Two Numbers

輸入會是兩個linked list,每個node的值會是非負的整數,把值相加之後取個位數,進位則加到下一個node的值裡。
 Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)  
 Output: 7 -> 0 -> 8  
所以第三個node的運算結果才會是8。

題目沒講的還有一點,就是如果輸入改為
 Input: (2 -> 4 -> 3) + (5 -> 6 -> 7)  
那輸出會是
 Output: 7 -> 0 -> 1 -> 1  
4+6進位1再加進3+7為11,要再取餘數,然後把進位存到下一個node裡。

小提示:要先建一個head = ListNode(0),再進迴圈去把l1.val跟l2.val做運算存起來,所以回傳的時候是回傳head.next。

3. Longest Substring Without Repeating Characters

用for迴圈去產生字串然後做運算的話會很難寫,這個題目我是利用python的字典型態(dict type)去記錄已經遇過的英文字母。
最困難的部分應該是遇到重複的字母時該如何去重新計算目前字串的長度,我在這個部分卡了很久。

5. Longest Palindromic Substring

首先要知道什麼是迴文(Palindromic),簡單說就是從中間切開,頭尾對應位置的字相同的句子。
 aabaa  
 aabb  
 gabcbag  
像是上面三個例子,分為有中間字與無中間字的兩種類型。

這題真的是花了我很多時間也想了很久,我沒有使用動態規劃(dynamic programming),而是從頭以每個字母為中心向外延伸找出最大迴文。全部跑完會有超過時間的問題,所以我有加了一些判斷去縮減執行次數。因為寫不出來一次就能同時判斷有中間字跟無中間字所以我還爬了兩次字串,希望之後能想出只跑整個字串一次的寫法。

226. Invert Binary Tree

會開始寫LeetCode主要是看到這篇文章"雖然我們公司 90%的工程師都用你開發的工具,但我們還是不聘用你",這件事告訴我們演算法是很重要的,就算你開發了很棒的軟體,演算法很差還是進不了Google!所以才出現了這個反轉二元數的題目。

用迴圈來做的話可以用root.pop(0)來一個一個取出node,把找到的左右node用root.append(node)加到queue裡面。
用遞迴來做就是一直往下層找,找到盡頭之後再回上一層去另一邊鑽然後把左右值交換。
兩種都會用得到下面這個運算,可以直接換值。
 root.right, root.left = root.left, root.right