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变为相同接口
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变为相同接口
Telegram
duangsuse in Kotlin CN
之前科普
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
1.将 MP3 文件解析成音频信号,可以使用 Python 中的音频处理库 pydub。
2.使用经过训练的机器学习模型,将音频信号转换成 MIDI 乐器和音符的信息,可以使用Python中的深度学习库 TensorFlow。
3.将 MIDI 乐器和音符的信息保存为 MIDI 格式的文件,可以使用 Python 中的 MIDI 处理库MIDIUtil。
至于为音符配对语音识别,这也是一个复杂的问题,因为它涉及到声学信号处理和语音识别等领域。您可以使用 Python 中的语音识别库,如SpeechRecognition或PocketSphinx,将音频信号转换成文本,然后使用自然语言处理技术将文本转换成 MIDI 音符。
请注意,实现这个功能需要一定的编程和数据处理经验,需要花费一定的时间和精力来学习和调试代码。
本次使用令牌数: 558
Forwarded from Deleted Account
您可以使用
以下是一个示例代码:
输出结果:
在这个示例中,我们首先使用
本次使用令牌数: 1355
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{```
```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
以下是使用反射进行深度遍历,并修改对象图的示例代码,支持将
在这个示例中,我们定义了一个
我们还定义了一个
使用示例:
输出结果:
在这个示例中,我们创建了一个包含四个元素的
最后,我们输出了修改后的列表,其中两个元素引用的是同一个新对象,表明遍历并修改的实现是正确的。
本次使用令牌数: 2596
List、Map 和对象的字段(使用 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
解答了 https://t.iss.one/Javaer/922625
以此定义 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
Telegram
duangsuse::Echo
#java #performance 值类型vs引用类型
🤔在内存管理/GC良好的语言里,只读数据的引用 就是值
java Byte[]和byte[] 在复用上都互不兼容,当然没有值类型了☺️
>我有一个含极多重复str 的JSON,想减少其内存占用
这就是常量池嘛, javac和aapt都会做
JVM的str不可变,一般都是全局缓存的,strBuild 在完成时是会查询这个吧。
文件上编解码时中间加个Deflate流
也可能是结构有毛病, 比如把str而非int当成tag
说起来str.intern…
🤔在内存管理/GC良好的语言里,只读数据的引用 就是值
java Byte[]和byte[] 在复用上都互不兼容,当然没有值类型了☺️
>我有一个含极多重复str 的JSON,想减少其内存占用
这就是常量池嘛, javac和aapt都会做
JVM的str不可变,一般都是全局缓存的,strBuild 在完成时是会查询这个吧。
文件上编解码时中间加个Deflate流
也可能是结构有毛病, 比如把str而非int当成tag
说起来str.intern…
農管:本來就應該種水稻,誰叫農民種小麥?高速ETC的打點証 我不認
只允許種下去 沒有允許收割 一切要聽黨的指揮
小麥都是惡意發霉發芽,老天爺惡意下雨,這一定是境外勢力
割韭菜卻不割稻米小麥,還有人礦可以採,真不愧是發達國
翠的 扛200斤麥子,十里山路不換肩
原來是 農民們自己 不夠給力
誰叫這些農民沒辦法跟某種粉色物種一樣用手刻芯片只會机種田
大国寡民:你就是见不得中国好
没错,这种中国好,是牺牲国民利益为燃料的。 靠它称霸世界,王朝复兴呢?
只允許種下去 沒有允許收割 一切要聽黨的指揮
小麥都是惡意發霉發芽,老天爺惡意下雨,這一定是境外勢力
割韭菜卻不割稻米小麥,還有人礦可以採,真不愧是發達國
翠的 扛200斤麥子,十里山路不換肩
原來是 農民們自己 不夠給力
誰叫這些農民沒辦法跟某種粉色物種一樣用手刻芯片只會机種田
大国寡民:你就是见不得中国好
没错,这种中国好,是牺牲国民利益为燃料的。 靠它称霸世界,王朝复兴呢?
翻开历史课文,看到对奴隶社会的解释:
1.奴隶没有土地
2.奴隶的报酬听候奴隶主的分配
3.奴隶没有政治权利,欠薪时莫谈国事
4.奴隶有忠卫奴隶主的光荣义务
官本位下 🧐官员群众老百姓的利益冲突,是不以善人的意志为转移的
以为举着红旗打砸抢,自己家就能连年太平 ,这种封建分裂的思想迟早被改良
- 国人并不具有“独特性”,中国人不因软弱而不容于民主制度,也不存在“劣根性”而不适于民主制度。
- 当权力变成天降商品,腐败就会成为常态。
- 策的反复威胁法律的权威性,地方失去法律的束缚,将产生洪水般的混乱。
1.奴隶没有土地
2.奴隶的报酬听候奴隶主的分配
3.奴隶没有政治权利,欠薪时莫谈国事
4.奴隶有忠卫奴隶主的光荣义务
官本位下 🧐官员群众老百姓的利益冲突,是不以善人的意志为转移的
以为举着红旗打砸抢,自己家就能连年太平 ,这种封建分裂的思想迟早被改良
- 国人并不具有“独特性”,中国人不因软弱而不容于民主制度,也不存在“劣根性”而不适于民主制度。
- 当权力变成天降商品,腐败就会成为常态。
- 策的反复威胁法律的权威性,地方失去法律的束缚,将产生洪水般的混乱。
YouTube
方脸说:中国暴力事件四起,暴力事件频发将成为中国的新常态!为什么我说中国必然会走向混乱?聊聊中国现在到底什么政体
八炯 挺中国
为何在当代岁静与10年前不一样
六·四, 反送中 应该吸纳更多阶层并学会妥协
1989/6/4这才是真正的国耻,文革一直不是过去式,而是现在进行时
文史片:各留活路海阔天空是空话,阶级矛盾是敌我的
为何在当代岁静与10年前不一样
六·四, 反送中 应该吸纳更多阶层并学会妥协
1989/6/4这才是真正的国耻,文革一直不是过去式,而是现在进行时
文史片:各留活路海阔天空是空话,阶级矛盾是敌我的
YouTube
台灣人挺中國人!六四有大驚喜!小粉紅玩不了中國手遊,不准與外國主播拍片!抖音不準有8964數字!李佳琦太慘了
攝徒最新官方LINE貼圖:https://line.me/S/sticker/23334855
00:00-00:42 長榮回應舔共台灣人
00:42-01:31 中國不存在64,只有邁向65
01:31-01:52 香港人也被抓
01:52-03:16 中國人被旅遊又開始
03:16-04:28 中國開始拆路牌
04:28-06:52 中國各類遊戲六四規定
06:52-08:00 抖音禁止出現任何8964數字
08:00-08:45 李佳琦太慘了
08:45-09:47 小粉紅快去微博支持黨…
00:00-00:42 長榮回應舔共台灣人
00:42-01:31 中國不存在64,只有邁向65
01:31-01:52 香港人也被抓
01:52-03:16 中國人被旅遊又開始
03:16-04:28 中國開始拆路牌
04:28-06:52 中國各類遊戲六四規定
06:52-08:00 抖音禁止出現任何8964數字
08:00-08:45 李佳琦太慘了
08:45-09:47 小粉紅快去微博支持黨…
#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 的几何就是
用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 的图形是
在 bios.c 里基于 typedef unsigned int N; N x,y; 定义 text(s); rect(w,h)
^bing: 越来越读不懂了
用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 螺莉莉的黑板报
CAF Container -> OGG Container 的 Mapping 基本摸清楚了,剩下的就是把包拆掉重新组一个咯 ˊ_>ˋ
现在还没搞清楚的是 channel mapping 是怎么个对应关系,明天需要再好好读读文档。
剩下没摸准的是 OGG Page 下面的 Packet 拆出来扔 CAF 里面能不能用,需不需要再做一些 tweak(这块没文档)。
希望不要出太大幺蛾子……
现在还没搞清楚的是 channel mapping 是怎么个对应关系,明天需要再好好读读文档。
剩下没摸准的是 OGG Page 下面的 Packet 拆出来扔 CAF 里面能不能用,需不需要再做一些 tweak(这块没文档)。
希望不要出太大幺蛾子……
Forwarded from 螺莉莉的黑板报
奇怪,ffmpeg 转出来了一个错误的 opus package,这个 package 本身是不符合这条 spec 的:
https://datatracker.ietf.org/doc/html/rfc6716#ref-R5
这我得怎么 fallback……
https://datatracker.ietf.org/doc/html/rfc6716#ref-R5
这我得怎么 fallback……