2019年12月9日 星期一

20191210 SSD 送修記.




20191217:

使用後記:

昨天測試,如果沒有切換效能模式, 發現copy 大量小檔會當掉, 切換到效率模式, 則速度會大量降下來, 但不會當.



--------------------------------------------------
去年六月買了這顆 SSD 回來, 結果, 發現在寫入方面, 前面約50G的速度都還維持在 300MB 左右.
但一超過約 50GB 後, 整個速度就會漂, 由 300MB 漂降下至 幾百KB, 有時會卡住, 之後又會再往上漂回 約 200MB 或 300 MB , 然後又漂下來, 如此循環, 整個速度就變很慢, 幾乎無法完成寫入.

發現問題後, 原想說, 不然拿來備份一些小檔好了, 不要超過50GB的檔案備份用好了.

前兩天買了 該公司的 4TB 外接式硬碟, usb 3.0 結果速度只到 20MB, 受不了就送修, 一問,發現送修地點就在光華五樓, 還算方便, 還可以順便逛一下光華. 就撥空送修.

送修時, 有跟對方詢問我那顆 SSD 的問題, 結果對方告知, 看是否要拿來檢查看看. 不過裡面的資料可能要自行備份, 因為維修不負責裡面的資料.

依對方建議, 我昨天下班後(記得晚上只到7:00)馬上趕去送修, 出乎意外的, 原本想說要解釋半天, 或者可能因為過保而要收費, 結果對方確認我裡面資料不用留的情況下, 直接換了一顆新的給我. 讓我覺得很滿意. 但心裡還是覺得有點擔心換回來新的這顆ssd 是否也會一樣我速度超過 一定寫入容量就會漂的情況.

回家後就立馬測試, 結果寫入約250GB 的資料, 速度都維持約在300MB 左右. 讓我很滿意, 今天早上到公司, 馬上就測一個更大的 383GB 的vm , 結果速度仍一樣維持在約 300MB左右. 這下子我就放心了. 也對該公司的維修大大加分, 原本想就之後少買該公司的產品, 但現在感覺變好了, 之後可能仍會採購該公司的產品, 因為有問題維修時, 服務很好, 一點都不囉說.

以下內容分享給大家.



https://24h.pchome.com.tw/prod/DRAH0V-A9009M1GG?fq=/S/DRAH0V

2019年12月1日 星期日



Siluli 初體驗:

安裝方式:

計算機範例:

網站範例:

己用到的keyword  region  / location / wait / click / exists / Key. /
可以用command line 方式模擬 不必安裝 sikulix 執行.

方法1:要先打包 專案成 jar:
java -jar  Sikulix_2.0.1.jar -r  try_web.jar 


方法2: 直接把整個專案指定給 java 執行
java -jar Sikulix_2.0.1.jar -r try_web.sikuli  ( 指出整個資料夾)



參考網址:
http://wyj-learning.blogspot.com/2018/06/sikuli_30.html

2019年11月28日 星期四

python xlwings初體驗




import xlwings as xw
import time

wait_second = 1


## 以下新增 workbook 功能沒有成功, 先mark begin
#workbook = xw.books.add()
#workbook.name='xlwing_sample'
#workbook = xw.books.add.Book('xlwing_sample')
## 以上新增 workbook 功能沒有成功, 先mark end


app = xw.App()   ## 預設會開啟一個工作本
workbook = app.books.open('xlwings_1.xlsx')    ## 開啟舊工作本
app.books[0].close()                       ##  把 預設的工作本關掉, 否則劃面底下會多一個工作本.
sheet = workbook.sheets['工作表1']
sheet.activate()
sheet.clear()

time.sleep(wait_second)
sheet.cells(1,1).value = 'Hello World!'
sheet.cells(1,1).color = (255,0,0)
time.sleep(wait_second)

sheet.cells(1,1).color = None
sheet.cells(2,'B').value = 'Hello World AGAIN !'
sheet.cells(2,'B').color = (255,0,0)
time.sleep(wait_second)

if workbook.sheets.count == 1:                   ## 原要用 sheet name 找, 但會出錯, 故改為用 count.
#if workbook.sheets['工作表2'] == None:
    sheet2 = workbook.sheets.add('second')
else:
    sheet2 = workbook.sheets['second']
    sheet2.activate()

sheet2.clear() 
sheet2.cells(1,1).value = 'Sheet2 Hello World!'
sheet2.cells(1,1).color = (255,0,0)
time.sleep(wait_second)

sheet2.cells(1,1).color = None
sheet2.cells(2,'B').value = 'Sheet2 Hello World AGAIN !'
sheet2.cells(2,'B').color = (255,0,0)
time.sleep(wait_second)


workbook.save()
workbook.close()
app.quit()  ## 要加這指令, 否則會卡一個空工作本在劃面上


2019年11月26日 星期二

Tkinter 語法糖




-----------------------------------------------
好用的分隔線
-----------------------------------------------

mysep = Separator(root,orient=HORIZONTAL)
mysep.pack(fill=X,padx=25)



-----------------------------------------------
Tkinter 的 widget有個 after好用的method
-----------------------------------------------

label.after(1000,runcounter)
表示一秒後執行 runcounter()

如未加 runcounter, 則可當成 delay(1000),停一秒的意思.

-----------------------------------------------
Label  如何夾帶圖檔: (其它widget類似作法)
-----------------------------------------------
1.case git:

mygif = PhotoImage(file='xxx.gif')
mygif=mygif.zoom(2)     ## 放大幾倍
mygif = mygif .subsample(3)  ## 縮小
label_gif = Label(root,image=mygif )
label_gif.pack()

2.case jpg:

(1).要 pip install pillow
(2). from PIL import Image,ImageTk

myimage = Image.open('Lighthouse.jpg')
width=350
height=200
image = image.resize((width,height), Image.ANTIALIAS)  # pixel 不會灰灰的.
mylighthouse = ImageTk.PhotoImage(image)

# label_jpg = Label(root,image=mylighthouse)   ## 只有圖

label_jpg = Label(root,text='demo program to \ncompound left'
                  , justify='right'
                  ,compound='left',image=Lighthouse)                             ## 圖在左,文字在右. 效果很好

label_jpg.pack()


沒justify文字置中

有justify='right'文字切右




3.case icon:

label4=Label(root,bitmap='hourglass',
             #compound='left',text='icondemo'
             #compound='center',text='icondemo'
             compound='top',text='icondemo'
             )
label4.pack()



-----------------------------------------------
如何定義button 及bind事件處理程式
-----------------------------------------------
def clickfunc():     <== 應會帶一個event的參數
      print('you click me')

btn  = Button(root,text='hit me',command=clickfunc)

如何在不同btn傳入不同function , 這個要查一下. 好像有很多種作法




-----------------------------------------------
如何作 button.visible=False  及 button.visible=True
-----------------------------------------------
如用 grid
button.grid(column=0,row=0)
button.grid_forget()

重新顯示則用原來grid
button.grid(column=0,row=0)

如用 pack 則一樣
button.pack_forget()
重新顯示則用原來pack
button.pack

-----------------------------------

如何改變動態 window 的大小及位置

 for i in range(1,100):
        position=str(200+i)+'x'+str(200+i)+'+'+str(200+i)+'+'+str(300+i)
                      ##    pos_x 'x' pos_y  + size_x '+' size_y     position 參數值意義
        print(position)
        window.geometry(position)
        window.update()         ## 加這行才會動態顯示.

---------------------------------------------------------------------

label 如何給值及取值:
--------------------------------------------------

給值:
val = StringVar()
val.set('初始值')
lbl1 = Label(root,textvariable=val)

取值:
ans = val.get()


----------------------------------------------

Entry 如何給值及取值:
----------------------------------------------
給值:
val2 = StringVar()
val2.set('文字輸入欄初值')

username = Entry(window,textvariable=val2)
username.pack()
取值:
print('username內容:'+username.get())
或者:
print('username內容:'+val2.get())

val2.get())

--------------

如果 未給變數, 但要給初值時, 要用insert():
password = Entry(window,show="*")
password.insert(END,'Password')
password.pack()

memo = Entry(window,text='memo')
memo.insert(END, 'default text')
memo.pack()

取值時則一定要用元件名.get()
    ans= 'username內容:'+username.get() +'\n'
    ans += 'password:'+password.get() +'\n'
    ans += 'memo:'+memo.get()
    val.set(ans)
----------------------------------------------

b.config(relief=SUNKEN) <== 指一般程式所謂的border
 SUNKEN / RAISED / GROOVE / RIDGE/ FLAT. 預設值為 RAISED.






2019年11月24日 星期日

pyinsaller 打包含有 pyodbc 的專案記得加入 --hidden-import pyodbc, 有模組要用 -p 包進去




請參考:
Pyinstaller將python程式打包為執行檔


發現專案加入 pyodbc 後, 打包出現錯誤, 最後測試在 compile 的指令內加以下內容強制引入就ok了.

pyinstaller --hidden-import pyodbc -F .\test.py

----------------------------------------------------------------
20191129 加入:
----------------------------------------------------------------
如一個大程式切割成多個小module 時, 在打包時, 所切割module 要用

-p .\auto_inv3di_module_f.py  把模組包進去,

如果沒有包進去, pyinstall 仍會打包完成, 但執行時會找不到.



vm要拿來測docker, 可以試試開啟這個開關


經測試版本測試, 應該開啟這個開關vm就可以用來測試docker.


不專業開箱: 實測兩個SSD外接盒速度.20191217補記更新




20191217:
後記補充:

asus tp412UA :
內含一個 usb 3.0 及一個 type-c 的接口:

一樣的 ssd + 外接盒 ORICO type-c , type-c , 測試, 結果發現:

1. 接 usb 3.0 的寫入速度快於 type-c :
    type-c 寫至 usb 3.0 約 300-350mb.
    usb 3.0 寫至 type-c 則降至 200-250 mb:
    照理說 type-c的速度應快於 usb 3.0, 但實測卻不是這樣, 真實原因不明, 但研判可能是 asus 筆電對於type-c接口沒有作到充分發揮其速度的原因.

可能須要另外找一台含較正規的type-c桌機或筆電來作進一步測試.


==========================================


20191125實測以下兩物件結合後的copy 速度.

我日常常須要備份大型檔案 , 看到網路上一堆專業的軟體測試速度, 但我一直看不到我要的測試角度, 所以本次測試, 不用專業的軟體測速度, 使用更貼近我實際用法的大檔案copy 測試.


結果如下:


測試一:
桌機copy 檔案至 外接盒:

(外接盒1)   ORICO 2.5吋透明隨身硬碟外接盒 TYPE-C 介面 213

team 1TB SSD


原始速度約為 280 MB -- 330 MB .

開始以下開關後, 速度變成 380 M











測試二:

同場加映:


內接一樣 team 1TB SSD SSD , 未調參數情況下:
1. 速度約為 280--330MB. 
2. COPY 超過 20GB 後,  會出現 0mb後掛掉.

如開啟上述參數時則:
1.速度有上來約 380左右.
2.Copy 超過20GB後, 會降速至100--140mb之間,一直到copy 完成.



測試三:
由 伽利略 copy 到 ORICO 均速為380MB.



測試四: 
由 ORICO copy copy 至伽利略:
前10G速度為 380MB, 超過後速降至  110-160MB.