outlook 2010以後檔案上限50GB(ost, pst)
IT的噩夢之一, 同事堅持不刪除郵件, 也不願意封存, 過了一段時間信件量超過50GB, 甚至達到200GB以上容量, 這時候要將outlook封存已經不可能了, 因為outlook會爆掉.

後來我發現有個做法, 先刪除爆掉的帳號, 再重建, 並且設定imap只離線保留1年的信件,

待outlook同步完畢, 我們另開一個新的pst檔案, 將已同步的信件複製過去, 等同仁確認複製完畢,
直接刪除原本信件, 然後依序慢慢拉大離線保留的月份, 這期間pst若快爆掉了, 需要關掉outlook ,將快爆的pst改名, 而原本的pst檔可用乾淨的pst取代之.
如此循環, 即可將郵件全部移至pst, 然後…就可以理直氣壯, 跟同事說要強制封存, 並且每年要來找我們, 一起確認封存的檔案也沒有爆掉(50GB)
微軟KB5018410更新後,outlook無法透過postfix server寄信
前幾天有同仁反映無法寄信, 錯誤訊息: none of the authentication methods supported by this client are supported by your server.
經過測試, 郵件伺服器使用我自製的 container docker-postfix-ad 2.4 , 這容器基本os為centos 7.9, postfix版本為 2.10.x , 會讓outlook出現沒有適合的加密通訊協定的錯誤.
爬完文發現postfix的master.cf(submission , smtpd) 可加上 -o tls_ssl_options=NO_TICKET 解決問題, 但偏偏postfix 2.11才有此功能, 更悲催的centos 6有2.11.x版本, centos 7只有2.10.x.
現主時,我只好將自製的郵件伺服器, os改成RockyLinux 8.6, postfix 為3.x版本,
好險3.x 與 2.x 差異性不多, 基本上舊main.cf檔案只要加上以下兩行,就能用了.
#backwards-compatible default setting
append_dot_mydomain = yes
compatibility_level = 2
ps. postfix 3.x的 master.cf也不用特別加上 -o tls_ssl_options=NO_TICKET
相關的更新Windows 11 KB5018418 / Windows Server 2019 KB5018419
2022/10/19
—
若無法寄信,請再安裝這兩天的 win10 KB5020435 , win11 KB5020387 ,就可以解決了
android Git文字筆記APP更新版本
3年前我實作一個Git文字筆記app, 使用jgit套件, 可將github clone到android手機上, 然後進行編輯, 編輯完畢,直接版控到github上面,
最近play store要求target api在2022年11月前, 至少要設定31 , 於是我就編輯了一下, 實在有夠麻煩, 一大堆套件要升級, android studio也是大改版要求舊的專案也要跟著升級.
升級升級, 想說之前jgit只使用4.5.7版本, 趁這機會,改用jgit 6.3.x版, 後來發現6.3.x 使用outputstream類別中的一個函式”transferTo”, 造成android app 找不到該method,程式跳掉.

最後我發現 android 13才支援”transferTo”

另外我開發的這支app, 當初硬改成可以接受未正式簽章的SSL網站, 現在變成資安問題,上架失敗, 原因是X509相關類別,被我繼承改成一律安全 , 只好再改成原本的檢查方式,
也就是說以後這支app要使用遠端git網站, 必須是正式簽章HTTPS, 否則是不能使用的.
為何我的app要使用jgit 6.3.x , 因為jgit終於支援shallow(depth)功能, 可以讓我clone的時候快一點, 不然有些commit數量太多, 要clone很久,很麻煩, 而app本身只想用來做文字筆記, 不用clone太多commit版本下來,不然使用者會嫌棄的.

公司有pixel手機, 趕緊升級到android 13

Github 程式存取必須使用PAT(Personal Access Token)
之前寫過 用戶端github commit需要改用token密碼 才可以使用,
(或是web browser認證),
也就是說, 使用程式例如 JGIT套件, 帳號密碼,也需要使用token密碼, (ps. 我有時候久了就會忘記,真是糟糕)
Setting->Developer setting

點選Personal access tokens -> 點選 Generate new token , 產生新的token密碼

輸入相關資料, 過期時間(可選永不過期), 與該token權限

將token密碼複製,就可以使用了

android 檢查play store是否安裝
java
public static boolean isPlayStoreInstalled(Context context){
try {
context.getPackageManager()
.getPackageInfo(GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE, 0);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
kotlin
fun isPlayStoreInstalled(context: Context): Boolean {
return try {
context.packageManager
.getPackageInfo(GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE, 0)
true
} catch (e: PackageManager.NameNotFoundException) {
false
}
}
build.gradle
implementation 'com.google.android.gms:play-services-base:18.0.1'
android app關於新版本更新的想法
android app 新版本更新,除了google play store之外, 有些不含play store的, 該怎麼做?
簡單的方式就是使用自動更新套件, 搭配自己手動維護版本訊息, app就能自行更新, 但是該套件需要”安裝權限”, 有很大機率會被拒絕, 當然現在也不能上架play store , 除非說明原因.
app也可以自行檢查有新版本(自己手動維護版本訊息), 若有,也可以導到play store或是自己的網頁下載apk程式自行安裝.
val appPackageName = getPackageName()
val intent = Intent(Intent.ACTION_VIEW).apply {
data = Uri.parse("https://play.google.com/store/apps/details?id=$appPackageName")
setPackage("com.android.vending")
}
startActivity(intent)
另外若app可架play store成功, 可以額外下載play store簽名的apk, 使用該apk, 就可以避開簽名者不明的警告訊息呢.

android app字型不隨系統字型大小起舞
重點有二
- 在activity set content之前寫死字型大小
- 字型大小: resource的fontscale數值
val resources: Resources = myactivity.getResources()
var fontScale:Float = 1.0f
if (resources != null && resources.getConfiguration().fontScale !== fontScale) {
val configuration: Configuration = resources.getConfiguration()
configuration.fontScale = fontScale
resources.updateConfiguration(configuration, resources.getDisplayMetrics())
}
// 在set content之前
setContent {
}
eset protect企業防毒軟體-虛擬設備初體驗
公司從2010年開始就使用eset防毒軟體, 採用中央控管的方式,這對網管來說有很大的幫助,
但是最近要續約, 新版本9.x居然不支援windows 2008R2 server, 公司又沒有windows 2012R2以上的作業系統, 於是我到官網找了一下,發現有虛擬設備的安裝方式, 支援vmware,virtualbox, 與hyper-v, 只可惜沒有支援Proxmox VE.

不過沒關係, 我下載後,看到檔案是ova格式, 之前有過經驗,解開裡面是vmdk格式, 查了一下裡面的檔案, 使用的是 ide 驅動, 4 GB磁碟空間, 4 GB RAM, 2 CPU.
第一步我先將vmdk轉檔轉成qcow2格式, 作法請參考這裡
接下來到pve server新增一個vm, 然後將轉換後的qcow2檔案,直接覆蓋上去, 就可以啟動, 並且依照指示設定就完成eset安裝了,非常方便.

android強制停用深色模式(Dark Theme)
android 10開始,已經支援Dark Them深色模式, 但程式若沒有調整好, 就會出現有些字憑空消失,或是圖片失真問題,
因此必須修改程式, 先強制停用深色模式, 再思考人生.
- Activity 加上以下程式 (若使用 AppCompat v1.1.0 ,可以不用加)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
- Activity的theme設定,增加 ( theme.xml 或是 style.xml )
<style name="MyAppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
<item name="android:forceDarkAllowed" tools:targetApi="q">false</item>
</style>
<activity
android:name=".MainActivity"
...
android:theme="@style/AppTheme" >
...
</activity>
