原文 How to Install KVM on Ubuntu 20.04
检查是否支持
如果以下命令返回值大于0,表示当前系统支持虚拟化:
egrep -c '(vmx|svm)' /proc/cpuinfo
原文 How to Install KVM on Ubuntu 20.04
如果以下命令返回值大于0,表示当前系统支持虚拟化:
egrep -c '(vmx|svm)' /proc/cpuinfo
打开注册表( Win+R > regedit ), 定位到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform, 然后查看 BackupProductKeyDefault 的值即可
原文摘自: 为什么大厂前端监控都在用GIF做埋点?
undici 是一款 HTTP/1.1 客户端, 用户HTTP请求. 相比较Node.js原生的http
类库使用起来更加友好.
本文翻译自 undici官方文档 Undici 是意大利语中的 11 的意思: HTTP/1.1 -> 11 -> Eleven -> Undici.
取消类似 git reset --soft HEAD~1
操作:
本文来自问题及答案如何将一个 JavaScript 数组打乱顺序?
TypeScript项目如果用到了一些第三方JS类库,但是没有提供d.ts文件时, 可以自己手动声明.
一般是在源码的src
目录下, 创建global.d.ts
文件, 以下示例声明jQuery的$
以及一个Gitalk类库的类型:
interface Window {
Gitalk: Gitalk
$: any
}
interface Gitalk {
new(options: {
clientID: string,
clientSecret: string,
repo: string,
owner: string,
admin: Array<string>,
id: string,
distractionFreeMode: boolean
}): GitalkInstance
}
interface GitalkInstance {
render(id: string): void
}
然后就可以使用 new window.Gitalk({ ... })
创建实例了.
实际上任何interface
声明的类型, 都可以自己手动扩展. 而type
声明的类型则无法再次扩展. 这也是interface
和type
的一个主要区别.
一般情况下使用removeEventListener
移除事件绑定时, 需要把之前addEventListener
传递的函数再传递一次:
使用 scrollTo({top: 0, behavior: 'smooth'})
可以丝滑滚动到页面顶部, 不需要写动画效果:
大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。你可以把它比作一个厨房所以需要的各种工具。锅碗瓢盆,各有各的用处,互相之间又有重合。你可以用汤锅直接当碗吃饭喝汤,你可以用小刀或者刨子去皮。但是每个工具有自己的特性,虽然奇怪的组合也能工作,但是未必是最佳选择。
只是为了clone小的话,用--depth=1
只获取最新的commit即可
flutter run
卡在 Running Gradle task 'assembleDebug'...
执行flutter run -v
查看卡在哪个步骤, 如果是卡在gradle环节, 尝试进入 android
目录执行 ./gradlew clean build
.
Target of URI doesn't exist 'package:flutter/material.dart'
Visual Studio Code 里的dart代码导入flutter类库标红失败, 提示 Target of URI doesn't exist xxxxx, 这是因为flutter代码没有还原, 尝试在项目根目录执行 flutter pub get
设置flutter检测Android sdk和Android studio的路径
flutter config --android-sdk="$HOME/Android/Sdk"
flutter config --android-studio-dir="/snap/android-studio/current/android-studio/"
Wrap
元素左对齐Wrap
里的 children
默认是居中对齐, 可以借助使用Align
设置成左对齐:
Align(
alignment: Alignment.topLeft,
child: Wrap(
// ...
)
)
来源: Flutter Wrap widget align: left inside ExpansionPanel, Align文档
给任意组件增加 onTap
事件监听, 可以使用 InkWell
或者 GestureDetector
, 两者的区别在于 InkWell
是 material 组件, 会有material风格的特效, 而GestureDetector
就是通用的增加手势操作的组件, 以下是示例:
// 使用 InkWell
InkWell(
child: Container(...),
onTap: () {
print("tapped on container");
},
)
// 使用 GestureDetector
GestureDetector(
onTap: () { print("Container was tapped"); },
child: Container(...),
)
GestureDetector(
onTap: () { print("Container was tapped"); },
child: Text("Hello world."),
)
来源: Flutter onTap method for Containers
笔记
Transform
的变换是应用在绘制阶段,而并不是应用在布局(layout)阶段,所以无论对子组件应用何种变化,其占用空间的大小和在屏幕上的位置都是固定不变的,因为这些是在布局阶段就确定的.
RotatedBox
和Transform.rotate
功能相似,它们都可以对子组件进行旋转变换,但是有一点不同: RotatedBox
的变换是在layout阶段,会影响在子组件的位置和大小。
Flutter 中有两种布局模型:
RenderBox
的盒模型布局。Sliver
( RenderSliver
) 按需加载列表布局。Flutter 中的可滚动主要由三个角色组成: Scrollable、Viewport 和 Sliver:
Scrollable
: 用于处理滑动手势,确定滑动偏移,滑动偏移变化时构建 Viewport 。Viewport
: 显示的视窗,即列表的可视区域;Sliver
: 视窗里显示的元素。具体布局过程:
Scrollable
监听到用户滑动行为后,根据最新的滑动偏移构建 Viewport 。Viewport
将当前视口信息和配置信息通过 SliverConstraints 传递给 Sliver。Sliver
中对子组件(RenderBox)按需进行构建和布局,然后确认自身的位置、绘制等信息,保存在 geometry 中(一个 SliverGeometry 类型的对象)。在可滚动组件的坐标描述中,通常将滚动方向称为主轴(main axis),非滚动方向称为纵轴(cross axis)。由于可滚动组件的默认方向一般都是沿垂直方向,所以默认情况下主轴就是指垂直方向,水平方向同理。
.Net Core 工具 dotnet-script
简介