https://github.com/Trumeet/WorkMode/tree/master/app/src/main/java/moe/yuuta/workmode
最后总结一下我要开始默写那个包了...
UI 和相关操作逻辑:
suspend: 状态栏 suspend Tile
root package: 应用程序活动
widget: 辅助 UI 控件
update: 自动更新提示
抽象:
access: Android 系统包启用禁用 API 的访问封装,Service
async: AsyncTask 封装
辅助:
utils
最后总结一下我要开始默写那个包了...
UI 和相关操作逻辑:
suspend: 状态栏 suspend Tile
root package: 应用程序活动
widget: 辅助 UI 控件
update: 自动更新提示
抽象:
access: Android 系统包启用禁用 API 的访问封装,Service
async: AsyncTask 封装
辅助:
utils
GitHub
Trumeet/WorkMode
[ROOT needed] Enjoy your work and disable disturbing apps - Trumeet/WorkMode
duangsuse::Echo
https://github.com/Trumeet/WorkMode/tree/master/app/src/main/java/moe/yuuta/workmode 最后总结一下我要开始默写那个包了... UI 和相关操作逻辑: suspend: 状态栏 suspend Tile root package: 应用程序活动 widget: 辅助 UI 控件 update: 自动更新提示 抽象: access: Android 系统包启用禁用 API 的访问封装,Service async: AsyncTask…
这个包包含:
可以随时 cancel 也可以类似 Promise 地在完成后添加逻辑处理异步结果
当然也可以理解为一个只有 Callback (TaskResult) 的 Promise,没有 resolve 和 reject,只有 then 没有 catch,反正就是类似 Promise 的东西
object Async {
fun <T> beginTask(runnable: Runnable<T>, callback: Callback<T>): Stoppable
}
interface Runnable<T> {
fun run(): T?
}
data class TaskResult<T>(
val successful: Boolean,
val result: T?,
val e: Throwable?
)
interface Callback<T> {
fun onStart() {}
fun onStop(success: Boolean, result: T?, e: Throwable?) {}
}
interface Stoppable {
fun stop()
fun isStopped(): Boolean
}
class StoppableGroup : Stoppable {
override fun stop()
override fun isStopped(): Boolean
fun add(Stoppable)
fun remove(Stoppable)
}
其实 C# FCL 里也有类似的东西,就是一个 Cancelable and Thenable Task可以随时 cancel 也可以类似 Promise 地在完成后添加逻辑处理异步结果
当然也可以理解为一个只有 Callback (TaskResult) 的 Promise,没有 resolve 和 reject,只有 then 没有 catch,反正就是类似 Promise 的东西
duangsuse::Echo
Photo
其实我不懂 Kotlin... 即便是 Kotlin 极简教程上也没讲 Kotlin 元编程
我不知道
我不知道
by operator 是怎么工作的...刚才看了一些 Android API28 平台包,了解到了:
+ android.os.Paracel 其实就是 Android 的 Protobuf,被称为 Message 的...
+ Praacelabel 就是可以写到 Paracel 上的东西...
+ android.os.Bundle 就是有类型检查的 Map
+ android.content.Intent 有 Category, Action 和 ClassName
+ android.util.ArrayMap 的容器(bin)是 Array 而不是 LinkedList、扫描算法是二分查找,故此称为 ArrayMap
+ 有一个 android.util.SparseArray 但我不知道是哪种东西
+ Android 有内建的 JSON 和 Base64 支持
+ 如果你要在 Gradle 里用
然后搜索 Android Plugin 的源代码并最终发现其实 Andriod 插件所谓的“不兼容”不是指 Java 插件版本不兼容,而是 android 根本不能和 java 一起 apply...
必须用
+ Kotlin JVM 的默认 Maven coordinates: "org.jetbrains.kotlin:kotlin-stdlib-jdk8:+"
+ Android AndroidManifest XML 的 Schema URI: "http://schemas.android.com/apk/res/android"
+ android.os.Paracel 其实就是 Android 的 Protobuf,被称为 Message 的...
+ Praacelabel 就是可以写到 Paracel 上的东西...
+ android.os.Bundle 就是有类型检查的 Map
+ android.content.Intent 有 Category, Action 和 ClassName
+ android.util.ArrayMap 的容器(bin)是 Array 而不是 LinkedList、扫描算法是二分查找,故此称为 ArrayMap
+ 有一个 android.util.SparseArray 但我不知道是哪种东西
+ Android 有内建的 JSON 和 Base64 支持
+ 如果你要在 Gradle 里用
plugin: 'com.android.library' 和 plugin: 'kotlin'
不能这么做,要不然你就会和我一样浪费至少半个小时的时间调整 Gradle 和 Gradle Android 的版本...然后搜索 Android Plugin 的源代码并最终发现其实 Andriod 插件所谓的“不兼容”不是指 Java 插件版本不兼容,而是 android 根本不能和 java 一起 apply...
必须用
plugin: 'kotlin-android' 替换默认 kotlin+ Kotlin JVM 的默认 Maven coordinates: "org.jetbrains.kotlin:kotlin-stdlib-jdk8:+"
+ Android AndroidManifest XML 的 Schema URI: "http://schemas.android.com/apk/res/android"
duangsuse::Echo
Photo
AsyncTask 其实就是基于消息队列事件的异步,是解决 Android 的 "UI 线程" "Worker Thread" 不对称问题的
Forwarded from Telegram Beta
Now you can share the public channel's link and view the content in a browser.
Copy and open it in a browser:
t.me/s/durov
t.me/s/telegram
t.me/s/tgbeta
t.me/s/username
Note:
The contents aren't updated real time, currently for preview.
Credit: KeralaGram
Copy and open it in a browser:
t.me/s/durov
t.me/s/telegram
t.me/s/tgbeta
t.me/s/username
Note:
The contents aren't updated real time, currently for preview.
Credit: KeralaGram
https://t.me/s/dsuse 这样看起来会方便很多,也给了我用 Telegram 而不是写 Markdown/HTML 的动力
duangsuse::Echo
data Maybe a = Just a | Nothing deriving Eq, Show instance Functor Maybe where fmap f (Just x) = Just <$> f x fmap f Nothing = Nothing instance Monad Maybe where return x = Maybe x (Just x) >>= f = f x Nothing >>= _ = Nothing 其中 Fuctor 就是 Functor...…
(define (histogram vector-of-words)
(define hash (make-hash))
(for ([word (in-vector vector-of-words)])
(hash-set! hash word (add1 (hash-ref hash word 0))))
hash)
(letrec([l '(pure monkey made a salted monkey soup)])
(histogram (list->vector l)))
;
'#hash((made . 1) (salted . 1) (soup . 1) (a . 1) (pure . 1) (monkey . 2))
所以 #Racket 还是很过程式的?(从这个角度看,王垠在某个程度上还真是... 很灵性呢... 🙈
duangsuse::Echo
Racket 附赠的 IDE DrRacket 可以干多少种同类冷门语言来着
DrRacket 这个可以赞,Racket 的用途的确是广
这一点比 Haskell 强多了,Haskell 虽然是因为理论基础的原因(比 Scheme 那时候使用的抽象基础高级多了,不仅仅是 Lambda Calculus & Lexical Scoping 的那种函数式),但是“工业化”Haskell 基本没见到什么成效(
duangsuse::Echo
(就是…体积…🌚我说 Racket 装完怎么好几百 MB 又没了
体积都是小事情
Scheme 实现有好多的
Lisp 是家族最庞大的语言...
Scheme 实现有好多的
Lisp 是家族最庞大的语言...
duangsuse::Echo
instance Monad (Reader t) where return :: a -> Reader t a return x = Reader (\_ -> x) (>>=) :: Reader t a -> (a -> Reader t b) -> Reader t b (Reader g) >>= f = Reader $ \x -> runReader (f (g x)) x
#Haskell emmm 稍微又看懂了一些,可是 eta 和 mu 就是很难懂啊!
newtype Reader t a = Reader { runReader :: t -> a }
instance Functor (Reader t) where
fmap f (Reader g) = Reader (\x -> f (g x))
instance Applicative (Reader t) where
pure = return
Reader f <*> Reader g = Reader $ \x -> (f x) (g x)
instance Monad (Reader t) where
return x = Reader (\_ -> x)
Reader f >>= g = Reader (\x -> runReader (roll x) x)
where
roll = g . f
ask :: (t -> a) -> Reader t a
ask f = Reader (\x -> f x)
data Enviroment = Env { name :: String, price :: String }
deriving (Eq, Show)
dogeR :: Reader Enviroment String
dogeR = do
name <- ask name
price <- ask price
return (name ++ ": $" ++ price)
doge = runReader dogeR (Env "world" "-1")
其实是我又摸瞎写了一遍... 可是我花了很长时间,而且我并不能知道它是怎么工作的... 我得想想...