guacamole酪梨醬如何計算工時

guacamole是很棒的網頁版遠端連線工具,就差在切換輸入法不是那麼簡便。

公司可以安裝酪梨醬,綁定員工帳號只能連到員工主機,也不開放員工自行設定連線,搭配現在guacamole已經可以設定遠端開機,就可以讓員工遠距連線工作,而公司方面可以計算員工工時,若員工加班也能有所憑證。

我安裝的酪梨醬使用mysql,計算工時的語法如下:

# 可計算同一天連線小時(小數第二位)
SELECT username ,DATE_FORMAT(start_date, "%Y%m%d") the_same_date, cast(sum(TIMESTAMPDIFF(MINUTE,start_date,end_date))/60 as decimal(9,2)) overtime_hour 
from guacamole_connection_history 
group by username,the_same_date
order by username,the_same_date desc

#若資料庫時區沒有調整,預設是UTC,可暫時使用CONVERT_TZ轉換正確時區
SELECT username ,DATE_FORMAT(CONVERT_TZ(start_date,'+00:00','+08:00'), "%Y%m%d") the_same_date, cast(sum(TIMESTAMPDIFF(MINUTE,start_date,end_date))/60 as decimal(9,2)) overtime_hour 
from guacamole_connection_history 
group by username,the_same_date
order by username,the_same_date desc
# 排除每次連線低於30分鐘
SELECT username ,DATE_FORMAT(start_date, "%Y%m%d") the_same_date, cast(sum(TIMESTAMPDIFF(MINUTE,start_date,end_date))/60 as decimal(9,2)) overtime_hour 
from guacamole_connection_history 
where TIMESTAMPDIFF(MINUTE,start_date,end_date) >= 30
group by username,the_same_date
order by username,the_same_date desc

#若資料庫時區沒有調整,預設是UTC,可暫時使用CONVERT_TZ轉換正確時區
SELECT username ,DATE_FORMAT(CONVERT_TZ(start_date,'+00:00','+08:00'), "%Y%m%d") the_same_date, cast(sum(TIMESTAMPDIFF(MINUTE,start_date,end_date))/60 as decimal(9,2)) overtime_hour 
from guacamole_connection_history 
where TIMESTAMPDIFF(MINUTE,start_date,end_date) >= 30
group by username,the_same_date
order by username,the_same_date desc

為了員工健康,要設定上線時間

另外酪梨醬預設60分鐘沒有任何遠端連線,會整個登出。
可搭配遠端桌面連線相關設定

vi guacamole.properties
##### 修改30分鐘整個網頁登出(必須在沒有任何連線的情況下)
api-session-timeout:30

可以搭配設定閒置30分鐘後,遠端桌面連線自動登出,此時酪梨醬沒有任何連線了,過30分鐘也跟著登出了。

讓老電腦順順跑win10_win11

我有一台13年前的pentium老電腦4GB ram,安裝windows 10、windows 11都覺得好慢好慢,偶然間看到「雲爸的私處」寫的一篇文章「低端電腦救星 ReviOS Windows 11精簡版系統」,文章推薦的「Revision」是開源軟體。該軟體以前會提供整個windows iso檔,讓人下載後直接安裝;後來改成「腳本」方式,我們只要正常安裝windows,再執行AME Wizard優化程式,載入Revision的腳本,就可以讓舊電腦優化了。

  1. 安裝windows相關元件
    VisualCppRedist_AIO_x86_x64
  2. 執行windows優化軟體
    AME Wizard
  3. 透過AME Wizard執行Revi優化腳本
    AME Wizard執行後,需要載入Revi提供的優化腳本,副檔名為apbx
    Revi優化腳本
  4. 首先腳本會要求關閉windows預設的防禦防毒機制,接下來一直下一步,都用預設值,最後重新開機,就大功告成了

    系統預設會停用更新,可透過桌面上的RevisionTool工具改成可更新


安裝bookstack書架

我的軟體工程概念很差,最近遇到一個案子,我想要找人一起,但是那個同事主管說要寫提案,了解後才會分配資源。

於是我想到了「SRS(Software Request Spec)軟體需求規格」當作提案,但是又不想要用傳統的word檔案書寫(很難維護),於是上網找了一下軟體需求與功能規格書的範例,終於找到滿意的書寫格式-使用gitbook

https://mason1762.gitbook.io/samxinbakery/gong-neng-ge

可惜gitbook自架很麻煩,於是我又找到相似而且可以自架、開源的系統-bookstack
bookstack宣稱是wiki軟體,也可以當知識管理,以書架、書本為基本架構的系統
https://demo.bookstackapp.com/books

安裝方式很簡單,我這次寫在網誌裡,也沒放在svn系統(https://docs.kafeiou.pw/!/#iammis),而是直接現學現賣,把安裝方式寫在自架的bookstack上。

https://book.kafeiou.pw/

另外有個很棒bookstack網站建議大家參考一下 BUBU 知識庫 & 秉迅資訊.Studio

java Servlet 取得遠端ip

原來不是這麼簡單

private static final String[] VALID_IP_HEADER_CANDIDATES = { 
  "X-Forwarded-For",
  "Proxy-Client-IP",
  "WL-Proxy-Client-IP",
  "HTTP_X_FORWARDED_FOR",
  "HTTP_X_FORWARDED",
  "HTTP_X_CLUSTER_CLIENT_IP",
  "HTTP_CLIENT_IP",
  "HTTP_FORWARDED_FOR",
  "HTTP_FORWARDED",
  "HTTP_VIA",
  "REMOTE_ADDR" 
};

public static String getClientIpAddress(HttpServletRequest request) {
  for (String header : VALID_IP_HEADER_CANDIDATES) {
    String ipAddress = request.getHeader(header);
    if (ipAddress != null && ipAddress.length() != 0 && !"unknown".equalsIgnoreCase(ipAddress)) {
      return ipAddress;
    }
  }
  return request.getRemoteAddr();
}

moodle 有email通知功能,居然要額外安裝測試外掛

只好安裝,才能測試是否設定成功

https://moodle.org/plugins/local_mailtest?nonjscomment=1&comment_itemid=1527&comment_context=50&comment_component=local_plugins&comment_area=plugin_general&comment_page=1

當然通知是可以關閉的

Administration -> General -> Messaging -> Notification settings

nextcloud誤刪檔案,還原失敗

慘,我的錯。

解決方式:
1. 到nextcloud該使用者目錄,找出<user>/files_trashbin/files 複製到 <user>/files
2. 執行 php occ files:scan –all

若出現 Exception during scan: “files/xxx”) is locked 則進入資料庫,刪除資料表資料 DELETE FROM oc_file_locks WHERE 1;

刪除之後,再次執行 php occ files:scan –all 還原檔案後,原本分享的狀態可能會不見,要自己重新設定了。

nextcloud 聯盟功能Federation

先講結論,nextcloud聯盟功能分享的目錄,並不會把檔案傳到對方服務器。(這樣就無法達到檔案兩邊都有的需求)

如何正確啟用聯盟功能

1. 啟用「Federation」app
2. 在管理介面->分享頁面,做好設定以及加入遠端服務器


3. 設定檔加上「allow_local_remote_servers = true」

修改 config/config.php

或是下指令

occ config:system:set allow_local_remote_servers --value true --type bool

4. 同步位址簿(需加入crontab定期執行)

occ dav:sync-system-addressbook 
occ federation:sync-addressbooks

5. 分享目錄給遠端的聯盟使用者

6. 遠端使用者將會接收到分享目錄的請求

1 2 3 4 5 ... 58