返回首页
最新
轻松为 React 组件添加音效,这些组件灵活可定制,并且完全支持键盘导航和内置触觉反馈。如果需要,内置合理的默认设置,提供开箱即用的体验,同时通过 API 提供音效,使其从一开始就能顺利运行。
嗨,HN,
我是Nick,这个工具的灵感来源于我在iOS开发中与Apple Ads的经验。这是我为那些没有时间或市场营销知识的iOS开发者简化搜索结果广告操作的尝试。AdCider会研究并构建广告活动,同时监控并持续优化关键词和出价。
我完全专注于让自动化变得实用且无需过多干预,因此用户界面相对简单。
我今天刚刚推出了我的最小可行产品(MVP),如果你有任何想法,我会非常感激 :)
这是一个付费服务,提供14天的试用期。作为感谢你关注它的回馈,如果你觉得它有用,使用代码HN50可以在前3个月享受50%的折扣。
再过六个月我就要40岁了。感觉自己已经度过了超过50%的人生。虽然有一些成就,甚至是一些显著的成就,但我的生活大多数时候还是充满了挣扎和消极情绪。
telnet://issue3.anewsession.com
宣布 readwise-vector-db:为您的 Readwise 库注入强大动力,实现本地语义搜索
大家好!经过几个月的调试,我很高兴地分享 readwise-vector-db——一个开源项目,它将您的 Readwise 高亮内容转变为一个快速、可自托管的语义搜索引擎。
为什么要这样做?我希望能有一种方式,能够用自然语言即时搜索我所有的阅读历史——书籍、文章、PDF,所有内容,而不仅仅是关键词。现在,通过夜间同步、向量搜索 API、Prometheus 监控指标以及为 LLM 客户端提供的流式 MCP 服务器,这一切都变得可能。
主要特点:
• 对您的 Readwise 库进行全文语义搜索(本地、私密、快速)
• 与 Readwise 的夜间同步——无需手动导出
• 提供 REST API,便于与您的工具和工作流程集成
• Prometheus 监控指标
• 为 LLM 驱动的应用提供流式 MCP 服务器
该项目基于 Python,开源(MIT 许可证),并且可以通过 Docker 或本地轻松运行。如果您想拥有自己的阅读数据,构建自定义工作流程,或尝试本地 LLM,欢迎试用。
期待您的反馈、问题和下一步的想法!
# 更新 Flutter 插件项目结构
# HarmonyOS 下一步
## 更新摘要
- 在 Flutter 插件的 `ohos` 目录中,将 HarmonyOS 项目结构替换为模块结构
- 将所有引用的 HAR 文件整合到 `ohos/har` 下
- 更新后移除 OHOS 插件中过时的模块目录
## 更新步骤
以 [integration_test](https://gitee.com/openharmony-sig/flutter_flutter) 为例进行演示:
### 1. 将 integration_test/ohos 从项目格式重构为模块格式
```sh
cd flutter_flutter/packages/integration_test
mv ohos/ohos ./ohos2 # 备份原始结构
rm -rf ohos # 移除旧结构
mv ohos2 ohos # 重命名为标准模块格式
cd example
flutter pub get # 刷新依赖
flutter build hap --debug # 验证构建
```
> *注意*: 在此阶段运行 `flutter run` 将会失败,直到配置更新完成。
### 2. 配置更新
#### 2.1 更新 integration_test/ohos/oh-package.json5
*更新前*:
```json
{
"name": "ohos",
...
}
```
*更新后*(与 pubspec.yaml 中的插件名称匹配):
```json
{
"name": "integration_test",
"license": "Apache-2.0",
"dependencies": {
"@ohos/flutter_ohos": "file:har/flutter.har"
}
}
```
#### 2.2 更新 integration_test/ohos/src/main/module.json5
*更新前*:
```json
{
"module": {
"name": "ohos",
...
}
}
```
*更新后*:
```json
{
"module": {
"name": "integration_test",
...
}
}
```
#### 2.3 更新 integration_test/ohos/hvigorfile.ts
*更新前*:
```typescript
import { appTasks } from '@ohos/hvigor-ohos-plugin';
export default {
system: appTasks,
plugins:[]
}
```
*更新后*:
```typescript
export { harTasks } from '@ohos/hvigor-ohos-plugin';
```
## 验证步骤
1. 在 DevEco Studio 中打开 `integration_test/example` 并配置签名
2. 运行示例:
```sh
cd integration_test/example
flutter run -d $DEVICE --debug
```
### 关键 HAR 参考配置
HAR 文件现在位于 `ohos/har` 下
#### 更新 example/ohos/oh-package.json5
```json
{
"dependencies": {
"@ohos/flutter_ohos": "file:./har/flutter.har"
},
"overrides": {
"@ohos/flutter_ohos": "file:./har/flutter.har"
}
}
```
#### 更新 example/ohos/entry/oh-package.json5
*更新前*:
```json
{
"dependencies": {
"@ohos/integration_test": "file:./har/integration_test.har"
}
}
```
*更新后*:
```json
{
"dependencies": {
"integration_test": "file:../har/integration_test.har"
}
}
```
## 常见问题排查
### 1. ENOENT: 没有这样的文件或目录
*错误*:
```log
hvigor ERROR: ENOENT: no such file or directory, stat
'xxx/flutter_flutter/packages/integration_test/ohos/build/default/cache/default/default@packageHar/ohos/oh_modules/@ohos/flutter_ohos'
```
*解决方案*:
手动删除错误信息中提到的路径。
### 2. 操作不允许(符号链接错误)
*错误*:
```log
hvigor ERROR: ENOENT: operation not permitted, symlink
'xxx/webview_flutter_ohos/ohos/webview_flutter/oh_modules/.ohpm/@ohos+flutter_ohos@file+libs+flutter.har/oh_modules/@ohos/flutter_ohos' ->
'xxx/webview_flutter_ohos/ohos/build/default/cache/default/default@PackageHar/webview_flutter/oh_modules/@ohos/flutter_ohos'
```
*解决方案*:
移除旧结构中的遗留目录:
```sh
rm -rf flutter_packages/packages/webview_flutter_ohos/ohos/webview_flutter
rm -rf flutter_packages/packages/path_provider_ohos/ohos/path_provider
rm -rf flutter_packages/packages/file_selector_ohos/ohos/FileSelector
```
# HarmonyOS开发基础
## 数据存储
HarmonyOS应用程序提供多种数据存储选项:
- *首选项(Preferences)*:用于简单数据的轻量级键值存储
- *SQLite*:用于结构化数据存储的关系型数据库
- *文件存储*:直接访问文件系统以进行自定义数据存储
## 数组
数组是按索引访问的有序数据集合:
```javascript
let numbers = [1, 2, 3, 4, 5];
console.log(numbers[0]); // 输出 1
```
## 函数
### 常规函数
封装可重用的代码块:
```javascript
function greet(name) {
return "Hello, " + name;
}
console.log(greet("Alice")); // 输出 "Hello, Alice"
```
### 箭头函数
简洁的函数语法:
```javascript
const greet = (name) => "Hello, " + name;
console.log(greet("Bob")); // 输出 "Hello, Bob"
```
## 接口
定义对象结构的契约:
```typescript
interface Person {
name: string;
age: number;
greet(): string;
}
class Employee implements Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet(): string {
return "Hello, I am " + this.name;
}
}
```
## 对象和方法
属性和方法的集合:
```javascript
let person = {
name: "Charlie",
age: 30,
greet: function() {
return "Hello, " + this.name;
}
};
console.log(person.greet()); // 输出 "Hello, Charlie"
```
## 联合类型
可以是多种类型之一的值:
```typescript
let age: number | string;
age = 25; // 有效
age = "twenty-five"; // 也有效
```
## 枚举
命名常量集合:
```typescript
enum Direction {
Up,
Down,
Left,
Right
}
let direction: Direction = Direction.Up; // 使用枚举值
```
------
## UI开发概念与布局
### 组件属性和方法
- *属性*:配置外观和行为
- *方法*:执行特定于组件的操作
### 文本样式
- *文本颜色*:通过 `text-color` 属性设置
- *文本溢出*:通过 `text-overflow` 控制(例如,`ellipsis` 显示截断点)
### 图像组件
```html
<image src="path/to/image.png" width="100" height="100"></image>
```
### 输入字段
```html
<input type="text" placeholder="Enter text here"></input>
```
### SVG图标
直接嵌入或引用SVG文件:
```html
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
</svg>
```
### 布局元素
组织UI组件的位置和大小
#### 边距
```css
.container {
margin: 10px; /* 统一边距 */
margin: 5px 10px; /* 垂直 | 水平 */
margin: 5px 10px 15px; /* 上 | 水平 | 下 */
margin: 5px 10px 15px 20px; /* 上 | 右 | 下 | 左 */
}
```
#### 边框
```css
.box {
border: 1px solid black; /* 宽度 | 样式 | 颜色 */
border-radius: 10px; /* 圆角 */
}
```
#### 自定义形状
```css
.special-shape {
border-radius: 20px 10px 30px 5px; /* 自定义圆角 */
}
```
### 背景
```css
.background {
background-color: #f0f0f0; /* 纯色 */
background-image: url('path/to/image.png'); /* 背景图像 */
background-position: center; /* 图像定位 */
background-size: cover; /* 图像大小 */
background-repeat: no-repeat; /* 防止平铺 */
}
```
### 线性布局对齐
```css
.linear-layout {
display: flex;
justify-content: center; /* 主轴对齐 */
align-items: center; /* 交叉轴对齐 */
flex-direction: row; /* 布局方向(行/列) */
}
```