發表文章

android X 是什麼

圖片
AndroidX 出現一陣子,隨著android版本的更新,看來 GOOGLE 未來是鐵了心要強迫大家用androidX了。到底android X是什麼。 android 開始的時期,是微軟稱霸的時期,所有作業系統都很難有一片天地。在APPLE手機出現之前,智慧手機還是一片安裝微軟系統的陽春機。我們說他陽春是因為軟體的開發者並沒有想象或是去感受一個可攜裝置的未來與使用方式。所以做出來的手機難用至極。這也導致了APPLE IPHONE一出現就席卷了整個世界。我還記得朋友拿iphone3在我面前擺弄的樣子,就像一個小孩發現了好玩的玩具一樣。 此時的google看到了手機市場,也推出了以android為作業系統的手機,這個時期最悲悽的就是NOKIA了。沒有跟上這個潮流,一下子就從天上跌到了海溝裡。在重力加速度的加持下,速度之快,直接深埋在海溝之中。 此時的android也沒有想過,智慧手機的進展會如何。還一堆人在討論,五吋手機太大了,未來一定還會縮小。也一堆人在討論,手機只會越來越大。今天看來,沒有想象力的人們,能討論的只是當下的問題。今天還有人在討論手機未來大小如何嗎?現在討論的是要如何人性化,更好用,更省電,更好一手掌控。 自然在android 3 的時候,為了平版,android加入了fragment功能,讓介面的排列可以更多樣,但是,新的功能如何跟舊的系統相容呢?這就是support library出現的原因了。從這裡每次寫程式都要考慮是要用 android.support.V4.app還是 android.support.V7.appcompat。 物換星移,漸漸的 android1, android2漸漸的看不到市佔了,但舊有的support V4 V7庫裡面還是有往下相容的物件與命名空間。所以也是到了要好好大掃除一下了。因此google 就推出了android X,把所有的物件跟命名空間都重整一下,這樣以後也不用再用V4、V7 這些命名。 主要改變 一 、原本android.support.*,都改成 androidx.* 二、appcompat-v7庫之類都改成appcompat即可,不用帶版號。 如何做出改變 一、目前新版android studio 3.4.2 ,打從新建一個計畫,就直接勾選了使用androidX。所以不用煩腦這個問題。 二、舊程式可以

android 版本控制

隨著android來到 10 版。天啊!不知不覺。已過了那麼多年。為了顧及過去舊版本的朋友。我們在程式中就要因為版本而產生不同的程式碼。 以下是 if (Build.VERSION. SDK_INT >= Build.VERSION_CODES. M ) { //大於等於 M 版本要做的事           } else if (Build.VERSION. SDK_INT >= Build.VERSION_CODES. KITKAT ) { //大於等於 KITKAT 要做的事 } else { // 其它版本 } 在一些特別的功能上,不時會用到。先留下紀錄以備不時之需。

python unicode 問題 decode encode

這個問題,是很多人的困擾。我們知道所有的文字在電腦中都有編碥。當我們按下鍵盤的 a 這個字母時,電腦作業系統本身並不是收到一個 a 字母,而是一個號碼 97,再從97 查出是a這個字母。這就是編碼。為什麼需要這樣做,因為文字就是一個圖。如果由鍵盤送出的訊號 是以圖為單位來傳送,那傳輸的硬體就要多設計頻寬。鍵盤本身也要存放這些文字的圖。要這樣設計硬體也不是不可以,但這個設計就不是很聰明。 早期電腦的編碼是為了對應鍵盤上的鍵,產生了 ascii 碼。一個由8bit編碼的對應系統。可想而知。8bit也就只能對應256個文字。那全世界其它語言怎麼辨呢?當然就開始出現其它編碼。下面是一些常見的碼 gbk 這個編碼包含了 繁簡中文,日文 windows 中的 cp950 繁中 cp932 日文 cp1250 中歐語言 cjk 中日韓 big5 繁中 Shift_JIS 日文 當一個系統慢慢的出現在各個國家的時候,上面這些編碼就各自出現了。 隨著編碼越來越多,人們就會問,有那麼多編碼,為什麼不建一個完整的,把所有編碼都包進來的統一編碼呢?是的,unicode就是這樣的產物。 進入我們今天的主題。 unicode 國際組織制定的,包括全世界所有語言文字與符號。 針對unicode又產生utf8,utf16,utf32的編碼。 這裡很重要。utf8,utf16,utf32是針對unicode ,如果拿gbk要改為utf8那是行不通的。必需要gbk先轉成unicode,再由unicode轉為utf8或是utf16,或是utf32。 所以為什麼我們在寫python開頭要加這一行 # -*- coding: utf-8 -*- 就是讓python知道,他接下來要處理的程式中有 unicode 的非英語系文字。編碼要用utf8。 為什麼我們還是常常在python(2.7)遇到中文問題,尤其是換作業系統的時候? 我們先試一下 >>>a="我是人" >>>len(a) 9 >>>type(a) <type 'str'> >>>a= u "我是人" >>>len(a)

VBA EXCEL 工作表變化 馬上執行 的作法 Worksheet_Change

圖片
沒想到還會用到 Excel 中的 VBA,當初寫VBA就是一段窮極無聊的日子,用Excel寫星象表… 現在居然要幫一位老大哥寫這樣的程式…當真所有的事,當下是很難知道它發生的意義是什麼… 癈話不多說 先開啟EXCEL,存成副檔名為xlsm,這樣可以使用巨集功能。 然後看一上面,標籤列,有無開發人員選項。 如果沒有,從 檔案->選項->自定功能區->開發人員(打勾) 如果有,點擊 visual basic,就可以開始寫VBA 我們的目的是這樣的,如果 worksheet中有任何的更動,都會執行一段程式。 所以我們先點擊左邊的工作表1,然後右邊的程式編輯欄中上面的選擇列中,選worksheet。要記得這個設定是 對應到個別的worksheet ,所以如果有其它工作表,要個別寫對應的程式。如下 接下來選右邊的change 選完就會自動產生兩個程式名。 Worksheet_Change與 Worksheet_SelectionChange,如下。Worksheet_Change是指任何在worksheet 上的變動,就會執行這個程式。Worksheet_SelectionChange是指,選定EXCEL中的格有變化,如本來選A1改點擊了B1,這個動作就會觸發Worksheet_SelectionChange。 我們在兩個程式中寫一個MsgBox, 如下 各位可以試試效果如何。只要點擊左上方,excel的小圖,就會回到excel的worksheet中。 我們在 Worksheet_Change中增加三行程式,會在A1, A2, A3格中填入a, b, c。 各位是否有推論,這樣的寫法,會產生無窮迴圈? 這個很重要!在寫 Worksheet_Change程式時,要很小心,如果是 工作表1自己的 Worksheet_Change要對工作表1自己做改變,就會進入無窮迴圈。 所以我們要能自由的開關觸發功能。用   Application.EnableEvents  我們加入  Application.EnableEvents ,再試試看。  如此這般。

Minst 手寫訓練集 python

圖片
以往我們有一個新的類神經訓練模型,我們都會用single pole或是double pole來測試模型的訓練結果。以目前類神經網路發展的狀況,single pole 與double pole已不能滿足需求。進一步,我們會使用MNIST訓練集來訓練。網址在此 http://yann.lecun.com/exdb/mnist/ 一進去我們就看到三個作者 Yann LeCun, Corinna Cortes, Christopher J.C. Burges,我們向他們致敬。 然後就是四個重要的檔案。 train-images-idx3-ubyte.gz :  training set images (9912422 bytes) train-labels-idx1-ubyte.gz :  training set labels (28881 bytes) t10k-images-idx3-ubyte.gz :   test set images (1648877 bytes) t10k-labels-idx1-ubyte.gz :   test set labels (4542 bytes) 第一跟第二個是拿來訓練用的,第三跟第四個是拿來測試的。我們可以注意到有image跟labels兩種檔。image是圖檔,labels是對應圖檔的答案。 雖然TensorFlow有方便的讀取方法。但如果我們想要自己用python讀來用。要如何做呢? 我們要先看一下網頁中的這部份 我們可以看到offset,代表讀的byte數。就是說我們開了檔之後。read進來,以label檔來說,data[0:4]會等於2049。data[4:8]等於60000。 了解檔案的格式,我們就可以寫一個小程式來讀讀看。 因為offset是4個為一個單位,所以我們先寫一下轉byte為數字的程式 def b2i(b):     return int(codecs.encode(b, 'hex'), 16) with open("."+os.sep+"train-images.idx3-ubyte", 'rb') as f:     data = f.read()     ty

python 變數 II

有時候我們在多個不同的class之間使用了同一個模組。而模組中有些變數,我們希望其可以跟著變動。 我們舉個例子來看看 第一個檔案 vv.py import os, sys class vv(): vva = 1 vvb = 2 第二個檔案 v1.py import vv class v1(): def __init__(self): self.aa = vv.vv()                 self.aa.vva=9999 def show(self): print self.aa.vva print self.aa.vvb 第三個檔案為主程式 vmain.py import vv import v1 class main(): def __init__(self): self.a = v.vv() def show(self): print self.a.vva print self.a.vvb def change(self): self.a.vva=12345 self.a.vvb=54321 def gotV1(self): aa = v1.v1() aa.show()      if __name__ == '__main__': aa=main() aa.show() aa.change() aa.show() aa.gotV1() print " new object " bb = main() bb.show() 當我們執行了vmain.py 得到 1 2 12345 54321 9999 2  new object  1 2 我們企圖在change中改變vva的數字,。這個合理,每一個新的物件,都該保有其參數原來的值。如果我們希望new object下,新物件的值也一起被改變呢? import vv import

python aubio 安裝

圖片
在window 10,以pip 安裝 aubio時出現如下的錯誤。這是安裝環境的問題。 Running "pkg-config --libs --cflags libavformat" failed: WindowsError(2, 'The system cannot find the file specified') Running "pkg-config --libs --cflags libavutil" failed: WindowsError(2, 'The system cannot find the file specified') Running "pkg-config --libs --cflags libavresample" failed: WindowsError(2, 'The system cannot find the file specified') Running "pkg-config --libs --cflags jack" failed: WindowsError(2, 'The system cannot find the file specified') Running "pkg-config --libs --cflags sndfile" failed: WindowsError(2, 'The system cannot find the file specified') Running "pkg-config --libs --cflags samplerate" failed: WindowsError(2, 'The system cannot 我們要為 widnow 環境安裝上 visual C++, 如下說明 https://wiki.python.org/moin/WindowsCompilers 在安裝前,我們先確定setup tool為新的 pip install --upgrade setuptools 針對自己的python選Visual C++ 在連結中