2017年9月8日 星期五

西元年生日轉換成民國年

全誼圖書系統在匯入學生資料時
新增加了生日的欄位
格式為XXX-XX-XX
不足百位時,也要補0

但是學務系統「全校班級名冊class_all_address」中匯出的學生生日是西元格式
因此可以使用以下的公式做轉換

=IF(
VALUE(LEFT(H2,4))<2011,
0&LEFT(H2,4)-1911&RIGHT(H2,6),
LEFT(H2,4)-1911&RIGHT(H2,6)
)










下面的公式也可以
=IF(
VALUE(LEFT(H3,4))<2011,
TEXT(LEFT(H3,4)-1911,"000")&RIGHT(H3,6),
LEFT(H3,4)-1911&RIGHT(H3,6)
)

2017年8月13日 星期日

Lararvel 5.4執行migrate ,發生Specified key was too long error

Larval 5.4的資料庫格式做了些許的改變,預設的資料庫格式建議為utf8mb4 ,這可以讓使用者儲存emojis表情符號。但這樣的變格只適合Laravel 5.4新版本以及5.5.7以上的MySQL資料庫。

假如你的資料庫版本較舊,若執行php artisan make:migrate時,則會出現1071Specified key was too long error錯誤訊息



[Illuminate\Database\QueryException]                                                                                              
  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table
  `users` add unique `users_email_unique`(`email`))                                                                              

  [PDOException]                                                                                                
  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
 
解決方法:
在app\Providers\AppServiceProvider.php再boot()方法中加上預設值
Schema::defaultStringLength(191);



參考網頁:

2017年4月5日 星期三

slmgr -ipk更改KMS授權序號,再透過縣網啟動認證

今日校內某台電腦再升級為Win7,並執行啟動啟動認證時,出現

錯誤訊息碼:0x8007007B,
錯誤描述:檔案名稱、目錄名稱或磁碟機標籤語法錯誤

錯誤訊息的描述與解決,請參考Mircosoft說明

但不巧的是,主機上的授權標籤竟然被撕掉一半,看不清楚原先的授權碼。
也就是說已經無法使用隨機授權的序號,
那就改採縣網KMS授權的方式進行認證了。

先參考微軟的網頁,得知不同的OS版本在KMS上需要什麼KEY
https://technet.microsoft.com/en-us/library/ff793421.aspx
譬如:
我安裝的是Windows 7 Enterprise版
KMS授權序號:33PXH-7Y6KF-2VJC9-XBBR8-HVTHH

1.先執行
services.msc啟動服務

2.再將
Software Protection服務停止

3.利用系統管理者身分開啟命令提示字元


4.輸入slmgr -ipk 33PXH-7Y6KF-2VJC9-XBBR8-HVTHH

5.再次輸入slmgr /rilc,等到出現授權碼更新後的訊息後,再重新啟動電腦

6.利用縣網的KMS認證啟動程式,啟動作業系統。


附註:
slmgr也就是Windows 軟體授權管理工具(Windows Software Licensing Management Tool),是一支管理Vista及Windows 7啟動的VBScript工具程式。


參考網頁:

2017年3月7日 星期二

Ubuntu顯示記憶體使用量指令

free指令顯示記憶體使用量

free -b 以Byte為單位


free -k 以KB為單位


free -m 以MB為單位


free -h 以Human 較容易看的懂方式顯示


參考網頁:

2017年2月15日 星期三

Samba就是捨不得我離開 Oplock break failed

電腦教室是無碟的環境,所以學生在存檔繳交作業時,我都會另外叫他們存在Samba主機,但是這個學期卻出現了一個奇怪的現象,那就是學生把檔案存到Samba後,儘管學生機都關機了,Samba內的檔案卻無法正常剪下或刪除。出現的錯誤訊息,指向有程式正開啟這些檔案,導致他們無法正常被刪除,而出現問題的學生機,又很隨機,很難對點查詢。

而這樣的狀況要隔一段時間(通常都到下一節課),就自動緩解。感覺起來,這些被綁住的檔案,隔一段時間後自動被釋放了。

而這過程中,其實只要手動將Samba服務停止後再重啟,就可以解決,但是這實在不是解決的辦法,總不可能每次要存取Samba檔案,都要再連到Samba主機下指令吧!!只好痛下決心,努力找尋答案。最初,歷經過重新設定Samba,也重新安裝過Ubuntu系統主機,病症仍未獲緩解,之後只好伸入判讀samba的log紀錄。

Samba的log紀錄被存放在/etc/log/samba/log.電腦名稱中,錯誤訊息內容類似

[2017/02/14 11:15:25.941469,  0] ../source3/smbd/oplock.c:335(oplock_timeout_handler)
  Oplock break failed for file 50109劉晧辰.svg -- replying anyway


"Oplock break failed" 指的是檔案被打開中且被某人隨機使用使用中,並且系統主機無法強制這個用戶端釋放Oplock寫回快取。
假如檔案真的被開啟了,這樣的錯誤訊息就會發生,但假如檔案確實關閉甚至電腦都關機了,卻仍出現這樣的錯誤訊息,那就可能是Samba主機某程式拒絕發出斷開(break)的訊息,或是等候不到用戶關的回覆(Replay)訊息。然後就傻傻的等待著,等等等......等到session被丟棄時,才認為對方已經完成工作沒回應,這應該算是Samba的小bug。而這樣的情形也可以解釋著為何總是要到下一堂課,原本無法刪除的檔案,都可以刪除了。


解決辦法,在/etc/samba/smb.conf中
[sharefolder]

oplocks = no    //不要鎖定oplocks

就可以解決了

事後又看到有人如下這麼寫,一併補上
locking = no
strict locking = no


設定範例:
[SAMBA]
   comment = samba共用資料
   path = /tmp/samba
   public = yes
   guest ok = yes
   writable = yes
   browseable = yes
   only guest = yes
   oplocks = no
   locking = no
   strict locking = no



ps.上面的設定式安全性最低的設定方法,沒有經過帳號認証,其實是不太建議喔!!


參考網頁:





2016年11月19日 星期六

偷偷拷貝夥伴的COMPOSER_HOME目錄

和夥伴在同一台主機下共同練習Laravel
每個人都自己的家目錄
而每個人也需要各在自己的家目錄下
composer global require "laravel/installer"
指令
主要目的是要把laravel的安裝程式下載回來到COMPOSER_HOME
(關於COMPSER_HOME是~/.composer還是~/.config/composer請看這一篇)

但是composer global的執行實在太慢了
偷懶一點的作法是

一、利用root的權限,把別人的COPY回來就好了
##舉例有test1與test2兩個使用者
mkdir ~/.composer
sudo cp -R /home/test1/.composer/* /home/test2/.composer/
sudo chown -R test.test /home/test2/.composer


二、設定laravel指令及XDG環境變數
sudo vi ~/.profile

在最後一行寫入
PATH="$PATH:$HOME/.composer/vendor/bin"
export XDG_CONFIG_HOME="$HOME"


三、重新開機並執行laravel安裝
重新開機後,切換到自己的網頁目錄
輸入

laravel new blog

四、修改bootstrap/cache及storage
sudo chown -R www-data.www-data bootstrap/cache/
sudo chown -R www-data.www-data storage/


[Ubuntu16.04]安裝Laravel,COMPOSER_HOME竟多出了.config資料夾



如上圖
安裝Laravel的官方文件中提到:
執行
composer global require "laravel/installer"
安裝程式後,可以在~/.composer/vendor/bin目錄下找到laravel指令,但是今天卻發現此次設定的主機的路徑竟是~/.config/composer/vendor/bin,多出了一個.config的資料夾

仔細查閱相關資料後才發現,原來
假如電腦主機若是採用 freedesktop.org standards標準的作業系統,他會先偵測環境變數中XDG_CONFIG_HOME是否有設定,若沒有設定的話,就會自動幫你加上.config

If your system uses freedesktop.org standards, which it detects by looking for environment variables beginning with XDG_, then Composer uses $XDG_CONFIG_HOME/composer/, falling back to $HOME/.config/composer/ if that isn't set.


若要解決這個困擾(至少操作時跟路徑跟官方文件一致比較不會出錯),可從兩個方向著眼:
1.更改全域的設定,主機內全部使用者受惠
sudo vi /etc/profile

2.更改個別使用者
vi ~/.profile

同樣都是在檔案的最後一行加上
export XDG_CONFIG_HOME="$HOME"

這樣一來,當電腦重新啟動後,XDG_CONFIG_HOME環境變數就會先執行了,但假如你先前已經安裝過Composer的話,可能就需要再重新裝一次囉


註:其他XDG環境變數請參閱Environment variables

參考文件: