chillwind's recent timeline updates
chillwind

chillwind

V2EX member #152281, joined on 2015-12-21 12:00:14 +08:00
这里有搞鸿蒙开发的兄弟吗?遇到一个布局问题
Android  •  chillwind  •  Feb 10, 2025  •  Lastly replied by ZGame
20
gpt4 又开始报错误 Something went wrong 了?
OpenAI  •  chillwind  •  Jul 7, 2024  •  Lastly replied by daishuge
2
碰到个非常奇怪的问题, mvn 启动不了了
Java  •  chillwind  •  Nov 5, 2023  •  Lastly replied by szq8014
3
像滴答清单这种提醒弹框是怎么实现的?
Android  •  chillwind  •  Jul 2, 2022  •  Lastly replied by antinads
6
iOS Core Graphics 画圆角矩形的问题
  •  1   
    iDev  •  chillwind  •  Oct 26, 2020  •  Lastly replied by ysc3839
    1
    一段 object c 代码想转 Swift ,有什么方法吗?
    macOS  •  chillwind  •  Aug 29, 2020  •  Lastly replied by zyc199847
    5
    android 小组件的问题?
    Android  •  chillwind  •  Aug 11, 2020
    chillwind's recent replies
    那个鼠标能适配 mac 电脑?不需要安装驱动也能很好用的。之前用罗技需要安装驱动,但那个驱动非常占系统资源,老旧的 inter 芯片的电脑
    不行,只要高度设置了.height('100%'),这个 Row 就会占据整个屏幕剩余的区域
    @ml1344677 我的还是不行,有个请求浏览器控制台有报错 ,搞不清楚什么原因 password?state=hKFo2SBLbG5ERXlobmEwSnFPQ2hXM0dPcnU0aEM5XzBSU3dobKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEZ5aTdrUkhaSm9GdFYzRDJTQnNsZ25OTXZ4c0U2TFM3o2NpZNkgVGRKSWNiZTE2V29USHROOTVueXl3aDVFNHlPbzZJdEc:642 GET https://chatgpt.com/backend-api/sentinel/sdk.js net::ERR_BLOCKED_BY_RESPONSE.NotSameOrigin 403
    @ml1344677 是的,登录按钮无法点击。我一般用无痕模式,之前登录的窗口发不了消息
    Jun 18, 2024
    Replied to a topic by KotoLyly OpenAI chatgpt 付费账号无法响应
    @AiBoy 怎么处理的?被这个问题困扰好多天了
    同搬瓦工,会话一次就要刷新一次
    @zw1234 求拉 base64 Y2hpbGx3aW5kdGFu
    Jan 13, 2021
    Replied to a topic by chillwind Android 像滴答清单这种提醒弹框是怎么实现的?
    @vone 应该不是,切换完其他 app 这个悬浮窗应该会消失。而且没有给 SYSTEM_ALERT_WINDOW 权限
    看了半天 swift,自己人肉转了一个。用的不对的地方,还请各位指正
    ```
    import Foundation
    import CommonCrypto

    struct AES {

    // MARK: - Value
    // MARK: Private
    private let key: Data
    // MARK: - Initialzier
    init?(key: String) {
    guard key.count == kCCKeySizeAES128 || key.count == kCCKeySizeAES256, let keyData = key.data(using: .utf8) else {
    debugPrint("Error: Failed to set a key.")
    return nil
    }


    self.key = keyData

    }


    // MARK: - Function
    // MARK: Public
    func encrypt(string: String) -> Data? {

    let iv = randomGenerateBytes(count: 16)!

    let cryptData = crypt(data: string.data(using: .utf8), iv: iv, option: CCOperation(kCCEncrypt))!

    var hmac = Data(count: 32)
    cryptData.withUnsafeBytes { v in
    hmac.withUnsafeMutableBytes { res in
    key.withUnsafeBytes { k in
    CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), k.baseAddress!, key.count, v.baseAddress!, cryptData.count, res.baseAddress!)
    }
    }
    }

    let messageData = NSMutableData()
    messageData.append(iv)
    messageData.append(cryptData)
    messageData.append(hmac)

    return messageData as Data
    }

    func decrypt(data: Data) -> String? {
    //验证数据
    let ivByteData = data.subdata(in: 0..<16)

    let contentByteData = data.subdata(in: 16..<(data.count - 32))

    let serverHmacData = data.subdata(in: (data.count - 32)..<data.count)
    print(data.count)


    var hmac = Data(count: 32)
    contentByteData.withUnsafeBytes { v in
    hmac.withUnsafeMutableBytes { res in
    key.withUnsafeBytes { k in
    CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), k.baseAddress!, key.count, v.baseAddress!, contentByteData.count, res.baseAddress!)
    }
    }
    }

    if (serverHmacData == hmac) {
    let decryptedData = crypt(data: contentByteData, iv: ivByteData, option: CCOperation(kCCDecrypt))
    return String(bytes: decryptedData!, encoding: .utf8)
    } else {
    print("HMac 不一致")
    return nil;
    }


    }

    func crypt(data: Data?, iv: Data, option: CCOperation) -> Data? {
    guard let data = data else { return nil }

    let cryptLength = data.count + kCCBlockSizeAES128*2
    var cryptData = Data(count: cryptLength)

    let keyLength = key.count
    let options = CCOptions(kCCOptionPKCS7Padding)

    var bytesLength = Int(0)

    let status = cryptData.withUnsafeMutableBytes { cryptBytes in
    data.withUnsafeBytes { dataBytes in
    iv.withUnsafeBytes { ivBytes in
    key.withUnsafeBytes { keyBytes in
    CCCrypt(option, CCAlgorithm(kCCAlgorithmAES128), options, keyBytes.baseAddress, keyLength, ivBytes.baseAddress, dataBytes.baseAddress, data.count, cryptBytes.baseAddress, cryptLength, &bytesLength)
    }
    }
    }
    }

    guard UInt32(status) == UInt32(kCCSuccess) else {
    debugPrint("Error: Failed to crypt data. Status \(status)")
    return nil
    }

    cryptData.removeSubrange(bytesLength..<cryptData.count)

    return cryptData
    }


    func randomGenerateBytes(count: Int) -> Data? {
    let bytes = UnsafeMutableRawPointer.allocate(byteCount: count, alignment: 1)
    defer { bytes.deallocate() }
    let status = CCRandomGenerateBytes(bytes, count)
    guard status == kCCSuccess else { return nil }
    return Data(bytes: bytes, count: count)
    }
    }

    ```
    @DeweyReed 今天试了一下 paging + room,通过 onZeroItemsLoaded 初始化数据,onItemAtEndLoaded 拉取后面的数据,测试基本功能可用,但是 onItemAtFrontLoaded 数据会有问题,onItemAtFrontLoaded 开始就会执行,而且 RecyclerView 定位到 onItemAtFrontLoaded 的第一条数据,而不是 onZeroItemsLoaded 的第一条数据。不知道是不是我对 PagedList.BoundaryCallback 理解不对,还是有别的方法?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5714 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 08:50 · PVG 16:50 · LAX 01:50 · JFK 04:50
    ♥ Do have faith in what you're doing.