Forwarded from dnaugsuz
特别来给 Rachel 提建议。
首先, print("=== a ===") 可以抽提:
然后, context?.let {...} 可以换成
顺便引一个官方文档: Scope functions
首先, print("=== a ===") 可以抽提:
private fun title(text: String) = println("=== $text ===") 然后, context?.let {...} 可以换成
context?.run {
getSharedPreferences("emm").all.forEach { print("${it.key} ${it.value}") }
}
另外我建议在这种 block 嵌套的情况下使用 for (item in items) 而非 Iterable.forEach 。顺便引一个官方文档: Scope functions
Forwarded from Rachel 碎碎念 (IFTTT)
Kotlin 的语法糖写起来是真的舒服
虽然已经火星很多年
但是毕竟最近才重拾所以 pic.twitter.com/54mzUti90W— Rachel 呱 (@tangrui003) April 3, 2020
虽然已经火星很多年
但是毕竟最近才重拾所以 pic.twitter.com/54mzUti90W— Rachel 呱 (@tangrui003) April 3, 2020
Twitter
Rachel 呱
Kotlin 的语法糖写起来是真的舒服 虽然已经火星很多年 但是毕竟最近才重拾所以
#PL 晚上散步的时候忽然回想到部分绝句设计细节🤔
绝句亮点特性:
逗号表示法、中缀否定、记法、中缀链、人称文法
顺序:
事/回 (回重写、回交)
分支控制流:
若/判 (「判你」 是第二人称)
循环控制流:
重复/对 (「对…里的……」 是第三人称)
停下、略过
第二人称还包括 且/或链
第三人称还包括 中缀链
绝句的 label 定义,对 block 是 ,[] 对控制结构是 对[]
引用则是 [^]
值绑定模式:
常/变/量
只有 量 可以类型推导, 常/变 直接跟后面写类型。
真假 字
字节 短数 数 长数
短实 实
类/物/例
储物 例物 况物 标物
扩物 内物 抽象物
公开 族内 私下 内部
抽象/实现 开放/终定/覆写 记法
晚成
尾递归 断续
绝句亮点特性:
逗号表示法、中缀否定、记法、中缀链、人称文法
顺序:
事/回 (回重写、回交)
分支控制流:
若/判 (「判你」 是第二人称)
循环控制流:
重复/对 (「对…里的……」 是第三人称)
停下、略过
第二人称还包括 且/或链
第三人称还包括 中缀链
绝句的 label 定义,对 block 是 ,[] 对控制结构是 对[]
引用则是 [^]
值绑定模式:
常/变/量
只有 量 可以类型推导, 常/变 直接跟后面写类型。
真假 字
字节 短数 数 长数
短实 实
类/物/例
储物 例物 况物 标物
扩物 内物 抽象物
公开 族内 私下 内部
抽象/实现 开放/终定/覆写 记法
晚成
尾递归 断续
为了吹哨人、发哨人,以及所有为了疫情努力过的人(当然,显然我不包括在其中)
本频道 image 象征性灰今明两天。 #Telegram #China
#Python Pillow:
CMakeLists.txt
本频道 image 象征性灰今明两天。 #Telegram #China
#Python Pillow:
from PIL import ImageOpenCV #CV #Cplusplus:
def grayifyFile(name):
img = Image.open(name)
img.convert("L").save(name.rsplit(".")[0])
grayifyFile("image.png")
#include <cxcore.h>(不是的)
#include <vector>
#include <cv.h>
#include <highgui.h>
#include <errno.h>
#include <dirent.h>
#include <iostream>
#include <queue>
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)gray.c++
project(gray)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} "gray.c++")
target_link_libraries(gray ${OpenCV_LIBS})
#include <cv.hpp>#Kotlin + #java.awt.image:
#include <opencv2/imgproc/imgproc.hpp>
#include <highgui.h>
using namespace cv;
const char* TITLE_GRAY = "Gray Image";
int main() {
namedWindow(TITLE_GRAY, CV_WINDOW_AUTOSIZE);
Mat img = imread("image.jpg");
Mat gray_img; cvtColor(img, gray_img, CV_BGR2GRAY);
imshow(TITLE_GRAY, gray_img); waitKey();
imwrite("image_bw.jpg", gray_img);
return 0;
}
import java.io.File
import javax.imageio.ImageIO
import java.awt.image.BufferedImage
import java.awt.image.RenderedImage
object Img {
@JvmStatic fun main(vararg args: String) {
val image = ImageIO.read(File("image.jpg"))
val image_gray = image.mapPixels(::luma)
image_gray.writeTo("image_bw.jpg")
}
fun BufferedImage.mapPixels(transform: (Int) -> Int): BufferedImage {
val newImg = BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)
for (y in 0 until height)
for (x in 0 until width)
newImg.setRGB(x, y, transform(this.getRGB(x, y)))
return newImg
}
fun RenderedImage.writeTo(path: String) {
ImageIO.write(this, path.substringAfter("."), File(path))
}
/** R * 299/1000 + G * 587/1000 + B * 114/1000 */
//see also https://www.cnblogs.com/bixiaopengblog/p/7462961.html
fun luma(rgb: Int): Int {
val (r, g, b) = unpackRGB(rgb)
val lum = r * 299/1000 + g * 587/1000 + b * 114/1000
return repackRGB(lum, lum, lum)
}
fun repackRGB(r: Int, g: Int, b: Int): Int = (r shl 16) or (g shl 8) or b
fun unpackRGB(rgb: Int): IntArray = intArrayOf(rgb byte 2, rgb byte 1, rgb byte 0)
private infix fun Int.byte(n: Int) = this shr (n*8) and 0xFF
}
Forwarded from dnaugsuz
没有注意到必须有一个栈,而且这个栈还得决定参数得添加到哪个
CallAST.Call 参数列表里,我发现我用 for 的设计就是个错误…… 本来打算快速弄完了的Forwarded from dnaugsuz
构造
看来整个都没有用了,毕竟是递归结构……
我根本不清楚到底要写什么…… 一开始就给整的 generator,我都忘了本来是
Call(callee, param) 的时候突然发现自己扫 callee 的时候没存。看来整个都没有用了,毕竟是递归结构……
我根本不清楚到底要写什么…… 一开始就给整的 generator,我都忘了本来是
# Expr = name '(' Expr {',' Expr}? ')' | name | digits
# predefined names: True, False, Nonecall_syntax.py
3.2 KB
In [4]: parse(tokenize("dsds(True,False,None,dss(232))"))
Out[4]: Call('dsds', [Const(True), Const('False'), Const('None'), Call('dss', [Const(232)])])
又不是不能用(暴论Forwarded from dnaugsuz
就因为 Iterator 没打算写 lookahead (因为我把这个当 feature,认真的)
然后这里又没有 ParserKt 的 contextual,就顺手用了 exception 来处理需要 lookahead 的 Name / Call…… 正常返回是 name、abnormal termination 是读到 ',' 了
结果就把
我就顺手给
但是还是可以用,我就 ***了
大概就是想把 lookahead 变成在栈上 "lookbehind",结果失败了草(name 的后面一个 token 肯定是 '(' 或 ',' ,但应该取决于是不是在括号内才对啊……)
ParserKt 可以处理这种文法,不过是通过
完全不支持 lookahead 真的可行吗……其实支持也不需要花多大力气
然后这里又没有 ParserKt 的 contextual,就顺手用了 exception 来处理需要 lookahead 的 Name / Call…… 正常返回是 name、abnormal termination 是读到 ',' 了
结果就把
Expr {',' Expr} 写出了这种清奇的画风,又因为 toplevel() 也可能读到闭括号(我没做好读取数据处理域控制)我就顺手给
toplevel() 加了个逻辑……但是还是可以用,我就 ***了
大概就是想把 lookahead 变成在栈上 "lookbehind",结果失败了草(name 的后面一个 token 肯定是 '(' 或 ',' ,但应该取决于是不是在括号内才对啊……)
ParserKt 可以处理这种文法,不过是通过
Piped 解析器处理的,如果读完 Name 后还能找到 ( 的话就可以再继续读下一部分,否则直接返回无消耗,前提是 k=1完全不支持 lookahead 真的可行吗……其实支持也不需要花多大力气
dnaugsuz
就因为 Iterator 没打算写 lookahead (因为我把这个当 feature,认真的) 然后这里又没有 ParserKt 的 contextual,就顺手用了 exception 来处理需要 lookahead 的 Name / Call…… 正常返回是 name、abnormal termination 是读到 ',' 了 结果就把 Expr {',' Expr} 写出了这种清奇的画风,又因为 toplevel() 也可能读到闭括号(我没做好读取数据处理域控制) 我就顺手给 toplevel()…
这个
在 Toplevel 里,
可以预读 name 后面的 punctuation ,但是总有不像预期的
为了复用 Toplevel 解析器,就必须做到对非 expected token 情况的处理,比如把预取的东西放回去,看等下别的子解析器会处理——最简单的做法
否则的话,Toplevel 里有一套
一般来说,lookahead 并不是一件特别难的事情好不好…… 这个文法就可以用 LL(1) 流,只需在读完 name 后看一下 peek 是不是 '(' 即可 disambiguate 了。
ParserKt 之所以可以用 Piped,是因为它的流本身带一个 peek(1) 的能力,相当于 lookahead-1 的文法都是支持的,但它没法优雅地支持更多 lookahead、更复杂的文法了。
name',' 的问题可以视为是一个代码复用性的问题。 #PLT #DontKnow在 Toplevel 里,
name '(' ;在 Call 里, name ',' 可以预读 name 后面的 punctuation ,但是总有不像预期的
( 那样的情况,这时就需要特殊处理为了复用 Toplevel 解析器,就必须做到对非 expected token 情况的处理,比如把预取的东西放回去,看等下别的子解析器会处理——最简单的做法
否则的话,Toplevel 里有一套
disambigNameCall 、Call 里面的另一套不仅预取继承自 Toplevel 的,还得有为 ',' 时继续扫描下一个逗号切分项目的能力(可以用异常之类的传递,但那没法类型安全)一般来说,lookahead 并不是一件特别难的事情好不好…… 这个文法就可以用 LL(1) 流,只需在读完 name 后看一下 peek 是不是 '(' 即可 disambiguate 了。
ParserKt 之所以可以用 Piped,是因为它的流本身带一个 peek(1) 的能力,相当于 lookahead-1 的文法都是支持的,但它没法优雅地支持更多 lookahead、更复杂的文法了。
Forwarded from Fan Dang
话说 vertx deploy 多个实例,为啥他们能共用一个 tcp 端口?(指 HTTP 服务
