|Tools| Git v.s Repo

一般跟別人合作開發都是使用 git。那 repo 是什麼?
repo 是 Google 開發出來的工具,用來管理 Android 的。

一份 Android code 是由許多 project 組成的,每個 project 就是一個 git project。
repo 這個工具,就是可以管理 branches 以及眾多的 git project!

> repo init 後,可以找到 .repo/manifest.xml 這會記錄你控制的 projects

*基本工作流程與對照:

repo git
repo init -u URL -m ooxx.xml -b remote_branch git clone URL
repo sync -c git pull URL remote_branch:local_branch
repo start branch_name –all git branch branch_name
git status git status
git add git add
git commit git commit
repo upload . git push


*git 好用指令:
 > 查詢遠端的server 位置及名字
 git remote -v
 > 新增一個遠短 server
 git remote add {given_name} URL
 > 強迫 reset
 git reset –hard {local_branch}
 > 把 commit 推到遠端 branch
 git push {given_name} {local_branch}: refs/for/{remote_branch}
 > 從遠端 branch 拉 code 下來
 git pull {given_name} {remote_branch}:{local_branch}
 > 當前一個修改已 commit,又想把這次修改跟上一個修改一起 commit
 git commit –amend
 > 想上 patch 到某個已經 push 出去的 change
 git push {given_name} {local_branch}:refs/changes/{change_id}
 > 查詢某行的歷史
 git blame -L [行數] [檔案名]
 > 檢別 branch 的 commit 到目前的 branch
 git cherry-pick [sha-1]

*好用的配置
 > git commit 的模板:
 新增一個  ~/.git-template
 然後 git config commit.template ~/.git-template

 > 設置reviewers, git push rest,就會自動帶上 reviewers
 到 .git/config 編輯
 [remote “test”]
 pushurl = ssh://account@server_address:port/project_name
 push = {local_branch}:refs/for/{remote_branch}%r=someone1@mail, r=someone2@mail

*製作 patch,打 patch
 (在 branch A)
 git log
 git format-patch -1 [sha-1]
 mv ooxx.patch ~/
 (換到 branch B)
 git am [~/ooxx.patch]


值得注意的是:
pull 的 server / review 的 server / push 的 server 可能不同,
設置 push 的 server 時,請去確認 repo upload 時,到底是推到哪?


ref. [Coding] repo & git 的使用方法

|Design| bit map

如果你的某個宣告有多重意義,
但你一次只想知道某的欄位的狀態,可以善加利用 bit map

舉例:

#define status1 (uint_8) 1<<0
#define status2 (uint_8) 1<<1
#define status3 (uint_8) 1<<2

uint_8 test_case = 2;
int test_hex_case = 0xFA;

If( test_case & status1 ){ // false; 00000000 <- 00000010 & 00000001
  //do nothing
}
If( test_case & status2 ){ // true, not zero; 00000010 <- 00000010 & 00000010
  //do something
}
If( test_hex_case & status2 ){ // true, not zero;
// 0xFA = 1111 1010
// 00000010 <- 1111 1010 & 00000010
  // do something
}

|Jobs| 面試時的 Check Points

設定:
軟體工程師,非管理職
製造業/電子業
系統廠/ IC設計通用


(關於出差)
是否出差到工廠
出差頻率如何
出差地點是否為亞洲
出差膳雜費是實報實銷還是算天數
 ==>
 通常亞洲/工廠,如果頻率很常,要小心啦!
 基本上,實報實銷的一定是小氣公司

(關於加班)
平均部門下班時間
是否有加班費
 ==>
 請算好你的時薪 = 月薪/8/30
 如果沒有加班費,算法就是 = 月薪/常態上班時數/30
 每加薪 3000,相當於你時薪增加 12.5元
 我自己算法:每需要常太多工作一小時,月薪要增加至少 10000元 (沒加班費的公司)

(關於客戶)
是否有AE
是否有 issue tracker 系統


(關於debug)
是否有公版或模擬器
是否有自己的 log tool

(關於維護期)
案期多長, support期多
 ==>
 當你曾經接過 10年前的臭蟲,你就明白為何要問這個

|Jobs| 利用 Samba 建立虛擬機與本機共享資料夾

環境
虛擬機:Virtual Box
主系統:Windows 10
子系統:Ubuntu 18.04

假設你網卡已經設定好且能在虛擬機利用主系統網路上網!
以下開始設定 Samba 共享資料夾!

Part 1. 在子系統的 Ununtu 裡面
Step 1. 固定子系統的 IP
    ifconfig
    找到 host-only 網路的那張網卡,設定固定 IP!
    因為 host-only 預設網段是192.168.56.0,
    因此 IP 設定上也要在同一個網段之下。
    sudo gedit /etc/network/interfaces
     auto 網卡名稱
     iface 網卡名稱 inet static
     address host-only網卡的IP
     netmask 255.255.255.0
     network 192.168.56.0

    reboot

Step 2. 安裝與設定 Samba
    sudo apt-get install samba smbclien    
    sudo gedit /etc/samba/smb.conf
     加入以下設定
      [Share]
      path = /
      public = yes
      writable = yes
      read only = no
      valid users = YOURNAME
      force create mode = 777
      create mask = 0777
      directory mask = 0777
      delete readonly = yes
      guest ok = yes
      available = yes
      browseable = yes

Step 3. 設定從 Windows 登入的密碼
     sudo smbpasswd -a YOURNAME

Step 4. 測試/etc/samba/smb.conf是否有問題
     sudo testparm

Step 5. 重啟Samba,使以上設定生效
    sudo /etc/init.d/smbd restart


Part 2. 在主系統的 Windows
Step 1. Ping 一下 Ubuntu
     ping host-only網卡的IP

Step 2. 到本機點右鍵
    連線到網路磁碟機,輸入 host-only網卡的IP
    記得兩個勾勾都要勾哦!
    讓它能用其他方式連線(程式自己會去找)

以上,感謝同事支援,之前我都直接用 Native Linux。

|Jobs| 50個面試相關的問題

這50個面試的問題常見於外商,台灣(甚至是亞洲?)可能不是這玩法。
所以 …… 請自行斟酌。

在第一次轉職時,其實就有面幾間外商。
我覺得自己英文履歷寫得還不錯,但是進到面試好像就卡關了。
(因為履歷不錯才有很多面試機會,我自己是這樣認為,哈哈)

不知道何時收集到了一個有趣的文章:Top 50 Job Interview Questions

<心態與原則>
1. 如果我是面試官,我會覺得 Layoff 很正常,所以面試者不用太擔心這。
 直接說明原因與公司策略即可。
2. 下一份工作薪水至少要 原本年薪 *1.15 以上,最好是要加到 20%
 開價原則(假設有保14個月):
 新的月薪 = 現在的整份*1.2/14

<一定要準備的>
Why Should We Hire You?
這題回答的方向,如果是技術職主要就從技術面與戰績。進階一點的,如果是相關產業互跳,就可以點出對方需要的,以及自己能提供的。(在不違反智財的狀況。)
Describe your career goals.
通常會分長短期來回答,但我會希望自己加上一些"核心思想"。
譬如說:
對我來說,能幫助到同事、改善工作環境、提高軟體品質,就是我的工作目標。
那短期來說,是要成為專精領域優秀的工程師,解決產品的問題。
長期來說,我希望自己提升廣度與視野,並在工作有閒之餘,開發好用的工具幫助大家,讓工作環境進入正循環。
以上是我的職涯目標:學有專精,並且對於案子方向及團隊合作模式有更全面的了解與幫助。
Do you prefer to work alone or on a team?
團隊合作。這種時候一定會要回答:為什麼?
為什麼呢?
一個好的產品需要大家從不同角度去精進,一個人顧及的層面比較不足。
(這邊提的點比較負面,不知道有沒有正面的回答方式?)
How much do you expect to get paid
大膽的講,給不起就不要去了。
How would you describe yourself?
這題我的答法應該會跟職涯呼應。
喜歡解決問題,幫助別人,藉此獲得成就感。

Ref. https://www.thebalancecareers.com/top-job-interview-questions-2061228

|Design| C++ getInstance

如果你要獲取特定的物件

就可以使用 getInstance()

這樣比全域變數看起來舒心一點

e.g. ————————————————————————

// test.h
class SomeService
{
public:
static SomeService &GetInstance();

}

// test.cpp
SomeService& SomeService::GetInstance()
{
static SomeService instance;
return instance;
}

————————————————————————


Ref. https://blog.csdn.net/fanyunda1988/article/details/51516930

|RIL| 建了 data 之後 ……

有了 APN,Modem 建了 data 之後會發生什麼事呢?

會長出網卡 ~~
可以使用 ifconfig 查看

別忘了設定 default route
route add default gw {IP-ADDRESS} {INTERFACE-NAME}

以及 DNS,才能用網域找到 ip
sudo echo nameserver 8.8.8.8 > /etc/resolv.conf

WordPress.com.

Up ↑