2019年12月27日 星期五

x32舊版程式如何移至 x64

x32舊版程式如何移至 x64

1. 原odbc  連接要改為新版odbc 的連接語法, 例如 ACE.15.0
2. 在x64上原 report 要執行兩個原廠的 x64 patch .
3. x64上的權限關係, 存放 資料庫的資料夾, 記得要開放權限. , 否則會連不上.

win7用runasas批次以管理者權限身份執行某程式的作法



20200108:

這個作法才是正確的作法, 第一次輸入密碼後, 之後就不會再問密碼:


win7用runasas批次執行 Example1Server.exe 管理者權限:


runas /user:Administrator /savecred Example1Server.exe



20200108:
發現這個作法無效, 還是每次都要輸入密碼:

小技巧, 要用時常忘記, 記一下:

1. 先建立捷徑.
2. 按捷徑左鍵,
3. 點進階.
4. 勾選[以系統管理員身份執行]
5. 第一次執行時要輸入管理者密碼, 之後就不用.




2019年12月9日 星期一

128 gb 隨身碟新品更換記.(20191217補充不專業實測速度)



20191217:
使用後記:
經不專業實測:
來原為外接 usb 3.0 的SSD (Ad.t. S.650)
目的為 Sandisk Ultra Go 128Gb (接Usb 3.0接口)

以下為實測情況, 一開始速度還勉強可以, 但後來怎麼速度一直就維持在只有 24mb/s , 有點慢.







--------------------------------------------------------------------------------
前兩天到光華送修 4T 外接式硬碟, 順便逛了一下,發現au..b.y二樓門市有擺出 ad.t. 128Gb 的隨身碟, 價格只要 399, 一時興起就買了一顆, 結果回家一用, 好像又中雷.

速度一直在 50MB 與 幾百KB之間漂, 根本就不能用, 想到最近買了三樣 該公司的產品, 都遇到雷, 實在是.....

結果昨天就利用送修 SSD 的時間, 拿到au..b.y的二樓門市, 表明產品有問題, 要退貨,  結果對方告知,他們不可以退貨, 而且就算換貨也只能換原買的產品.

我有點不服氣告知, 消保法不是有七天無條件退貨的規定嗎? 而且我最近己遇到 ad.t. 三個產品的雷了, 如果他們換另一顆一樣的產品給我, 我如果拿回去又遇到問題, 那要怎麼辦, 結果對方竟然說, 前面兩個雷又不是他們賣給我的. 而他們依公司規定只能換另一顆一樣的東西給我.


我當時有點動氣, 因為依我了解, 消保法不是七天內可以無條件退貨嗎? 就算不能退貨, 那我加要換其它產品總應該可以吧? 可是對方告知實體店面沒有七天無條件退貨的規定,強調只能換另一顆同樣產品給我.

經過不愉快的爭論後, 對方終於答應該我加價換其它廠版的隨身碟.

事後, 我查了一下消保法內容, 發現:

"3.若在實體店面購物,不適用此七天鑑賞期的規定!除非有品質瑕疵或可歸責於業者的事由!"

對方告知實體店面不適用七鑑賞期, 是對的, 但他沒有告知後面 有個除非有品質瑕疵或可歸責於業者的事由!"

所以依這個規定, 這顆隨身碟應該照理說要讓我退貨才對. 因為它的運作速度是有問題, 也就是品質有瑕疵. 而不能只用前面"實體店面沒有七天鑑賞期"的部份不讓我退貨.

另一個重點是, 到實體店面購物, 要了解, 沒有七天無條件退貨的規定,

以上經驗提供給大家參考.







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.