duangsues.is_a? SaltedFish
60 subscribers
609 photos
6 videos
91 files
562 links
🌶🐔🐟 duangsuse 的日常
尤其喜欢发些奇奇怪怪的东西
和转载别人的东西
Download Telegram
duangsuse: #statement
洗脑是把人非黑即白极端化 ,比如80分等于0分 的这种酸民

yfzhe:
不极端化就不是洗脑了?

duangsuse:
你看,这就符合“80分等于0分” 的逻辑错误

政治课都是和现实相悖的,比如一些人喜欢讽刺民主和资本, 但中国台面上标榜民主、对民企家时软时硬

其实俄国的体制就比中国平权,啥都更自由。 普京爹也是满足了苏联粉的“全球化”心理 才引火战争的(虽然马上战败了)

没关系,中国已经没法“去经济化” 回到朝鲜了, 未来冲突是不可避免的

Laoself :
是這樣(

duangsuse:
气死, 穷人连名字也要被夺走 ,哪有这样的
为什么要搞阶级对立,没有下议院、平权这些……

你问bing ,它会说人民民主专政 “民主“ ”专政” 就是冲突的

你可能需要看《走向共和》与三民主义 ,家天下、姓天下、阶级天下 都是变相的皇权

所谓阶级不可调和的正义,那就是 屠龙变恶龙的阶级洗牌
不存在什么善统治恶,只有“人”拥有恶 。共产舶来之前,那些寒门翻身的皇帝是怎么倒的?

不存在弱人统治强人,只有强弱统治人 ,你顺着马克思的逻辑。
嫉妒和空想,是孕育共产主义的温床,其实一旦欧盟式团结出不同国家、阶级间能争论底线的程序正义,马克思内斗论不攻自破。

人家法美好歹有200年的真共产经验,列宁扫六合时,美国农民早有宪法和议院了

鲁迅有句中国人逻辑: 爱国的人,要骂逆贼,是不错的;既然我骂你,我爱国,你就是工贼实锤了
在自由派理解下,只是两个公民群体;马克思下这就是敌我阶级。


其实这是很符合中国传统的。 打下来的天下要坐稳, 一定不能开放党禁 法禁

所以说鲁迅 孙中山 在国共两边都很讨好 ,真伪君子 在真小人眼里还是有区别的

duangsuse:
类似于红军,也是兼有宣传机构

人民斗得热火朝天,他这个将军倒是爽了

反正威胁不到它呗 ,不过是饥荒时期一些狗官 ,被反过来报复夺权

就是忠于个人崇拜,反刘少奇,才搞文革的 ;像金三胖

严格来说只有腊肉是狗 ,县委基层都是狗腿子 ,其他人无论以为自己手举谁的旗,都是矿

腊肉可是很牛的,沁园春:秦皇汉武都不若今朝英雄
这个人完全视为生命和承诺为草芥,一将功成万骨枯,是比希特勒更恐怖,毕竟枪口对内

nazi和毛共都是共产主义,极左和极右(侵略vs内乱), 最终都把阶级斗争玩脱了

焚书坑儒确实比不上岳飞庙都被捣毁的文革

duangsuse:
保皇和造反派,太子党和皇后党…… 五千年的难题啊 ,毛大佐也是有关系网的

那是幸运,有些人自己亲妈都举报。毙了
这些脑残文人皇帝成天霍霍屁民

中共的利益重分配(切蛋糕),以老百姓不造反为基准 ,这砖家说的

就很马克思,没有死活斗争外的价值

所以说关键在公平 ,总统不能权力通吃

duangsuse:
GFW 蛤蛤当时是以迫害法轮功的名义立的

其实法轮功也多是因为计划经济崩盘 、国企裁员 的受害者
但他们组织起来了, 是不好惹的,给蛤整怕了

崩溃就是改革开放之后的国有制公司转手

怎么可能是被迫呢?自己印钞自己赢 ,包括现在什么河南储户也是

美国美金是有信用、自由兑换的,不然赵家拿那个干什么,为啥不存人民币

就说同时期的硅谷银行暴雷吧, 本来中国可以借此叼盘转移矛盾, 结果联邦政府(美国联邦存款保险公司 FDIC)接盘了

它的基础是有竞争力的高新产业,这个世界第一…… 乌克兰也很有余粮啊

农业只能满足温饱,经济价值太高就不符合人类需求金字塔

『米国』 就很有意思,在中文应该是米字旗英国
据说台语俄国是饿国

duangsuse:
这些军事实力,只是科学经济实力的具象化,根源是公正和自由多元化

互相毁灭的威慑不能带来财富,只能导致躺平,朝鲜就很穷。

美在经济上是比较右派 ,治安取决于区域纳税的数量

它就是什么事都盖不住、哪家流浪汉/非法移民都赶不跑,体感上美国很乱很落后,但和玩内部殖民的中国比 反而好点

是的,川宝和败灯个人气质都很垃圾
虽然比那头200斤好

当然国会、同党的权重是比个人要高

最近还被追诉性骚扰要赔钱😂

duangsuse, [2023/5/27 13:10]
中国是最大工厂和市场,是和米国平起平坐的资本主义大国啊

这个论断是美国智库给的,关键词: 中美G2
印度民族种姓宗教问题太严重了,当然种姓问题中国也有,但相对稳定

房地产和高考移民,单就设计上是天才的
钞票还在,但是变成房贷和GDP了 ,一劳永逸地避免了自由投资和挤兑
属于是利用储蓄心态的特色计划经济

中国没有很通胀,储蓄还没有失效, 现在发展信心丧失是导致通缩和失业率的

这种房价普遍有一半的税,收税和市场关系不大
房价是地方政府的肥羊,现在处于密不发丧的状态。向未来借钱的大基建,已经有烂尾的趋势了

主要是圣上好大喜功,巧取豪夺盗窃民脂民膏,弄得房价好像让人民币和劳动贬值,其实也只是在楼市
Forwarded from Deleted Account
在 Go 中,没有像 Kotlin 中的 inout 关键字进行类型参数的协变和逆变控制,因为 Go 中没有类似于泛型的概念。但是 Go 中可以通过接口和嵌入结构体等方式实现类似的功能。

接口中实现了方法和类型的分离,可以表示某种行为特征。使用接口可以实现类似于 Kotlin 中的 out 关键字的协变,因为可以将子类型转换为父类型,满足接口约定的使用场景。例如:

type Reader interface {
Read(b []byte) (n int, err error)
}

type FileReader struct {}

func (f *FileReader) Read(b []byte) (n int, err error) {
// ...
}

var r Reader = &FileReader{}
// 将 FileReader 转换为 Reader 的接口类型


嵌入结构体提供了一个实现类似于 Kotlin 中的 in 关键字的逆变控制的方式,因为嵌入结构体可以将成员结构转换为父结构,实现了对结构体内部成员类型的控制。例如:

type Animal struct {
Name string
}

type Dog struct {
Animal
Breed string
}

func (a *Animal) Speak() {
fmt.Println("Animal speak")
}

func (d *Dog) Speak() {
fmt.Println("Dog speak")
}

// 将参数类型定义为 Animal
func SpeakAnimal(a *Animal) {
a.Speak()
}

// 传递类型为 Dog 的参数给 SpeakAnimal 函数
d := &Dog { Animal: Animal { Name:"Fido" }, Breed:"Terrier" }
SpeakAnimal(d.Animal)

// 输出:Animal speak


虽然 Go 中没有像 Kotlin 中的 inout 关键字进行类型参数的协变和逆变控制,但是通过接口和嵌入结构体等方式可以实现类似的功能,用来处理类似类型参数协变和逆变的问题。

对于 Array<out>,在 Go 中可以使用切片(slice)类型进行类似的处理,因为切片类型本质上就是一个动态数组,可以动态调整大小,支持类似于数组的访问方式和操作。例如:

func Sum(numbers []int) int {
sum := 0
for _, n := range numbers {
sum += n
}
return sum
}

// 定义包含子类型数组的父类型
type AnimalArray struct {
Animals []Animal
}

// 将子类型数组作为参数传递给 Sum 函数,实现 Array<out> 的效果
func SumAnimals(animalArray AnimalArray) {
sum := 0
for _, animal := range animalArray.Animals {
sum += animal.Weight
}
return sum
}

// 定义不同类型的动物
type Cat struct {
Animal
ClimbHeight int
}

type Dog struct {
Animal
Breed string
}

animals := []Animal { Dog { Name:"Fido", Weight:10 }, Cat { Name:"Fluffy", Weight:5, ClimbHeight:3 } }
animalArray := AnimalArray { Animals:animals }
SumAnimals(animalArray)


在这个例子中,SumAnimals() 函数接收一个包含子类型的数组,它类似于 Array<out> 的作用。注意,通过将类型转换成 []Animal 切片类型实现动物的数组存储。

总之,在 Go 中,可以使用接口和嵌入结构体等方式来处理类似类型参数协变和逆变的问题。在数组类型方面,可以使用切片类型来符合 Array<out> 的要求进行父类型和子类型转换。

本次使用令牌数: 2199
Forwarded from Deleted Account
是的,你说的很对。在 Go 中,由于没有类似于泛型中的类型参数的概念,也就没有 Java 和 Kotlin 中那种使用通配符 ? extends? super 的语法来实现类似类型参数协变和逆变控制的功能。因此,如果要在 Go 中实现类似于 Kotlin 中 out 的功能,需要使用其他的方式,例如使用接口类型来实现父类型和子类型之间的转换,或者使用包含子类型的切片来模仿使用 out 的场景。

假设现在有一个类型 Test,要实现一个方法 Fill,将一个 P 类型的对象填充为另一个P类型的对象。 在 Go 中,可以使用以下方式实现:

type P interface {
Fill(values interface{})
}

type Test struct {
Values []int
}

// 将一个 Test 对象的数据填充到另一个 Test 对象
func (t *Test) Fill(values interface{}) {
t.Values = values.([]int)
}


然后,通过创建一个新的 Test 对象,调用 Fill 方法进行填充:

var p P = &Test{}
q := &Test{ Values: []int{1, 2, 3} }
p.Fill(q.Values)


这样可以实现与 List<T>.fill(with: List<out T1>) 方法类似的功能。不过需要注意的是,在 Go 中使用 interface{} 进行类型转换需要非常小心,避免出现运行时错误。

总之,在 Go 中是无法像 Kotlin 中那样使用 outin 关键字实现类似类型参数协变和逆变控制的,需要使用其他的方法来实现类似的功能。

本次使用令牌数: 3074
Deleted Account
在 Go 中,没有像 Kotlin 中的 in 和 out 关键字进行类型参数的协变和逆变控制,因为 Go 中没有类似于泛型的概念。但是 Go 中可以通过接口和嵌入结构体等方式实现类似的功能。 接口中实现了方法和类型的分离,可以表示某种行为特征。使用接口可以实现类似于 Kotlin 中的 out 关键字的协变,因为可以将子类型转换为父类型,满足接口约定的使用场景。例如: type Reader interface { Read(b []byte) (n int, err error) } type…
#kt 直接把 out=get, in=set 🌚https://t.iss.one/kotlin_cn/74360

Go 只有[]T 和 func(T)R 的别名,不能自定义类型参数的inout性 ,AI绕来绕去没答到🌚

Go,Rust 都是struct-trait,Any是空接口 ,type Option(type T) intrf{} T应该是自动的
Go 的slice,channel 都不支持out性 ,都没有子类型,必须写明trait 接口

比如子类型 P=List
P<T>.fill(with: P<T1>)
就能写成
P<T>.fill( P<out T>)

但是Go 里,就没法自动兼容这种,因为 []T 只能被运行时强转
func (int *List) Fill(v interface{}) {
int.Values = v.([]int) //+str,float..
}

如果单纯调用 T的接口, C++ 那样还可以推断(也能兼容 T[]的fun扩展),但指明inout T 在T有约束或已知时,是有意义的

组合式是把T:Print,T:Sort 这些的[]T给统一 ,比如向 List<set T> 把T变为相同接口
Forwarded from Deleted Account
将 MP3 文件转换成 MIDI 文件是一个复杂的问题,因为 MP3 文件包含的是音频信息,而 MIDI 文件包含的是乐器和音符的信息。要实现这个功能,您需要做以下几步:

1.将 MP3 文件解析成音频信号,可以使用 Python 中的音频处理库 pydub。
2.使用经过训练的机器学习模型,将音频信号转换成 MIDI 乐器和音符的信息,可以使用Python中的深度学习库 TensorFlow。
3.将 MIDI 乐器和音符的信息保存为 MIDI 格式的文件,可以使用 Python 中的 MIDI 处理库MIDIUtil。

至于为音符配对语音识别,这也是一个复杂的问题,因为它涉及到声学信号处理和语音识别等领域。您可以使用 Python 中的语音识别库,如SpeechRecognition或PocketSphinx,将音频信号转换成文本,然后使用自然语言处理技术将文本转换成 MIDI 音符。

请注意,实现这个功能需要一定的编程和数据处理经验,需要花费一定的时间和精力来学习和调试代码。

本次使用令牌数: 558
Forwarded from Deleted Account
您可以使用 numpy 库来创建棋盘格数组。

以下是一个示例代码:

import numpy as np

# 创建一个 8*8 的二维数组,初始值为 -1
board = np.full((8, 8), -1)

# 将棋盘格染色,黑色为0,白色为1
for i in range(8):
for j in range(8):
if (i + j) % 2 == 0:
board[i][j] = 1
else:
board[i][j] = 0

# 打印棋盘格
print(board)


输出结果:

[[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]]


在这个示例中,我们首先使用 numpy 库的 np.full() 函数创建了一个初始值为 -1 的二维数组。然后,我们使用两个 for 循环遍历整个数组,通过 (i+j)%2 计算得到每个位置应该是黑色还是白色,将对应位置的值设为 0 或 1,最后打印出整个棋盘格数组。

本次使用令牌数: 1355
Forwarded from Deleted Account
以下是使用反射进行深拷贝的示例代码,支持将 `List`、`HashMap` 和对象的字段(使用 `getFields()` 方法获取)映射为新的值,并可以使用 `unifyEqualsPtrs()` 函数将相同的对象指针映射为相同的新对象:

```java
import java.lang.reflect.*;
import java.util.*;

public class DeepCopyUtil {

private static Map<Object, Object> originalToCopy = new HashMap<>();

public static <T> T deepCopy(T obj, Function<Object, Object> func) throws Exception {
if(originalToCopy.containsKey(obj)){
return (T)originalToCopy.get(obj);
}
Class<?> objClass = obj.getClass();
if(objClass.isEnum() || objClass.isPrimitive() || obj instanceof String){
return obj;
} else if(obj instanceof List){
List<Object> originalList = (List<Object>)obj;
List<Object> copyList = new ArrayList<>(originalList.size());
originalToCopy.put(obj, copyList);
for(Object item: originalList){
copyList.add(deepCopy(item, func));
}
return (T)copyList;
} else if(obj instanceof Map){
Map<Object, Object> originalMap = (Map<Object, Object>)obj;
Map<Object, Object> copyMap = new HashMap<>(originalMap.size());
originalToCopy.put(obj, copyMap);
for(Map.Entry<Object, Object> entry: originalMap.entrySet()){
Object originalKey = entry.getKey();
Object originalValue = entry.getValue();
Object copyKey = deepCopy(originalKey, func);
Object copyValue = deepCopy(originalValue, func);
copyMap.put(copyKey, copyValue);
}
return (T)copyMap;
} else {
Field[] fields = objClass.getFields();
T copyObj = (T)objClass.newInstance();
for(Field field: fields){
Object originalFieldValue = field.get(obj);
Object copyFieldValue = deepCopy(originalFieldValue, func);
field.set(copyObj, copyFieldValue);
}
Object unifiedCopyObj = func.apply(copyObj);
originalToCopy.put(obj, unifiedCopyObj);
return (T)unifiedCopyObj;
}
}

public static <T> Function<Object, Object> unifyEqualsPtrs(List<T> ptrs) {
Map<T, T> ptrMap = new HashMap<>();
return (Object obj) -> {
if(ptrs.contains(obj)){
T ptr = (T)obj;
if(!ptrMap.containsKey(ptr)){
ptrMap.put(ptr, ptr);
}
return ptrMap.get(ptr);
}
return obj;
};
}
}
```

在这个示例中,我们定义了一个 `DeepCopyUtil` 工具类,其中包含一个 `deepCopy()` 方法,用于进行对象的深拷贝。该方法可以处理列表、字典和对象的字段,并支持使用 `Function<Object, Object> func` 进行映射转换。

我们还定义了一个 `unifyEqualsPtrs()` 方法,用于将对象指针相等的对象映射为相同的新对象,以便在深度拷贝时可以共享同一个对象实例。

使用示例:

```java
public class Main {

public static void main(String[] args) throws Exception {
List<Person> originalList = new ArrayList<>();
originalList.add(new Person("John", 30));
originalList.add(new Person("Mary", 25));
originalList.add(new Person("Tom", 40));
originalList.add(originalList.get(2));

Function<Object, Object> func = DeepCopyUtil.unifyEqualsPtrs(originalList);

List<Person> copyList = DeepCopyUtil.deepCopy(originalList, func);

copyList.get(0).name = "David";
copyList.get(1).age = 30;

System.out.println(originalList);
System.out.println(copyList);
}
}

class Person {
public String name;
public int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

@Override
public String toString() {
return "Person{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
```

输出结果:

```
[Person{name='John', age=30}, Person{name='Mary', age=25}, Person{name='Tom', age=40}, Person{name='Tom', age=40}]
[Person{name='David', age=30}, Person{name='Mary', age=30}, Person{```
Forwarded from Deleted Account
以下是使用反射进行深度遍历,并修改对象图的示例代码,支持将 ListMap 和对象的字段(使用 fields 变量获取)的值通过调用 func 方法修改,并支持在修改过程中使用 unifyEqualsPtrs() 方法对相同的对象指针进行映射:

import java.lang.reflect.Field;

class DeepSetter {

private val originalToCopy = HashMap<Any?, Any?>()

fun deepSetAs(obj: Any?, func: Function<Any?, Any?>) {
if (originalToCopy.containsKey(obj)) {
return
}
if (obj is List<*>) {
val originalList = obj as List<Any?>
val copyList = ArrayList<Any?>(originalList.size)
originalToCopy[obj] = copyList
for (item in originalList) {
copyList.add(deepSetAs(item, func))
}
} else if (obj is Map<*, *>) {
val originalMap = obj as Map<Any?, Any?>
val copyMap = HashMap<Any?, Any?>(originalMap.size)
originalToCopy[obj] = copyMap
for ((key, value) in originalMap) {
val copyKey = deepSetAs(key, func)
val copyValue = deepSetAs(value, func)
copyMap[copyKey] = copyValue
}
} else {
if (obj == null || obj is String || obj is Number || obj is Boolean || obj.javaClass.isEnum) {
return
}
val objClass = obj.javaClass
val fields: Array<Field> = objClass.declaredFields
for (field in fields) {
if (field.type.isArray || field.type.isPrimitive || field.type.isEnum || field.type.isAssignableFrom(List::class.java) ||
field.type.isAssignableFrom(Map::class.java) || field.type.isAssignableFrom(Set::class.java)) {
continue
}
field.isAccessible = true
val originalFieldValue = field[obj]
val copyFieldValue = deepSetAs(originalFieldValue, func)
field[obj] = copyFieldValue
}
return func.apply(obj)
}
}

fun <T> unifyEqualsPtrs(ptrs: List<T>): Function<Any?, Any?> {
val ptrMap: MutableMap<T, T> = HashMap()
return Function { obj ->
if (ptrs.contains(obj)) {
val ptr: T = obj as T
if (!ptrMap.containsKey(ptr)) {
ptrMap.put(ptr, ptr)
}
ptrMap[ptr]
} else {
obj
}
}
}
}


在这个示例中,我们定义了一个 DeepSetter 工具类,其中包含一个 deepSetAs() 方法,用于遍历对象图并修改对象。该方法可以处理列表、字典和对象的字段,并支持使用 Function<Object, Object> func 进行修改。

我们还定义了一个 unifyEqualsPtrs() 方法,用于将对象指针相等的对象映射为相同的新对象,以便在遍历并修改时可以共享同一个对象实例。

使用示例:

fun main() {
val originalList = mutableListOf(
Person("John", 30),
Person("Mary", 25),
Person("Tom", 40),
Person("Tom", 40)
)

val deepSetter = DeepSetter()
val func = deepSetter.unifyEqualsPtrs(originalList)
deepSetter.deepSetAs(originalList, func)

print(originalList)
}

class Person(var name: String, var age: Int) {
override fun toString(): String {
return "Person{name='$name', age=$age}"
}
}


输出结果:

[Person{name='John', age=30}, Person{name='Mary', age=25}, Person{name='Tom', age=40}, Person{name='Tom', age=40}]


在这个示例中,我们创建了一个包含四个元素的 Person 对象列表,其中两个元素引用了同一个对象,相当于是同一个对象的两个引用。然后我们调用 deepSetAs() 方法进行遍历并修改对象,并使用 unifyEqualsPtrs() 方法将相等的对象指针映射为相同的新对象。

最后,我们输出了修改后的列表,其中两个元素引用的是同一个新对象,表明遍历并修改的实现是正确的。

本次使用令牌数: 2596
Deleted Account
以下是使用反射进行深拷贝的示例代码,支持将 `List`、`HashMap` 和对象的字段(使用 `getFields()` 方法获取)映射为新的值,并可以使用 `unifyEqualsPtrs()` 函数将相同的对象指针映射为相同的新对象: ```java import java.lang.reflect.*; import java.util.*; public class DeepCopyUtil { private static Map<Object, Object> originalToCopy…
在kotlin 用java reflect 写一个深度遍历对象图的 deepSetAs(obj,func) ,它支持将 List.E,Map.V,getFields() 内的值修改为func调用

以此定义 unifyEqualsPtrs(obj, oldToDup=mutMap())=deepSet{ computeIfAbsent }
请用函数式,when 减少缩进

它没有返回值,只原地改写 。然后field也要递归 ,而且不要处理str,enum 等基础类型
柯里化 deepSetAs(func)(it) ,递归改成 see(it)。 unify也要

deepSetAs不要有T, obj作为this, else->外提为 forListyFields(see); unify可以是val 。缩进2空格
ref:https://t.iss.one/dsuse/18706

也可以加个fn参数,调用0参构造器 作为返回,实现deepCopy

好的,我根据你的要求再次修改了一下代码,你看看这样可以吗:
#kt #code
kotlin
fun deepSetAs(func: (Any?) -> Any?): Any?.()->Unit = { ->
val see = deepSetAs(func)
when (this) {
is List<*> -> forEach { see(it) }
is Map<*, *> -> forEach { see(it.value) }
else -> this?.forListyFields(see)
}
}

val cf = mutableMapOf<Class<*>, Array<Field>>()

fun Any.forListyFields(see: (Any?) -> Unit) { cf.getOrPut(this.javaClass) { this.javaClass.declaredFields }.forEach {
it.isAccessible = true
val v = it.get(this)
if (v != null && v !is String && v !is Enum<*>) {
see(v)
}
it.set(this, func(v))
}
}

val unifyEqualsPtrs = { val dup2Old=mutableMapOf<Any?, Any?>()
deepSetAs { v -> dup2Old.computeIfAbsent(v) { v } }
}


解答了 https://t.iss.one/Javaer/922625
Forwarded from ∅rmiux
農管:本來就應該種水稻,誰叫農民種小麥?高速ETC的打點証 我不認

只允許種下去 沒有允許收割 一切要聽黨的指揮
小麥都是惡意發霉發芽,老天爺惡意下雨,這一定是境外勢力
割韭菜卻不割稻米小麥,還有人礦可以採,真不愧是發達國
翠的 扛200斤麥子,十里山路不換肩
原來是 農民們自己 不夠給力
誰叫這些農民沒辦法跟某種粉色物種一樣用手刻芯片只會机種田

大国寡民:你就是见不得中国好
没错,这种中国好,是牺牲国民利益为燃料的。 靠它称霸世界,王朝复兴呢?
翻开历史课文,看到对奴隶社会的解释:
1.奴隶没有土地
2.奴隶的报酬听候奴隶主的分配
3.奴隶没有政治权利,欠薪时莫谈国事
4.奴隶有忠卫奴隶主的光荣义务

官本位下 🧐官员群众老百姓的利益冲突,是不以善人的意志为转移的

以为举着红旗打砸抢,自己家就能连年太平 ,这种封建分裂的思想迟早被改良

- 国人并不具有“独特性”,中国人不因软弱而不容于民主制度,也不存在“劣根性”而不适于民主制度。
- 当权力变成天降商品,腐败就会成为常态。
- 策的反复威胁法律的权威性,地方失去法律的束缚,将产生洪水般的混乱。
[上海 五月天演唱会]彭载舟、白纸式 行为被越来越多人复刻

越南和中国的相似点
博恩 -中国喜剧仍是有未来的
#bing #asm 不会的东西: 一直在扯32位色深、字体贴图、边距 这些有的没的, 无法认真完成「大作业」

用x86 和 VESA 绘制, 实现 总人数100= .2, .4, .3 构成 的柱状图
在住顶显示"n%" ,底端显示 A,B,C

要求2空格缩进 ,提升函数复用


用C内联x86 和 VESA 绘制, 实现 总人数100= .2, .4, .3 构成 的柱状图
汇编结果在 qemu 执行

在柱顶显示"n%" ,底端显示 "A,B,C"
不需要边距,8bit色深, 白色柱体。例如A 的几何就是 go(0,1*ch)rect(3, .2*scrH) ,B紧随其右

用BIOS中断绘制字体 ,对 go(x,y) text(s); rect(w,h) 以C函数内 asm("") 定义。先写 bars.S 实现柱图业务

要求2空格缩进 ,变量用 const int a=1,b=0x2; 连写; 我有 typedef unsigned int N; 和 gcc -masm intel


用C内联x86 和 VESA,在 bars.S 实现白色柱图业务:
bar("A","60%", 6); bar("B","40%", 4)

即,A 的图形是 x=0,y=1*ch; rect(3, .2*scrH) ,B紧随其右

在 bios.c 里基于 typedef unsigned int N; N x,y; 定义 text(s); rect(w,h)

^bing: 越来越读不懂了
#asm #code just clear the (x<50%) part of VBE framebuffer
// Clear the left half of the screen buffer
// BIOS interrupt 10h, function 0h: Set video mode
// AL = video mode (13h = 320x200x256)
__asm__("mov $0x13, %al\n\t"
"int $0x10");

// BIOS interrupt 10h, function 0Fh: Get current video mode
// AL = video mode, AH = number of columns, BH = active page
__asm__("int $0x10");

// Calculate the size of the screen buffer in bytes
// Size = number of columns * number of rows * bytes per pixel
// Bytes per pixel = 1 for 256 colors
unsigned int size;
__asm__("mov %%ax, %%cx\n\t" // CX = AL * AH
"mov $200, %%ax\n\t" // AX = number of rows
"mul %%cx\n\t" // DX:AX = AX * CX
"shr $1, %%dx\n\t" // DX = DX / 2
"rcr $1, %%ax\n\t" // AX = AX / 2 + carry
"mov %%ax, %0" // Store AX to size
: "=m" (size));

// BIOS interrupt 10h, function 0Fh: Get current video mode
// ES:DI = pointer to video memory
unsigned char far *video;
__asm__("mov %%ax, %%es\n\t" // ES = segment of video memory
"xor %%di, %%di\n\t" // DI = offset of video memory
"mov %%es:%%di, %0" // Store ES:DI to video
: "=m" (video));

// Clear the left half of the screen buffer with black color (0)
unsigned char color = 0;
for (unsigned int i = 0; i < size; i++) {
video[i] = color;
}

// Return to text mode
// BIOS interrupt 10h, function 0h: Set video mode
// AL = video mode (03h = 80x25 text)
__asm__("mov $0x03, %al\n\t"
"int $0x10");
Forwarded from 螺莉莉的黑板报
等一下!苹果!你 pakt chunk 在 data chunk 后面!这还怎么流媒体啊!
Forwarded from 螺莉莉的黑板报
CAF Container -> OGG Container 的 Mapping 基本摸清楚了,剩下的就是把包拆掉重新组一个咯 ˊ_>ˋ

现在还没搞清楚的是 channel mapping 是怎么个对应关系,明天需要再好好读读文档。

剩下没摸准的是 OGG Page 下面的 Packet 拆出来扔 CAF 里面能不能用,需不需要再做一些 tweak(这块没文档)。

希望不要出太大幺蛾子……
Forwarded from 螺莉莉的黑板报
浏览器内部流式 parse ogg 文件的 code 已经准备好了!
比如像 ogg 一直到 boe 都是媒体数据,元数据在前两个 page 就已经全都写完了