duangsuse::Echo
718 subscribers
4.26K photos
130 videos
583 files
6.48K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
做完了,很累... 火?... 可能不是用来做这个的
duangsuse::Echo
我决定现在做完了( VisualGimp 要火(求
This media is not supported in your browser
VIEW IN TELEGRAM
其实我不火的(如果好像不应该火的话

下面我要做一个『鸡你太美』(篮球 rap 系)

java annotation Processor,它有如下功能:

把所有类中叫 jntm 的方法都改名为 “鸡你太美”
把所有方法中叫 chick 的局部变量都改名为 “鸡”
把所有 @chick 注释的 class/instance field 都改名为 『鸡』

算是一个 Java Annotation Processor 的 "Hello World",毕竟我以后可能要利用 Java Annotation 扩展 Java 语言的(比如加入 Kotlin 的 in out 泛型语法,加入 val 语法)
说到 resources,

Android 平时容易用到这些 resources:

一般放在 sourceSet dir 的 res/ 下
java 的却是默认放在 resource/ 下,一般除了 properties 就没有别的了

res 由 AAPT 处理,在打包的时候打包进 apk 里

drawable mipmap ninepatch vector
menu layout anim
style theme
string dimen color id
attr

... emmm 忘了还有什么了(
https://github.com/Trumeet/EncoderBot/blob/master/src/main/kotlin/moe/yuuta/encoderbot/EncoderBot.kt
正准备使用 Scala 重写这个具有 Inline Keyboard/Callback Query 和 Inline Article 功能的 bot...

就是三种接口方式:

回复 Telegram

Message 普通消息
CallbackQuery 键盘回调
InlineQuery 内联机器人回调
第一次使用 #Java 的 Resources
第一次使用 #Scala sbt(死变态 emmm...
第一次使用 #Scala 的 experimental language feature: macros
虽然最后我还是放弃了继续写这些... 即便除了 bot 逻辑外的都写完了
duangsuse::Echo
虽然最后我还是放弃了继续写这些... 即便除了 bot 逻辑外的都写完了
This media is not supported in your browser
VIEW IN TELEGRAM
虽然 Scala 再去继承一下 TelegramBots 的 Api Class,使用 postfix operators 和 implicit conversation 和比 Kotlin 搞基的 Pattern matching 应该可以实现更优秀的可读性,而且这应用逻辑本身就不是多复杂...
duangsuse::Echo
虽然 Scala 再去继承一下 TelegramBots 的 Api Class,使用 postfix operators 和 implicit conversation 和比 Kotlin 搞基的 Pattern matching 应该可以实现更优秀的可读性,而且这应用逻辑本身就不是多复杂...
比如说,Scala 的 Postfix Operators

import scala.language.implicitConversions
import scala.language.postfixOps

final implicit class HelloableString(val m: String) {
def ! : String = s"Hello, $m"
def unary_! = this.!
override def toString = m
}

scala> !"duangsuse"
res0: String = Hello, duangsuse

scala> "duangsuse".!
res1: String = Hello, duangsuse

scala> "duangsuse"!
res2: String = Hello, duangsuse


比起 Jawa, Kotlin 里不断 execute(Query) 好多了...
有的时候觉得经验和记忆力重要,因为不会记住那些接口就不能编程了呢....
即便会怎么怎么样,可能比擅长编写应用的人们更适合去学习算法什么的,但是好像也不怎么样

又有时候会觉得对模型的直觉很重要

也有时候会觉得设计和分析的能力很重要....
因为能写很多真正能让人看不懂的东西,而不是容许一切复杂性都被藏在一些简单的东西后面

所以,到底是使用接口的知识『广度』大好呢,还是分析能力『深度』大好呢... 🤔

这是一个值得考虑的问题
Forwarded from METO 的涂鸦板
🌚 你写 PHP 7.4 的样子好像 Node.js

* 新特性汇总
* RFC:箭头函数语法
* RFC:数组解构语法
METO 的涂鸦板
🌚 你写 PHP 7.4 的样子好像 Node.js * 新特性汇总 * RFC:箭头函数语法 * RFC:数组解构语法
上面的作为比较可以看看用 #Haskell 怎么写:

parts = ["apple", "pear"]
fruits = ["banana", "orange"] ++ parts ++ ["watermelon"]

fruits == ["banana","orange","apple","pear","watermelon"]

因为 Haskell 没有『Spread operator』所以就用 (++) 替换了,虽然说 spread operator 也不是魔法的就能实现把『item』里的东西全都 flat 添加到集合里的能力了,势必也得做额外的支持

result = f [1, 2] where f = (sum . ((*2) <$>))

(putStrLn . show :: Int -> IO ()) result

其中 sum 的定义是

sum [] = 0
sum (x:xs) = x + sum xs

或者,用 foldl 定义(非 point-free 版本)

sum xs = foldl (\ac x -> ac + x) 0 xs

(.)
就是 compose 啦(

(sum . ((*2) <$>))
就是

(\xs -> sum (map (* 2) xs))

(*2)
是柯里化的 (*)
(*) :: Num a => a -> a -> a

拿到一个 Num a 以后还要一个 Num a(因为有交换律 transitive 所以不用考虑顺序)就可以得到乘积
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from dnaugsuz
想写一个支持 Lexical Scoping JVM 上的解释器...
最近是不知道该做什么,想做的太多了,时间太少了,又不会休息... 效率低下精力损失
思量着写点异步的应用学习一下 Events/Callback/Promise/Coroutine/AwaitAsync/Threads 什么的?