琴弦第七

私信 关注
林佳楠
码龄11年

玩音乐画漫画的程序员,曾经是个老师。

  • 716,102
    被访问量
  • 71
    原创文章
  • 8,922
    作者排名
  • 466
    粉丝数量
  • 毕业院校 嘉应学院
  • 于 2010-05-31 加入CSDN
获得成就
  • 博客专家认证
  • 获得112次点赞
  • 内容获得106次评论
  • 获得112次收藏
荣誉勋章
兴趣领域
  • #Android
    #面试#性能优化#Kotlin#Android Jetpack#Java#Flutter#RxJava#Android Studio#数据结构#gradle
TA的专栏
  • libGDX手册
    7篇
  • Android
    21篇
  • Android Tips
    2篇
  • Java学习笔记
    17篇
  • IDE
    5篇
  • XML学习笔记
    3篇
  • JUnit学习笔记
    2篇
  • JavaWeb学习笔记
    12篇
  • JavaScript学习笔记
    6篇
  • Ant
    1篇
  • Android Wear
    10篇
  • Android Gradle
    6篇
  • Beacon
    1篇
  • Gson
  • RaspBerry
    26篇
  • Linux
    2篇
  • go
    4篇
  • Python
    1篇
  • MySQL
    1篇
  • 路由器
    1篇
  • spring
    1篇
  • Java
    4篇
  • OS
    2篇
  • libGDX
    8篇
关于我
 
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

设置Linux在未登录账号情况下自动连接wifi

最近将闲置的PC安装了Deepin,作为内网的一台服务器。一般使用场景都是通过ssh远程登录,但是发现设备通电开机后,如果没有登录账号,wifi是不会自动连接的。这就有点尴尬了,每次通电开机后都要手动去机器上登录下账号,进入了桌面环境后再连接个wifi,然后才能在内网用ssh远程登录操作,非常不方便。期望机器能在通电进入系统后,即使没有登录账号也能自动连接wifi。可以使用Linux的网络管理工具的命令:nmctl device wifi connect [ssid wifi名字] password [
原创
104阅读
0评论
0点赞
发布博客于 2 月前

transient修饰对象成员变量反序列化为null

1. transient关键字的用途用于在实现Serializable接口的类中标记成员变量,使该类对象在序列化和反序列化过程中忽略该成员变量的处理。2. transient序列化和反序列化过程中的处理方式在序列化过程中,transient关键字修饰的成员变量默认处理方式使直接忽略在反序列化过程中,transient关键字修饰的成员变量默认赋值该成员变量类型的默认值,例如int型为0,boolean为false,对象类型为null。3. transient默认处理方式引发的问题反序列化过程中
原创
69阅读
1评论
0点赞
发布博客于 2 月前

libGDX的线程

所有ApplicationListener接口中的方法都会在同个OpenGL的渲染线程中被调用。对于大多数游戏来说,一般在ApplicationListener.render()方法中实现游戏的更新逻辑,这个方法会在渲染线程中执行。任何涉及OpenGL的图形操作都需要在渲染线程上执行。如果在其它线程上执行会导致一些无法预测的结果,这是因为OpenGL Context只有在渲染线程中才处于激活状态,对于大多数Android设备而言,在其它线程中创建OpenGL Context会导致一些问题,因此不支持这
翻译
552阅读
0评论
0点赞
发布博客于 3 年前

libGDX的日志

Application接口提供了简单但可以精确控制的日志打印功能。日志消息可以输出为普通信息,或者是带可选异常的错误消息,也可以是调试信息:
翻译
495阅读
0评论
0点赞
发布博客于 3 年前

查询libGDX运行时环境的相关信息

Application接口提供了一些列查询libGDX运行时环境参数的方法。
翻译
241阅读
0评论
0点赞
发布博客于 3 年前

libGDX的启动类和配置

对于每个目标平台,我们都必须编写对应的启动类。这个类根据特定的底层平台实现`Application`接口,同时也实现提供应用逻辑代码的`ApplicationListener`接口。这个启动类依赖于具体的底层平台,下面让我们来看看启动类在每个底层平台上的实现和配置。
翻译
740阅读
0评论
1点赞
发布博客于 3 年前

libGDX的模块

LibGDX,对应典型游戏设计架构的每个步骤,它都提供了一系列模块来提供相应服务。Input输入模块 - 为所有平台提供了统一的输入和处理模型。它支持键盘、触屏、加速度计和鼠标等可用输入设备。Graphics图形模块 - 它通过OpenGL ES API的方式使用硬件,将图形绘制到屏幕上。Files文件模块 - 它不关心具体操作的媒体文件类型,它为所有平台统一提供了抽象化的,简易的方法来进行媒体文件的读写操作。Audio音频模块 - 提供了有助于在所有平台上录制和播放音频的功能。
翻译
521阅读
0评论
0点赞
发布博客于 3 年前

libGDX的生命周期

libGDX应用程序具有明确定义的生命周期,用于处理应用程序的不同的状态,例如应用程序的创建、暂停、恢复、渲染和(销毁)释放等等。
翻译
221阅读
0评论
0点赞
发布博客于 3 年前

libGDX的应用框架

作为libGDX的核心(译注:也是libGDX实现跨平台的基础),libGDX提供了6个通用接口来与具体的操作系统进行交互,不同的操作系统对这6个接口有不同的具体实现。
翻译
251阅读
0评论
0点赞
发布博客于 3 年前

libGDX截取超出屏幕大小的图片

ibGDX截屏的过程,实际上就是读取帧缓冲区的一帧像素数据后封装成图片数据,再输出到图片文件,截屏出来的图片能有大小受限于帧缓冲区的大小。
原创
836阅读
0评论
0点赞
发布博客于 4 年前

DrawerLayout实现多样侧滑菜单效果

改变DrawerLayout的默认侧滑效果,比如实现常见的主内容区域跟随侧滑菜单滑动而滑动,甚至如QQ侧滑菜单等复杂效果。实现的关键在于利用**DrawerLayout.addDrawerListener(DrawerLayout.DrawerListener)**方法,给DrawerLayout添加DrawerListener监听。
原创
608阅读
0评论
0点赞
发布博客于 4 年前

Android字符串资源使用格式化占位符的正确姿势

在Android的string.xml文件中,如果定义的字符串资源包含两个或两个以上的格式化占位符,比如: <string name="version_format">v%d - %s</string>。那么你在编译的时候可能编译错误。
原创
3501阅读
0评论
0点赞
发布博客于 5 年前

Android的进程优先级

android对于所有进程的处理态度都是尽可能不杀死。然而,资源总共就那么多,要是对所有进程都保持宽容的话,资源总会有消耗殆尽的时候。因此,在内存不足的情况,android系统需要根据一定的策略,选择性的杀死部分进程。这个策略就是对所有的进程标记优先级,优先级低的先杀死。 android将进程的优先级分为5个层次。
原创
6245阅读
0评论
0点赞
发布博客于 5 年前

android的属性动画

属性动画(Property Animation)系统是一个更加强大的框架,它几乎允许你为任何东西设置动画。不管一个对象是否需要绘制到屏幕上面,你都可以定义一个动画让这个对象的属性随着时间推移而改变。一个属性动画可以在规定的时间内改变一个属性值(对象的一个成员变量)。设定动画,你需要指定对象中需要设定动画的属性,例如对象在屏幕上的坐标,动画需要执行的时间,以及动画过程中属性的变化值。
翻译
4069阅读
0评论
0点赞
发布博客于 5 年前

Android的定位策略

获取用户的地理位置信息能够让你的应用程序显得更加智能,借此能够分发更合适的信息给用户。为android开发地理位置相关的应用程序,你可以利用GPS或者android的网络定位数据源来获取用户的地理位置。尽管GPS的定位更加精准,但它只适用于户外,并且还会更快的消耗电量,它也不能按用户所期待的及时返回地理位置信息。android的网络定位数据源是通过使用手机信号塔和WiFi信号来获取用户的地理位置信息,不管是在室内还是
翻译
7087阅读
0评论
1点赞
发布博客于 5 年前

android权限的最佳运用

app的权限请求很容易让用户反感。当用户觉得一个app用起来很麻烦,或者觉得这个app不知道要拿用户的信息去做什么事情时,用户可能会避免使用甚至是完全卸载掉这个app。下面的权限最佳运用方式能够帮助你避免这些糟糕的用户体验。
翻译
1522阅读
2评论
0点赞
发布博客于 5 年前

app在android 6.0或以上平台版本运行过程中请求权限

从android 6.0(API 23)开始,安装app时不需要对app的权限申请进行授权,而是在app运行的时候,用户才需要对app进行授权。这种流程精简了app的安装过程,用户不需要在安装或者升级app的时候进行授权操作。这同样也给了用户更多对app功能的控制能力;例如,用户可以选择给一个照相app访问摄像头的权限,但不给它访问设备地理位置的权限。用户也可以通过app的设置界面,随时撤销对app授予的权限。
翻译
4389阅读
0评论
0点赞
发布博客于 5 年前

Android的权限声明

每一个android app都运行在一个限制访问的沙盒中。如果一个app需要访问它所在沙盒之外的资源和信息,那么这个app就需要声明适当的权限。这个权限声明要求将你的app需要的权限全部列举在App的manifest文件中。根据权限不同的隐私敏感程度级别,系统可能会自动授予该权限,也有可能需要请求设备用户授权才能获取该权限。例如,如果你的app请求授予打开设备闪光灯的权限,系统将会自动授予这个权限。但是,如果你的a
翻译
3109阅读
0评论
0点赞
发布博客于 5 年前

Intellij IDEA安装golang插件

支持golang开发的IDE现在已经很多了,如果要讨论出哪一个IDE才是最好的golang IDE,这绝对可以让一群程序猿撕逼上百楼,这里就不讨论了。选择什么样的IDE,主要就是个人喜好的问题而已。我习惯了Android Studio和Intellij IDEA的UI风格,所以这里只讨论IDEA的golang插件配置,别的IDE就不讨论了,因为我很懒。
原创
34548阅读
4评论
2点赞
发布博客于 6 年前

在U盘上安装ChromiumOS

Google旗下两个重量级操作系统:Android和ChromiumOS。Android就不用说了,ChromiumOS目前主要用于ChromeBook设备上。整个系统基本上就是个Chrome浏览器,可以安装各种Chrome扩展和Chrome App Store上面的各种app。虽然ChromeBook设备很便宜,然而并没什么卵用,因为国内根本没有销售啊!我个人的看法是因为国内大环境所致,ChromeBook如果使用
原创
10339阅读
0评论
0点赞
发布博客于 6 年前

Java语言使用注解处理器生成代码——第三部分:生成源代码

本文是我的“使用Java语言注解处理器生成代码”系列第三部分,也是最后一部分。在第一部分中(请阅读这里),我们介绍了什么是Java语言的注解,以及一些常用的方法。在第二部分中(请阅读这里),我们介绍了注解处理器,以及注解处理器如何创建和运行。现在,在第三部分中,我们要学习如何使用注解处理器来生成源代码。
翻译
3055阅读
2评论
0点赞
发布博客于 6 年前

Android的屏幕多样性支持

运行Android系统设备的屏幕尺寸和密度千变万化。然而对于应用程序来说,Android系统为所有设备提供了一个统一的开发环境,并且由系统处理了大部分应用程序界面与实际屏幕的适配工作。同时,系统也提供了相应的API允许你在特定的屏幕尺寸或屏幕密度上为你的应用程序UI做特定的调整,以便在不同配置的屏幕上优化你的UI。例如,你可能需要在平板和手机上显示不一样的UI效果。尽管系统能够自动将你的应用程序UI通过缩放或重置
翻译
2186阅读
1评论
2点赞
发布博客于 6 年前

修复Win10任务栏开始菜单等系统图标无法点击问题

升级win10之后,有时会莫名其妙发现任务栏上面包括开始菜单、小娜、日历、系统通知等系统图标都无法点击,并且重启系统之后并没有自动修复。发生这种情况可以尝试以下解决方法:方法一:卸载冲突软件这种情况有可能是存在冲突软件引起的。如果你确定这种情况是在安装某个软件之后出现了,那么可以尝试进入安全模式中把这个软件卸载:按window+R键,弹出运行窗口,输入msconfig调出系统配置窗口:
原创
35296阅读
2评论
8点赞
发布博客于 6 年前

Java语言使用注解处理器生成代码——第二部分:注解处理器

本文是我的“关于Java语言使用注解处理器生成代码”系列第二部分。在第一部分中(请阅读这里),我们介绍了什么是Java语言的注解,以及它们的几种常用方式。现在,在这第二部分中,我们将介绍注解处理器。包括如何创建注解处理器,以及如何运行它们。
翻译
5856阅读
2评论
4点赞
发布博客于 6 年前

Java语言使用注解处理器生成代码 —— 第一部分:注解类型

从本文开始,我将开始写一系列关于Java语言使用注解处理器生成代码的文章,包括这种方法的强大之处。最后还会描述如何确保在编译的时候使用这种方法生成源代码。在这系列文章中,我们将会:介绍Java语言的注解。了解注解的常用方式以及使用范围。了解注解处理器以及它们所代表的角色。学习如何创建注解处理器。学习如何在终端命令行、Eclipse和Maven中运行注解处理器。学习如何使用注解处理器生成源
翻译
3295阅读
0评论
0点赞
发布博客于 6 年前

捕获TextView超链接

Android的TextView是个很强大的控件,通过Html类处理html文本后可以支持部分html标签。有时候需要捕获TextView中标签的点击事件进行自己的超链接点击处理,下面的代码用于捕获TextView中标签点击后的响应事件: CharSequence charSequence = Html.fromHtml(strHtml); Spannabl
原创
1216阅读
0评论
0点赞
发布博客于 6 年前

解决Spring配置文件无法读取properties属性问题

在Spring项目的配置文件中引用properties属性文件中的属性,运行时无法识别properties属性文件中的属性引用,但properties属性文件和属性明明已经存在,例如: 要在Spring中使用外部properties属性文件,需要在Spring配置文件中添加bean后处理器PropertyPlaceholderConfigurer,并指明外部properties属性文件的路径:
原创
13849阅读
0评论
2点赞
发布博客于 6 年前

解决Atom中文无法自动换行问题

Atom是Github开发的一个开源编辑器,类似于SublimeText,功能很强大,界面很漂亮,详情可查看官网atom.io。   如题,Atom默认会根据窗口宽度对文本进行自动软换行处理(如果没有的话,可以在File->Settings下将Soft Wrap选项的勾打上),然而在处理中文文本的时候自动换行会失效。这是Atom的一个bug,github的issues上已经有人解决了这个问题,只是
原创
24088阅读
3评论
1点赞
发布博客于 6 年前

解决Android Studio下Element layer-list must be declared问题

最近将一个项目从Eclipse转到Android Studio。项目中使用了环信demo中的一些xml资源,转换后发现color资源文件夹下诸如layer-list或者shape等标签报Element xxx must be declared错误,大意就是layer-list或者shape这些标签没有定义。layer-list或者shape等这些标签是常用的标签,Android Studio居
原创
11510阅读
5评论
3点赞
发布博客于 6 年前

树莓派安装node.js

由于树莓派是arm架构,node.js上并没有提供arm架构的二进制包下载。试过使用apt包管理安装和直接node.js源码编译安装(编译了四五个小时。。。),都没有成功,报非法指令错误,估计还是编译的处理器架构错误导致的。不过,google上有些小伙伴成功了,我也不清楚是为什么,可能是编译的版本问题。这里提供一个比较简单的方法,亲测有效。其实就是在官网的历史列表里面找到了个旧版本v0.10.
原创
2079阅读
0评论
0点赞
发布博客于 6 年前

ubuntu下buffalo wzr-hp-300nh路由器刷DD-WRT系统

朋友送了个WZR-HP-300NH的buffalo路由器,只是系统被刷成了openwrt,而且还不知道管理员账号密码= =。。。刷了openwrt系统后,buffalo路由器的恢复出厂设置按钮也失效了,估计是openwrt系统的兼容问题,只能是想办法重新刷下系统了。google上找了下tftp刷机的教程,本来以为是很简单的事情,结果还是折腾了好几天。下面是我测试成功的方法:需要准备的工具:
原创
2399阅读
0评论
0点赞
发布博客于 6 年前

Volley的使用(一)

Volley是google推荐的Android网络数据访问处理的库,具有简化网络数据访问、多并发、支持缓存、允许取消网络请求、支持自定义复杂网络数据请求等优点。另外,Volley也提供了处理大量网络图片、处理Json数据的工具。不过,Volley也有它的局限性。它不适用于大文件数据的下载,因为Volley在解析网络数据的过程中会将这些数据都放在内存中,处下载大型文件可能会导致内存OOM问题。在开发
原创
1827阅读
0评论
0点赞
发布博客于 6 年前

将IDEA maven项目中src源代码下的xml等资源文件编译进classes文件夹

如题,IDEA的maven项目中,默认源代码目录下的xml等资源文件并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉。如果使用的是Eclipse,Eclipse的src目录下的xml等资源文件在编译的时候会自动打包进输出到classes文件夹。Hibernate和Spring有时会将配置文件放置在src目录下,编译后要一块打包进classes文件夹,所以存在着需要将xml等资源
原创
14178阅读
5评论
5点赞
发布博客于 6 年前

建立企业内部maven服务器并使用Android Studio发布公共项目

由于Android Studio使用了Gradle构建工具,在library依赖的处理上是将被依赖的library作为一个module引入(拥有一份完整的library拷贝),而Eclipse的ADT则是直接将library作为外部项目依赖链接进来,两者各有各的优缺点。Android Studio的好处是能时刻保持项目的完整性,每一个项目都包含了整个项目所需要的一切东西,当你把项目共享给别人的时候
原创
10055阅读
25评论
6点赞
发布博客于 6 年前

go语言的工作空间和GOPATH环境变量

go语言并没有强制一定要使用一定的工作空间和项目结构,对于小型的go程序依靠go run等命令就可以直接编译运行。然而,保持良好的工作空间和文件结构,对于管理源代码和发布程序都是非常有帮助的。对于大型的go语言项目,工作空间则是一定要的。1、go语言的工作空间结构go语言的工作空间其实就是一个文件目录,目录中必须包含src、pkg、bin三个目录。其中src目录用于存放
原创
7367阅读
0评论
0点赞
发布博客于 6 年前

二进制包安装golang

之前讲过arm平台上的golang的源代码编译安装,这次补充下golang官方提供的其它平台上二进制包安装方法。
原创
2751阅读
0评论
0点赞
发布博客于 6 年前

Ubuntu下迁移MySQL数据库文件目录

用Ubuntu的apt包管理工具安装的mysql数据库,默认将数据库文件保存在/var/lib/mysql目录下,时间久了数据库越来越大,所以准备挂载个新的硬盘专门存放mysql数据库。1、确定mysql数据库文件存放目录一般默认是在/var/lib/mysql目录下。先登录自己的mysql数据库,比如我用root账户登录,然后使用下面查询语句查询:show varia
原创
7058阅读
3评论
6点赞
发布博客于 6 年前

安装Python的easy_install工具和BeautifulSoup模块

1、esay_installeasy_install是Python的发行包管理工具,类似于linux的apt-get或者yum包管理工具,使用easy_install可以很方便的获取第三方的Python发行模块。安装方法:1.1 Mac OS X 系统可以在终端执行以下命令:curl https://bootstrap.pypa.io/ez_setup.py -o -
原创
3544阅读
1评论
1点赞
发布博客于 6 年前

在ARM平台上编译安装golang

golang也就是go语言,现在已经发行到1.4.1版本了,语言特性优越性和背后google强大靠山什么的就不多说了。golang的官方提供了多个平台上的二进制安装包,遗憾的是并非没有发布ARM平台的二进制安装包。ARM平台没办法直接从官网下载二进制安装包来安装,好在golang是支持多平台并且开源的语言,因此可以通过直接在ARM平台上编译源代码来安装。整个过程主要包括编译工具配置、获取golan
原创
10146阅读
2评论
0点赞
发布博客于 6 年前

Mac OS下Android Studio的Java not found问题

Android Studio正式版已经发布一段时间了,使用Mac版的Android Studio可能与遇到Java not found:Android Studio was unable to find a valid JVM问题。解决这个问题:首先要确定mac系统上有没有安装jdk,并查看自己的jdk版本,可以在终端上输入命令 java -version查看。如果没有安装
原创
4897阅读
0评论
0点赞
发布博客于 7 年前

Bash脚本的空格和“期待一元表达式”错误

很少自己写Bash脚本,一写就出现了一些奇怪的问题,主要还是对Bash脚本的语法不够熟悉,毕竟很少使用。当做记录一下吧,今天因为空格导致的一些脚本问题:1、Bash脚本中的赋值符号“=”前后不能有空格。例如给变量number赋值要写成“number=1”,不能写成“number = 1”。大多数编程语言都会忽略掉一些没有意义的空格,例如对于Java语言上面两种写法在语法上都是正确,
原创
24755阅读
4评论
4点赞
发布博客于 7 年前

Android Wi-Fi Peer-to-Peer(Android的Wi-Fi P2P对等网络)

Wi-Fi peer-to-peer(P2P,对等网络),它允许具备相应硬件的Android 4.0(API level 14)或者更高版本的设备可以直接通过wifi而不需要其它中间中转节点就能直接通信(Android的Wi-Fi P2P框架符合Wi-Fi联盟的Wi-Fi Direct™直连认证标志)。使用这些API,你可以搜索并连接其它同样支持Wi-Fi P2P的设备,然后再通过一个高速的连接进
翻译
4528阅读
0评论
3点赞
发布博客于 7 年前

Android应用程序安装位置(App Install Location)

从API Level 8(Android 2.2)开始,你可以将你的应用程序安装到外部存储上(例如,设备的SD卡)。你可以在应用程序的manifest文件中声明android:installLocation属性来使用这个可选的功能。如果你没有声明这个属性,你的应用程序只能被安装在内部存储中,并且不能移动到外部存储上。允许系统将你的应用程序安装到外部存储上,你需要修改你的manifest文件
翻译
2046阅读
0评论
0点赞
发布博客于 7 年前

Android Bluetooth Low Energy(Android低功耗蓝牙)

Android 4.3(API Level 18)开始引入Bluetooth Low Energy(BLE,低功耗蓝牙)的核心功能并提供了相应的API,应用程序通过这些api可以扫描设备、查询services,读写设备的characteristics(属性特征)。对比传统的蓝牙,BLE的设计能够显著减低功耗。这让Android应用程序与BLE设备之间的低功耗通讯成为可能,例如距离传感器、心率监视器
翻译
19343阅读
3评论
6点赞
发布博客于 7 年前

Android蓝牙

Android平台提供了对蓝牙网络协议栈的支持,它允许设备通过无线的方式与其它设备进行数据交换。应用程序框架通过Android Bluetooth APIs提供了对蓝牙功能的访问。这些API允许应用以无线的方式连接其它蓝牙设备,启用点对点或者多点对多点的无线功能。使用蓝牙的API,Android应用程序可以执行以下工作:* 扫描其它蓝牙设备* 查询本地蓝牙适配器以配对蓝牙设备* 建
翻译
3980阅读
0评论
1点赞
发布博客于 7 年前

使用命令行设置树莓派的wifi网络

如果你没有登录到常用的图形用户界面,这种方法就适合用来设置树莓派的wifi。尤其是在你没有屏幕或者有线网络,仅使用串口控制线的时候。另外,这种方法也不需要额外的软件,所有需要的东西都已经包含进了树莓派。GETTING WIFI NETWORK DETAILS(获取wifi网络详情)为了扫描wifi网络,可以使用sudo iwlist wlan0 scan命令。这个命令会列出所有
翻译
5558阅读
0评论
1点赞
发布博客于 7 年前

树莓派的.bashrc和.bash_aliases文件

在你的home目录中,你可以找到一个包含用户配置的隐藏文件.bashrc。你可以根据自己的需要修改这个文件。文件中为你提供了一些有用的调整设置,默认情况下其中一些设置是被注释掉的。例如,一些ls命令的别名:alias ls='ls --color=auto'#alias dir='dir --color=auto'#alias vdir='vdir --color=auto
翻译
2414阅读
0评论
0点赞
发布博客于 7 年前

树莓派的rc.local文件(设置开机启动)

为了在树莓派启动的时候运行一个命令或程序,你需要将命令添加到rc.local文件中。这对于想要在树莓派接通电源后无需配置直接运行程序,或者不希望每次都手动启动程序的情况非常有用。另一种替代定时任务的方法是使用cron和crontab。EDITING RC.LOCAL(编辑rc.local文件)在你的树莓派上,选择一个文本编辑器编辑/etc/rc.local文件。你必须使
翻译
20076阅读
2评论
0点赞
发布博客于 7 年前

树莓派Shell脚本文件

命令可以组合起来保存在文件中,并一块执行。一个简单的例子,复制下面的命令到你最喜欢的文本编辑器中:现在,将其保存名为fun-script的文件。在你运行这个文件之前,你需要将它设置为可执行文件,可以使用修改模式的命令chmod来实现。每一个文件和文件夹都有自己的权限来限定哪些用户可以操作它或者不能操作它。在这个例子中,运行命令chmod +x fun-script,fun-script
翻译
6945阅读
0评论
0点赞
发布博客于 7 年前

树莓派apt软件管理工具

管理安装、升级和卸载软件最简单的方法就是使用Debian上的APT(高级包管理工具)。如果一个软件被打包成Debian上的包并且适用于树莓派的ARM架构,那么这个软件包同样兼容于Raspbian。安装或者卸载软件包的时候你需要root用户权限,因此你的用户必须是sudoer用户,或者你必须使用root用户登录。更多信息参考用户管理和root用户。安装新的包,或者更新已有的包,你需要
翻译
2950阅读
0评论
0点赞
发布博客于 7 年前

树莓派——root用户和sudo

Linux操作系统是一个多用户操作系统,它允许多个用户登录和使用一台计算机。为了保护计算机(和其他用户的隐私),用户都被限制了能做的事情。大多数用户都允许运行计算机上大部分程序,并且编辑和保存存放在他们自己home目录中的文件。一般用户都不允许编辑其他用户的文件和一些系统文件。然而,在Linux系统上有一个特殊用户叫做超级用户,通常用户名为root。这个超级用户访问计算机没有限制,几乎可以
翻译
4700阅读
0评论
0点赞
发布博客于 7 年前

树莓派home目录

当你登入树莓派并打开一个终端窗口,或者你替换了图形用户界面直接开机启动到命令行模式,你将会开始于home目录下。假如你的用户名是pi,那么这个路径就是/home/pi。这个地方是用户保存用户自己的文件,其中包括了用户保存桌面上的文件的文件夹Desktop,以及其它一些文件和文件夹。在命令中导航到你的home目录,只需要简单输入cd命令然后回车。这相当于你输入了cd /home/pi
翻译
2924阅读
0评论
0点赞
发布博客于 7 年前

树莓派的备份

强烈建议定期备份一些重要文件。备份通常不单限于用户文件,还可以是配置文件、数据库、已安装的软件、设置,甚至是整个系统快照。这里我们会指导你通过一些备份技术为你的树莓派系统备份。HOME FOLDER(Home目录)一种比较好的备份Home目录方法是使用tar命令生成一个目录快照压缩文件,然后复制到你的PC电脑或者云端存储上。输入下面命令来备份home目录:cd /h
翻译
2523阅读
0评论
0点赞
发布博客于 7 年前

树莓派 —— Sonic Pi(声音编程)

Sonic Pi是一个开源的编程环境,设计初衷是为了通过创建声音制作音乐的流程来进行编程概念的探索和教学。Sonic Pi的执行的代码基于Ruby,这是一种漂亮又简洁的编程语言。这意味着你可以写很多代码而不需要考虑太多关于语法和大小括号的问题——尽管对于复杂程序这些很重要。1、GETTING STARTED(开始学习)你可以在Raspbin系统的applicatio
翻译
7998阅读
2评论
1点赞
发布博客于 7 年前

树莓派 —— rsync(同步)

你可以使用rsync工具在不同计算机之间同步文件夹。你可能想要从你的桌面计算机或者笔记本上传送文件到你的树莓派上,并保持这个文件的更新。或者,你想要把你的树莓派拍摄的照片自动传送到你的计算机上。使用基于SSH的rsync可以让你自动将文件传送到你的计算机上。以下的例子是将你的树莓派上的照片文件夹设置为自动同步到你的计算机上:在你的计算机上创建一个名为camera的目录:
翻译
3578阅读
0评论
0点赞
发布博客于 7 年前

树莓派 —— Cron 和 Crontab(定时任务)

Cron是Unix系统的一个配置定期任务的工具,用于定期或者以一定的时间间隔执行一些命令或者脚本;可执行的任务范围可以是每天夜里自动备份用户的home文件夹,也可以每个小时记录CPU的信息日志。crontab(cron table)命令用于编辑执行中的定期任务列表,并且操作是基于每个用户的,每一个用户(包括root用户)都拥有自己的crontab。EDITING CRONTAB
翻译
12257阅读
0评论
1点赞
发布博客于 7 年前

树莓派上使用SFTP管理文件

SFTP(SSH文件传输协议)是一种网络协议,提供了基于SSH协议的文件访问、文件传输和文件管理方法。通过使用SFTP,你可以很容易修改、浏览以及编辑树莓派上的文件。SFTP比起FTP更容易配置,因为Raspbian默认已经启用SSH。Filezilla在filezilla-project.org上对应你的操作系统下载最新版本的FileZilla客户端。启动Fi
翻译
4344阅读
0评论
0点赞
发布博客于 7 年前

在Window平台使用VNC连接树莓派

在Windows平台上你需要下载并安装一个VNC客户端程序。常用的有TightVNC,你可以从tightvnc.com上下载。根据你的Window系统版本选择对应的32位或者64位版本下载。如果你不知道你的Window系统版本,可以在控制面板中查看。下载安装文件并运行。在安装过程中,你将有机会选择典型安装、自定义安装或者完全安装。你只需要VNC客户端,不需要服务端,所以选择自定义安
翻译
1838阅读
0评论
0点赞
发布博客于 7 年前

在Mac OS平台使用VNC连接树莓派

在Mac OS平台上你需要安装一个VNC客户端程序。你也可以直接使用屏幕分享(系统自带的程序),但是这个程序需要配置比较多的东西。我们使用另一个能够与树莓派VNC服务友好工作的程序叫RealVNC,你可以从realvnc.com下载。下载安装包文件并打开它。在安装过程中你可以选择安装类型。你只需要在你的Mac上安装VNC客户端,不需要vnc服务。因此选择自定义,并不要勾选VNC Serve
翻译
6794阅读
0评论
0点赞
发布博客于 7 年前

在Linux平台使用VNC连接树莓派

你的Linux发行版本可能已经包含了Remote Desktop Viewer(远程桌面)程序,你可以通过这个程序使用VNC连接你的树莓派。通常可以在Applications/Internet菜单下面找到这个程序(下面是Ubuntu的例子);一旦你选择Remote Desktop Viewer程序并点击Connect(连接)按钮,你将会看到以下对话框。在Protocol(协议)
翻译
2427阅读
0评论
0点赞
发布博客于 7 年前

树莓派和VNC

有时候直接操作树莓派不是很方便。你可能想要使用其它计算机通过远程来控制树莓派。VNC是系统分享的一个图形界面,能够让你从一台计算机远程控制另一台计算机的桌面接口。它从操作计算机端发送键盘和鼠标事件,并通过网络接收到远程计算机的屏幕更新。你将在你的计算机上的一个窗口中看到树莓派的桌面。你可以在这个桌面上跟直接控制树莓派一样操作。-  在你的树莓派上(使用一个显示器或者通过SS
翻译
1602阅读
0评论
0点赞
发布博客于 7 年前

使用SSH无密码验证访问树莓派

让你的计算机每次连接树莓派都不需要输入密码是可以实现的,你只需要生成一个SSH key。1、CHECK FOR EXISTING SSH KEYS(检查已存在的SSK key)首先,检查你的计算机(你用来连接树莓派的设备)是否已经有SSH key:ls ~/.ssh如果你看到像id_rsa.pub或者id_dsa.pub这样的文件,那么你就已经配置好key了。你可以直接
翻译
6082阅读
0评论
0点赞
发布博客于 7 年前

Linux或者Mac系统使用SSH连接树莓派

你可以在一台Linux或者Mac计算机(或者另一个树莓派)的终端上使用SSH连接你的树莓派,并且不需要其它软件。你需要知道你的树莓派IP地址以便连接上它。查询IP,可以在树莓派的终端上输入命令“hostname -I”。另外,如果你运行的树莓派没有显示器,你可以查看你的路由器上的设备列表或者使用像nmap这样的工具。在计算机的终端上复制黏贴以下命令,但是要把其中的替换你的树莓派IP
翻译
11003阅读
2评论
1点赞
发布博客于 7 年前

在树莓派上播放视频

播放视频,先在命令行终端上使用“cd”命令将路径切换到你的视频文件所在目录,然后输入以下命令:omxplayer example.mp4这将会全屏播放example.mp4文件,按Ctrl + C可以退出。EXAMPLE VIDEO SAMPLE:BIG BUCK BUNNY(示例视频:大雄兔)这里有一个可在树莓派上播放的实例视频:动画片《大雄兔》。播放这部影片,可以在终端上输
翻译
5380阅读
0评论
0点赞
发布博客于 7 年前

在树莓派上播放音频

播放一个MP3文件,在命令行终端上用“cd”命令导航到.mp3文件所在的路径,然后输入以下命令:omxplayer example.mp3这将会通过你的显示器内置音箱或者你的耳机接口连接设备播放example.mp3音频文件。如果你需要一个示例音频文件,你可以输入以下命令来获取:wget http://goo.gl/MOXGX3 -O example.mp3 --no-check-c
翻译
11203阅读
1评论
0点赞
发布博客于 7 年前

树莓派raspi-config配置工具

raspi-config是由Alex Bradbury设计并维护的树莓派配置工具,适用于Raspbian系统。1、USAGE(使用)当你第一次启动Raspbian的时候会有rasp-config的提示。打开这个配置工具,只需要在终端上简单输入以下命令:sudo raspi-config要求sudo管理员权限是因为你要修改的文件不属于pi用户所有。你将会看
翻译
7844阅读
0评论
1点赞
发布博客于 7 年前

树莓派音频配置

树莓派有两种音频输出模式:HDMI和耳机接口。你可以在任何时候切换这两种模式。如果你的HDMI显示器有内置的音箱,音频是可以通过HDMI接口播放的。你也可以切换到耳机接口,使用耳机或者其它耳机接口的音箱播放。如果你的显示器请求音箱支持,声音默认通过HDMI输出;如果没有,那将通过耳机接口输出。这可能不是你所期望的设置,也有可能自动检测的结果不准确,这种情况你可以手动选择输出。1
翻译
25363阅读
0评论
2点赞
发布博客于 7 年前

树莓派用户管理

树莓派的用户管理需要在命令行终端上处理。默认的用户名是pi,密码为raspberry。你可以添加用户并修改每一个用户的密码。1、CHANGE YOUR PASSWORD(修改你的密码)当你使用pi用户登录之后,你可以使用passwd命令修改你的密码。在命令行中输入passwd,然后按回车。命令行终端会提示你输入当前的密码进行验证,验证通过后会要求你输入新的密码。输完按回车完
翻译
14599阅读
0评论
2点赞
发布博客于 7 年前

树莓派wifi自动联网

上两篇介绍了树莓派系统的安装,用网线接入路由器,以及树莓派的vnc配置。使用网线将树莓派接入路由器的方法虽然简单,但是会让树莓派的移动性大大降低。我的路由器是wifi路由器,我希望在我的路由器信号范围内可以把树莓派放到任意到一个地方,插上电源就可以远程访问,不被网线限制。因此,需要给树莓派添加wifi模块。给树莓派添加wifi模块,实际上就是一个usb无线网卡。我使用的是EOUP的
原创
7016阅读
0评论
1点赞
发布博客于 7 年前

树莓派vnc远程桌面

在没有显示器的情况下,可以使用putty远程终端登录树莓派。然而,所有的操作都要通过输入命令来执行,这对于习惯了桌面可视化操作的我们来说一时可能难以适应。一种解决的方法是使用vnc远程桌面。首先要在树莓派上安装VNC服务。打开putty登录上树莓派,输入以下命令:sudo apt-get install tightvncserver确保你的树莓派能够连接上互联网,树莓派会自
原创
6827阅读
0评论
0点赞
发布博客于 7 年前

VNC-Viewer-5.0.3-Windows-32bit.exe

Window平台下用于连接服务器的vnc远程桌面终端。
exe
发布资源于 7 年前

无显示器安装树莓派操作系统

树莓派是一种微型计算机,只有卡片般大小,而且便宜。非常适合用于学习Linux操作系统,或者搭建家庭微型服务器媒体中心等。关于树莓派的详细介绍我就不再多说了,想要了解更多树莓派的内容可以自行google或者直接访问树莓派的官方网站http://www.raspberrypi.org/。这里主要讨论下如何在没有显示器的情况下安装树莓派操作系统并登录上去。实际上由于成本关系,我们购买
原创
13392阅读
0评论
0点赞
发布博客于 7 年前

putty-0.62-installer.exe

Window平台上SSH协议远程连接终端工具
exe
发布资源于 7 年前

Win32DiskImager-0.9.5-binary.zip

Windows平台用于烧录树莓派系统映像工具
zip
发布资源于 7 年前

Gson用户指南

作者:Inderjeet Singh, Joel Leitch, Jesse Wilson1、Overview(概览)Gson是一个Java类库,用于将Java对象转换为它们所代表的JSON数据,也可以用于将一个JSON字符串转换为对应的Java对象。Gson是一个开源项目,托管于http://code.google.com/p/google-gson。Gson可以用于任意
翻译
3125阅读
0评论
1点赞
发布博客于 7 年前

iBeacon工作原理(How do iBeacon work?)

iBeacon是最近非常火的话题。这种技术能够实现室内定位,让你的手机能够知道是否处于一个Beacon的范围内。使用这种技术能够产生很多应用程序:比如帮助你在停车场中找到你的汽车,或者在零售店中根据所处位置提供优惠券或者其它一些位置相关的服务。还有很多我们现在无法想象得到的应用程序。现在有很多种关于iBeacon是什么,以及我们可以如何使用它们的解释。然而从技术角度上来说,它们是如何工作的
翻译
37943阅读
6评论
9点赞
发布博客于 7 年前

Android Gradle Plugin指南(六)——高级构建定制

原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Advanced-Build-Customization7、 Advanced Build Customization(高级构建定制)7.1 Build options(构建选项)7.1.1 Java Compilation o
翻译
16368阅读
2评论
6点赞
发布博客于 7 年前

Android Gradle Plugin指南(五)——Build Variants(构建变种版本)

原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants6、 Build Variants(构建变种版本)新构建系统的一个目标就是允许为同一个应用创建不同的版本。这里有两个主要的使用情景:    1、同一个应用的不同版本。例如一个免费的版本和一个收
翻译
28308阅读
4评论
6点赞
发布博客于 7 年前

Android Wear - App Structure for Android Wear(应用结构)

用户习惯于点击图标来启动应用程序,但是Android Wear不一样。一个典型的Wear应用程序会在一个情境的合适时刻插入一张卡片到信息流中。这张卡片可能会包含一个用于快速交互的按钮来打开一个全屏视图(在一些情况下,卡片也可能不会提供交互按钮):以下是简单排序的构建模块。你可以使用其中的一个或者多个模块,但是我们强烈推荐不要构建这样的应用:用户在启动或者退出应用之前必须仔细考虑应该怎样响应一个指定的地点、活动、一天中某个具体的时间,或者是云端上发生的一些事情。
翻译
2716阅读
0评论
0点赞
发布博客于 7 年前

Android Gradle Plugin指南(四)——测试

原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing5、Testing(测试)构建一个测试程序已经被集成到应用项目中,没有必要再专门建立一个测试项目。5.1 Basics and Configuration(基本知识和配置)正如前面所提到的,紧邻
翻译
4606阅读
3评论
1点赞
发布博客于 7 年前

Android Gradle Plugin指南(三)——依赖关系、android库和多项目配置

原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Dependencies-Android-Libraries-and-Multi-project-setup4、Dependencies,Android Libraries and Multi-project setup(依赖关系,Androi
翻译
11133阅读
3评论
6点赞
发布博客于 7 年前

Android Gradle Plugin指南(二)——基本项目

原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Basic-Project3、Basic Project(基本项目)一个Gradle项目的构建过程定义在build.gradle文件中,位于项目的根目录下。3.1 Simple build files(简单的构建文件)
翻译
10647阅读
7评论
8点赞
发布博客于 7 年前

Android Gradle Plugin指南(一)——简介

原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Introduction译者:google推出了全新的Android Studio集成开发环境,其中Android项目的结构与Eclipse的Android项目结构有很大的区别,原因就在于两开发环境使用的构建工具不同。Android Studi
翻译
8305阅读
4评论
5点赞
发布博客于 7 年前

Ant学习笔记

1、Ant(another neat tool)是一个基于Java的生成工具,其作用类似于命令的批处理,通过设置一个xml文件后,Ant将会执行xml文件中指定的系列命令。这对于随着应用程序的生成过程变得更加复杂,又需要确保在每次生成期间都使用精确相同的生成步骤,同时实现尽可能多的自动化,以便于及时产生一致的生成版本非常重要。2、Ant是基于命令行操作的。单纯使用ant命令时,Ant将会在
原创
1078阅读
0评论
0点赞
发布博客于 7 年前

JavaScript学习笔记 第六记

1、浏览器的事件机制:冒泡事件机制,IE浏览器的冒泡机制是内容元素的事件处理后逐层抛出给外层元素进行事件处理,其它浏览器基本沿用这个方向,但也有相反的。2、浏览器自动生成的事件对象even方法.stopPropagation()可以阻断事件继续冒泡到下一层,而.perventDeafult()可以阻止这个对象的默认行为,如表单对象的action事件默认行为是提交表单。而在事件处理方法中使用
原创
682阅读
0评论
0点赞
发布博客于 7 年前

JavaScript学习笔记 第五记

1、jquery对象的两个方法.html()返回的是标签对象包含的html内容(包括包含的其它标签元素一并输出),而.text()返回的是标签对象最终显示的文本格式(包含的其它格式标签作用在文本后输出最终的文本格式)。2、jquery过滤选择器的表单对象属性过滤选择器:    1):enabled选择器:$("#form1 :enabled"),选取id为form1的表单内所有可用的元
原创
883阅读
0评论
0点赞
发布博客于 7 年前

JavaScript学习笔记 第四记

1、选择器的目的是为了获取页面中的标签元素,jquery提供了四类选择器:基本选择器、层次选择器、过滤选择器、表单选择器。2、jquery的基本选择器:    1)ID选择器:$("#idvalue"),选取id为idvalue的元素。返回的数组中只有一个元素,即使页面中存在多个相同id的元素也只获得最前面的元素,因为ID本来就不提倡同个页面中出现多个。    2)类选择器:$("
原创
692阅读
0评论
0点赞
发布博客于 7 年前

JavaScript学习笔记 第三记

1、路径中..表示上一层路径。2. JavaScript编码规范:通常在JavaScript不希望外界访问的成员和方法名以下划线开始。3. jsUnit测试函数的要遵循的规则与JUnit 3.8类似(比如说测试函数名以test开头等)。4. 对于JsUnit来说,其setUp和tearDown方法与JUnit的运行原理是不同的,JUnit中的setUp和tearDown之间
原创
645阅读
0评论
0点赞
发布博客于 7 年前

JavaScript学习笔记 第二记

1、JavaScript的Cookie:添加cookie格式为document.cookie="key=value;expries=有效日期"。其中有效日期为GMT事件格式,可以使用new Date()的toGMTString()方法获得;删除cookie格式为document.cookie="key=;expries=当前日期"。2、两种类型的cookie:    1)持久性cook
原创
821阅读
0评论
0点赞
发布博客于 7 年前

JavaScript学习笔记 第一记

1、JavaScript是一种可以嵌入在Web页面中的面向对象和事件驱动的解释性语言,使用动态绑定(在运行时才对对象进行检查)。2、JavaScript区分大小写,语句以行为单位,可以加“;”或者不加。3、Web页面中嵌入JavaScript需要使用标签,可以嵌入到页面中的任何位置。4、使用JavaScript的基本格式:    1) document.write("H
原创
828阅读
0评论
0点赞
发布博客于 7 年前

JavaWeb学习笔记 第十二记

1、设置临时域名:Windows系统下C:\WINDOWS\system32\drivers\etc\hosts文件,最后添加“IP地址 临时域名”,保存后即可在本机使用临时域名访问设置IP地址的主机。2、Tomcat设置虚拟主机:Tomcat目录的conf目录中server.xml文件中    子标签Host即为设置Tomcat虚拟主机,对应域名到对应的应用目录中。3、E
原创
740阅读
0评论
0点赞
发布博客于 7 年前

JavaWeb学习笔记 第十一记

1、Servlet监听器HttpSessionListener:实现javax.servlet.http.HttpSessionListener接口的类,主要包含两个方法:    1)sessionCreated(HttpSessionEvent se):当创建一个Session时调用。    2)sessionDestroyed(HttpSessionEvent se):当销毁一个Ses
原创
801阅读
0评论
0点赞
发布博客于 7 年前

JavaWeb学习笔记 第十记

1、FilterChain链的形成:定义好各个链中的Filter过滤器后,决定FilterChain链中各个过滤器顺序的关键在于web.xml文档中Filter配置标签的前后顺序。当web.xml中配置的多个的子标签内容是同一个或包含有同一个url时,这个几个标签代表的Filter过滤器就存在于同一个FilterChain链中,并且它们在链中的顺序按Filter的标签在web.xml中的先后顺序排
原创
674阅读
0评论
0点赞
发布博客于 7 年前

JavaWeb学习笔记 第九记

1、HttpServletRequest和HttpServletResponse对象由Servlet容器负责创建,对于每一个HTTP请求,Servlet容器都会创建一个HttpServletRequest对象和HttpServletResponse对象。2、Web服务器跟踪客户状态的四种常见方法:    1)建立含有跟踪数据的隐藏字段(如input标签type属性值为hidden的控件
原创
827阅读
0评论
0点赞
发布博客于 7 年前

JavaWeb学习笔记 第八记

1、ServletRequest接口中主要方法:    1)getAttribute:根据参数给定的属性名返回属性值。    2)getContentType:返回客户请求数据MIME类型(MIME类型是定义在Tomcat的web.xml文档中的一组媒体类型)。    3)getInputStream:返回以二进制方式直接读取客户请求数据的输入流。    4)getParamete
原创
673阅读
0评论
0点赞
发布博客于 7 年前

JavaWeb学习笔记 第七记

1、JSP标签用于为JavaBeanID对象的number成员赋值elementname的值。param的值通常是request中的附加的数据的数据名,在JSP解析为Servlet后这部分实际上就是使用request.getParameter(elementname)。需要注意的是param属性和value属性不能同时使用,一个jsp:setProperty标签中只能使用两者其一。2、jsp:
原创
902阅读
0评论
0点赞
发布博客于 7 年前

JavaWeb学习笔记 第六记

1、重定向ServletResponse.setRedirect(String location):将转移到location路径代表的页面上,如果location以“/”开头则说明它从Servlet的容器目录中寻找,也就是http://host:port/Servlet所在web应用的目录下寻找。的目录下查找转移目标文件;如果不是则从当前2、请求转发和重定向的区别:1)请求转发的整个过程中
原创
739阅读
0评论
0点赞
发布博客于 7 年前

JavaWeb学习笔记 第五记

1、JSP内置页面上下文对象pagContext:代表当前页面运行的一些属性,常用方法有findAttribute、getAttribute、getAttributesScope、getAttributeNamesInScope等,一般很少使用这个对象,Servlet容器才会使用这个对象。2、JSP内置会话对象session:代表服务器和客户端所建立的会话,当需要在不同的JSP页面中保
原创
763阅读
0评论
0点赞
发布博客于 7 年前

JavaWeb学习笔记 第四记

1、JSP的执行过程:1)客户端发出JSP请求,Tomcat服务器查找对应的JSP文件,如果找不到则直接返回,发出404错误。2)Tomcat服务器判断客户端请求JSP文件是否被修改过或者第一次调用,如果是则调用JSP引擎解析JSP文件,生成对应的Servlet源代码(存放于Tomcat目录下的work目录中),并对Servlet源代码进行编译生成class文件,再将class文件加载入内
原创
646阅读
0评论
0点赞
发布博客于 7 年前

JavaWeb学习笔记 第三记

1、MyEclipse创建web project后,创建的WebRoot目录:META-INF、WEB-INF、index.jsp。其中,META-INF目录的文件不用直接与其打交道,最重要的是WEB-INF目录,里面存放了应用的文件,包括classes目录(存放应用编译好的class文件)、lib目录(应用需要的第三方类库必须放在这个目录下)、web.xml(整个web应用的核心,用于配置web
原创
777阅读
0评论
0点赞
发布博客于 7 年前