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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from dnaugsuz
不过这次就这样了,下次注意点。
Forwarded from dnaugsuz
你没被踢都是好的了,我直接被 @Pythonzh 封了,还删了所有消息,之前我发的代码/文件都删了。
Forwarded from dnaugsuz
不仅不应该怪他们,还应该感谢他们保持了克制,没有赶尽杀绝,因为以后你完全可能遇到更严苛的群友。
说这些话的时候整个人都幼齿了,虽然我已经满 18 了。
反正就是这样,我觉得略微透明一点更好。
duangsuse 是什么时候开始这么自由的把流程和数据依赖利用各种闭包拆开 hack 的呢……

这么做的根本原因好像是为了让代码更好看、更有复用性吧

那又是从何时开始注重「好看的代码」了呢……

好像是从不断重写同一段逻辑开始的吧。

那可不可以把同一个算法,利用不同的语言、不同的框架、不同的建模方法和控制流/内存利用实现细节写很多遍呢……
这样的话又会变得奇怪了啊……
除非写 Lisp,我习惯的是让代码从直觉上易于理解。尽量采用语言本身特性,然后从结构角度抽象,尝试简化控制流或者重构,最后再考虑从其他的角度进行抽象。
duangsuse::Echo
除非写 Lisp,我习惯的是让代码从直觉上易于理解。尽量采用语言本身特性,然后从结构角度抽象,尝试简化控制流或者重构,最后再考虑从其他的角度进行抽象。
仅仅简化控制流是不够的,还要顾及数据流。算法虽然主要是「程序」,但它的目标是「数据」。

大佬说 OOP 的 message passing (to receiver) 不如 Haskell 复用性高,我只能说是仁者见仁。 Haskell 可以把数据和算法一起建模但它不像 OOP 有继承和封装,而我说的是“复用性”
Forwarded from dnaugsuz
特别来给 Rachel 提建议。
首先, 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
#PL 晚上散步的时候忽然回想到部分绝句设计细节🤔

绝句亮点特性:
逗号表示法、中缀否定、记法、中缀链、人称文法

顺序:
事/回 (回重写、回交)

分支控制流:
若/判 (「判你」 是第二人称)

循环控制流:
重复/对 (「对…里的……」 是第三人称)
停下、略过

第二人称还包括 且/或链
第三人称还包括 中缀链

绝句的 label 定义,对 block 是 ,[] 对控制结构是 对[]
引用则是 [^]

值绑定模式:
常/变/量

只有 量 可以类型推导, 常/变 直接跟后面写类型。

真假 字
字节 短数 数 长数
短实 实

类/物/例
储物 例物 况物 标物
扩物 内物 抽象物

公开 族内 私下 内部

抽象/实现 开放/终定/覆写 记法
晚成
尾递归 断续
为了吹哨人、发哨人,以及所有为了疫情努力过的人(当然,显然我不包括在其中)
本频道 image 象征性灰今明两天。 #Telegram #China

#Python Pillow:
from PIL import Image
def grayifyFile(name):
img = Image.open(name)
img.convert("L").save(name.rsplit(".")[0])

grayifyFile("image.png")

OpenCV #CV #Cplusplus:
#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)
project(gray)

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} "gray.c++")
target_link_libraries(gray ${OpenCV_LIBS})

gray.c++
#include <cv.hpp>
#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;
}

#Kotlin + #java.awt.image:
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
}
Channel photo updated
Forwarded from dnaugsuz
草,这个状态机实在是太 ** 了
Forwarded from dnaugsuz
没有注意到必须有一个栈,而且这个栈还得决定参数得添加到哪个 CallAST.Call 参数列表里,我发现我用 for 的设计就是个错误…… 本来打算快速弄完了的
Forwarded from dnaugsuz
我应该用递归下降法的
Forwarded from dnaugsuz
之前写的 lexer 也很草
Forwarded from dnaugsuz
说了这句话我就开始写,结果发现我自己其实也就是个弟弟