作者: william
移除windows 10或以後版本,路徑檔案超過260個字元
這真是很令人頭疼的問題, 預設是不能超過260個字元, 微軟說windows 10 1607版本後面,可以自行調整開啟長檔名的功能
從 Windows 10 1607 版開始,已從一般 Win32 檔案和目錄函式中移除MAX_PATH限制。 不過,您必須加入宣告新的行為
- 個人主機
修改reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001
或是改本機原則
Computer Configuration > Administrative Templates > System > Filesystem > Enable Win32 long paths
- 公司主機(網域主控群組原則)
- AD: windows 2012R2或之前的才需要這樣做
- 安裝最新版windows 10 管理範本
https://www.microsoft.com/en-us/download/103124 - 將windows 10管理範本複製到目前網域的群組原則
複製 C:\Program Files (x86)\Microsoft Group Policy\Windows 10 and Windows Server 2016\PolicyDefinitions
到
SYSVOL\domain\Policies\PolicyDefinitions - 重新執行群組原則設定, 就能看到 Enable win32 long paths
android kotlin coroutines
import kotlinx.coroutines.*
fun main() {
repeat(3) {
GlobalScope.launch {
println("Hi from ${Thread.currentThread()}")
}
}
}
- 非同步
import kotlinx.coroutines.*
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
val formatter = DateTimeFormatter.ISO_LOCAL_TIME
val time = { formatter.format(LocalDateTime.now()) }
suspend fun getValue(): Double {
println("entering getValue() at ${time()}")
delay(3000)
println("leaving getValue() at ${time()}")
return Math.random()
}
fun main() {
runBlocking {
val num1 = getValue()
val num2 = getValue()
println("result of num1 + num2 is ${num1 + num2}")
}
}
同步
import kotlinx.coroutines.*
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
val formatter = DateTimeFormatter.ISO_LOCAL_TIME
val time = { formatter.format(LocalDateTime.now()) }
suspend fun getValue(): Double {
println("entering getValue() at ${time()}")
delay(3000)
println("leaving getValue() at ${time()}")
return Math.random()
}
fun main() {
runBlocking {
val num1 = async { getValue() }
val num2 = async { getValue() }
println("result of num1 + num2 is ${num1.await() + num2.await()}")
}
}
job
val job: Job = GlobalScope.launch(Dispatchers.Main) {
// launch coroutine in the main thread
for (i in 10 downTo 1) { // countdown from 10 to 1
textView.text = "count down $i ..." // update text
delay(1000) // wait half a second
}
textView.text = "Done!"
}
job.cancel()
android kotlin viewBinding 新做法
寫android總是寫不好, 之前取得view要使用findViewByI的方式, 過了一段時間回頭看, 現在又改了改成使用viewBinding 說是比較快…
- gradle(module)
buildFeatures {
viewBinding = true
}
- main activity
class MainActivity : AppCompatActivity() {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
}
- 使用方式變簡單了
// 舊版
val myButton: Button = findViewById(R.id.my_button)
myButton.text = "A button"
// 新版
val myButton: Button = binding.myButton
myButton.text = "A button"
// Best way with view binding and no extra variable
binding.myButton.text = "A button"
取消itworks.ltd網域,改申請微笑台北 smile.taipei
windows 10列出usb連線裝置
我們外接usb裝置, 例如印表機, 讀卡機, 常常讀取失敗,也導致常常要換另外的usb孔測試
因此就需要這個軟體, 列出曾經連線過的usb裝置資訊, 必要時解除安裝其驅動程式,再重新安裝即可
https://www.nirsoft.net/utils/usb_devices_view.html
使用時請務必確認usb裝置未連接到主機
https://www.nirsoft.net/utils/usb_log_view.html
這個網站還有很多奇耙好用的小工具軟體
MacOS上可用的OpenVPN 用戶端
android app要自動下載最新版自我更新(不依靠play store)
apache httpd反向代理的妙用,QR code下載最新板
若需要製作QR Code 裡面放永久連結, 讓人家可以下載最新版本程式,
這時候可以使用 httpd 的反向代理, ,導到最新版本實際網址即可
ProxyPass /getLatestFile https://x.x.x.x/download/1.7.apk
android kotlin程式沒有靜態變數
反正kotlin我很弱啦, 簡單的說
class 外面定義變數就可以當作靜態變數屎用了
var iCounter = 0
class MainActivity : AppCompatActivity(), View.OnClickListener {
iCounter++
}