bloggerads

2018年5月24日 星期四

工欲善其事必先利其器, Code Editor

好久沒更新了!

講到Trace code, 就不能不討論Code Editor。我覺得問題常出現在細節上, 如 寫code 改code 讀code, 常常效率不佳,除了程式寫得少以外,有很大一個原因其實是工具不熟或不好用。

去年跳來外商後,這裡的人大部分都是工作多年且從不同地方挖角進來的, 所以大家都有各自的工作方式和喜歡用的軟體,不像以前台商公司清一色都是剛畢業的學生然後都用盜版的source insight。

目前我看到大家用的code editor有:
GUI Base: 微軟的Visual Studio Code、Eclipse、UltraEdit、Notepad++、Source Insight,Sublime text

Terminal Base: GVim、Vim、VI

上面Source Insight/Ultra Edit/Sublime text是要$$ 的,  我們公司有買Source Insight的帳號,可是大家似乎不怎麼愛用

我自己的話是Notepad++的愛用者, 愛用這個Notepad++的原因除了主要作者跟我一樣是台灣人(侯今吾/Don ho)以外, 他的plug-in 擴充一下可做到上面所有editor的功能。

介紹我常使用的Notepad++強大功能和plug-in:
  • 快速的在bookmark位置跳躍
  • 點兩下變數/函數名,可highlight整個檔案所有的變數/函數
  • 透過sourceCookifier plug-in, 可將變數/函數tag化, 快速搜尋
  • 透過Location Navigate plug-in, 可跳到之前瀏覽code 的位置
  • 透過NppExec plug-in, 可把terminal放到editor中
  • 透過HEX-Editor  plug-in, 可讀取bin file
功能太多了,趕快去下載來玩吧!
Notepad++的官網: https://notepad-plus-plus.org/

2017年10月3日 星期二

Python : struct

這篇說明 Python 要如何像C/C++一樣,將struct資料以binary的形式寫入檔案。
參考以下範例:

#! python2
""" Author: Martin Lee """
import struct
with open('out.bin','wb') as f:
    f.write(struct.pack('B8sHHL', 22, 'Hi World', 1, 2, 0x3322))

fin = open("out.bin", "rb")
i = struct.unpack('B8sHHL', fin.read())
fin.close()

2017年9月17日 星期日

Python : 使用 py2exe 打包 py檔成執行檔

Windows下將py檔打包成執行檔, 以python 2.7為範例

基本上是參考 http://www.py2exe.org/index.cgi/Tutorial

試過import 第三方模組、內建的GUI 模組(Tkinter)、自定義的模組, py2exe 都能打包。以下是流程:

1.安裝 py2exe

2.在要打包的py檔目錄下,新增一個'setup.py'檔,其內容為
  • from distutils.core import setup
  • import py2exe
  • setup(console=['要打包的檔名.py'])
3.python setup.py py2exe

4.會在同目錄下產生兩個資料夾,其一個新增的資料夾'dist'內會產生一個同檔名的exe檔

Linux下將py檔打包成執行檔, 以python 2.7為範例

1. 安裝 pyinstaller (pip install pyinstaller)
2. pyinstaller --onefile filename.py
3. 在同目錄下的dist資料夾內產生可執行檔 filename

2017年9月14日 星期四

Python : JSON

鑒於JSON愈來愈普及, 連我們家生產SSD過程的數據未來都要求使用JSON的格式,因此特別在這篇做個紀錄, 了解JSON以及如何用Python處理JSON。  

了解 JSON 的 format可以從這個
網站開始: http://jsoneditoronline.org/



#  JSON的規則:

1.  key:value
2.  value 型態可以是 數字, 字串, 布林, 陣列[], 物件{}, NULL, 但key一定是要字串
3.  同一個物件內的key不可重複, 如以下的 Age 就重複了
{
    "Martin": {
        "Age":33,
        "Age":5,
     }
}

2017年9月10日 星期日

Python : regular expression

re module的一些紀錄, 持續update

### Common use of the regular expression

\w   [a-zA-Z0-9_]
\d    [0-9]
\s    space
\\     '\'
.       ''
+     1 or more than 1
.\     everything

### Code

>>> import re
>>> string = 'Age=20'
>>> re.search('\d+', string).group()
20

>>> import re
>>> string = 'Beautiful, is; better*than\nugly'
>>> # 分隔符號:,  ;  *  \n
>>> list= re.split(',|; |\*|\n', string)
>>> list
['Beautiful', 'is', 'better', 'than', 'ugly']

2017年9月5日 星期二

Python : Combobox 範例

距離上次Python文,不知不覺又過了兩三個星期了。 時間過得真快,這段時間除了工作外,還去了花蓮玩兩天! 雖然工作上每天都在改code, 但使用到Python的機會很少,本著學海無涯,惟勤是岸的精神,隔一段時間就來po 一下,以免生疏了。今天介紹Combobox,搭配Button作範例,話不多說,馬上端上code:

#! python2
# coding: utf-8

import Tkinter as tk
import ttk   

def clickOkButton():
    print 'Select ' + str(numberChosen.current()) # 丟出選到的index number

win = tk.Tk()
win.title("Python Combobox example") 

2017年8月14日 星期一

Python : 透過字串與數字轉換來做"進制轉換"

所有的非10進制數字都要以字串的型式表達而數字一律是10進制表示

因此進制轉換就只是字串轉數字或數字轉字串的差別。以下就針對這兩種狀況來說明。

● 字串轉數字

>>> int ('0x10', 16)  #必須告訴直譯器字串是哪種進制
16