2015年6月22日 星期一

GCE - 收到"insufficient permission"訊息

在Google Compute Engine中操作gcloud指令時,
如果收到"insufficient permission"訊息,
請先輸入
$gcloud auth login 
 ,接著根據訊息操作,
就能正常原本想要操作的指令。

2015年6月14日 星期日

Linux - 查詢系統資訊

查詢系統位元

$file /bin/bash

查詢kernal版本

$uname -r

查詢系統版本

$cat /etc/issue

2015年4月9日 星期四

C語言 - 清空stdin

不能使用fflush(),無效。
要使用
int c;
while((c = getchar()) != '\n' && c != EOF);

2015年3月24日 星期二

Python - int, hex, char, string的轉換

  • Int to Hex
    hex(97)  # '0x61'
  • Int to Char
    chr(97)  # 'a'
  • Int to String
    str(97)  # '97'
  • Hex to int
    int('0x61', 16)  # 97
  • Hex to Char
     chr(int('0x61', 16)) # 'a'
  • Hex to String
     string = '61626364'
    ''.join(chr(int(string[i:i+2], 16)) for i in range(0, len(string), 2))  # 'abcd'
  • Char to Int
    ord('a')  # 97
  • Char to Hex
    hex(ord('a'))  # '0x61'
  • String to Int
    int('97')  # 97
  • String to Hex 
    string = 'abcd'
    ''.join([hex(ord(x))[2:] for x in string])  # '61626364'

2015年1月26日 星期一

Python - Unique list

map的key不允許重複,list的element可以允許重複,set的element不允許重複。
基於上述資料型態的特性,要將list變成unique list可以利用set。
sample = [1,2,3,1,2,3,4,5]
sample = list(set(sample))  # [1,2,3,4,5]

2015年1月22日 星期四

Python - fork

Python使用fork可以讓process從呼叫的那一刻起一分為二。
import os

def myFoo(num : int) -> int:
    loop_times = 0
    print('start pid', os.getpid())

    f = os.fork()

    if f == 0:
        # child process: num*(3^5)
        while loop_times < 5:
            num *= 3
            print('child', os.getpid(), loop_times, num)
            loop_times += 1
    else:
        # parent process: num*(2^10)
        while loop_times < 10:
            num *= 2
            print('parent', os.getpid(), loop_times, num)
            loop_times += 1
    return num

def main():
    print('pid', os.getpid(), myFoo(2))
    print('pid', os.getpid(), 'finish')

if __name__ == '__main__':
    main()
實驗的執行結果為:(請注意,每次執行的pid和印出來的順序會不同)
start pid 5653
parent 5653 0 4
parent 5653 1 8
parent 5653 2 16
parent 5653 3 32
parent 5653 4 64
child 5654 0 6
parent 5653 5 128
parent 5653 6 256
child 5654 1 18
parent 5653 7 512
child 5654 2 54
parent 5653 8 1024
child 5654 3 162
parent 5653 9 2048
child 5654 4 486
pid 5653 486
pid 5653 2048
pid 5654 finish
pid 5653 finish
在f = os.fork()這一行,parent process #5653呼叫os.fork(),呼叫後傳回child process的pid #5654給parent process的變數f,而child process誕生於呼叫os.fork()後,在child process中也會傳回值給變數f,但是因為child process並沒有從呼叫os.fork()開始,所以傳回的值是0。至此之後,所有的expression都一分為二,parent process和child process都各自有一份並進行動作。

上述例子中,還有一處值得探討的是print('pid', os.getpid(), myFoo(2))這一行輸出的結果
pid 5653 486和pid 5653 2048,執行輸出動作都是parent process,但是輸出內容有parent process從myFoo()回傳的2048和child process從myFoo()回傳的486。原因是,parent process呼叫print(),當print()進行到一半時跳到myFoo()之中,在myFoo()中呼叫os.fork()從此一分為二,parent process執行完myFoo()後回傳給呼叫myFoo的process,也就是parent process,child process執行完myFoo()後回傳給呼叫myFoo的process,一樣也是parent process,所以才會輸出pid 5653 486和pid 5653 2048;print('pid', os.getpid(), 'finish')這一行是在一分為二後才會進行的,parent process和child process個別進行,才會輸出pid 5654 finish和pid 5653 finish這兩行。

 

2014年12月25日 星期四

Visual Studio - 調整方案組態控制項的寬度

開發環境:Visual Studio 2013

事件狀況:Visual Studio的工具列有很多控制項,其中的方案組態(Solution Configurations)預設寬度太小,只適合組態名稱Debug/Release使用,如果有自訂的組態名稱,容易顯示不完整。

解決方法:
  1. 開啟自訂命令表單,從工具(Tool)→自訂(Customize)→命令(Commands)→工具列(Toolbar)→標準(Standard)。
  2. 在控制項中(Controls)選擇方案組態(Solution Configurations)。
  3. 點選修改選取範圍(Modify Selection)。
  4. 預設寬度(Width)是65,可以調整到更大的寬度。
其他一樣屬於下拉式選單(ComboBox)的控制項的寬度都可以用這種方式做調整。