/ Posts / 总共344篇

Dart 语法游历记【下】「译」

Dart 是一种面向对象语言,包含类和基于 mixin 的继承两部分。每个对象是一个类的实例,并且 Object 是所有类的父类。基于 mixin 的继承指的是每个类(除了 Object )都只有一个父类,类体还可以在多个类继承中被重用。

要创建一个对象,你可以使用 new 关键词并在其后跟上一个构造函数。构造函数可以写成类名,或者类名.标识符形式。例如:

1
2
3
4
5
6
7
var jsonData = JSON.decode('{"x":1, "y":2}');

//用 Point() 创建一个点。
var p1 = new Point(2, 2);

// 用 Point().fromJson() 创建一个点。
var p2 = new Point.fromJson(jsonData);

对象的成员分为函数和数据两类(各自的方法和实例变量)。当你调用一个方法时,你是通过一个对象来调用它的:该方法可访问该对象的方法和数据。用 . 指向对象的方法和数据成员。

阅读更多

Dart 语法游历记【上】「译」

说明

从今天起我计划看一下 Flutter ,既然要学习 Flutter 势必要先看看 Dart 的语法了,于是就找到了官网的一篇文章 《A tour of the Dart language》,接下来几篇也算是对这篇文章的翻译吧,希望我能从中学到东西,也希望对大家有所帮助。

接下来会向大家展示 Dart 语言的语法特征,从变量和操作符到类和库,这里已经假设你掌握了一门计算机语言,熟悉计算机编程。关于更多 Dart 知识建议你参考语法示例 《Language samples》

启动 DartPad

DartPad 会在顶栏显示当前实例的状态,方便进行查看。打开 DartPad

Dart 中的默认入口函数是 main 函数,可以省略 void 返回声明和 String[] args 参数,例如可以这样写:

阅读更多

Hugo 配置文章内容标题索引导航

前提条件

在 Hugo 0.60.0 后我们可以方便的实现文章内标题索引了,因为从这个版本开始引入了 Goldmark MarkDown 生成引擎,基于该引擎在此版本引入了 TableOfContents 配置。

因此,你在尝试此文章的后续内容的前提是确保你的 Hugo 版本是 0.60.0 以上,查看版本命令如下:

1
2
$ hugo version
Hugo Static Site Generator v0.70.0-7F47B99E windows/amd64 BuildDate: 2020-05-06T11:17:50Z

如果你的 Hugo 版本过低,建议先升级版本。

配置文件

1
2
3
4
5
[markup]
    [markup.tableOfContents] #文章导航设置
        endLevel = 3      #3级标题以后不建立索引
        ordered = false   #是否采用有序列表
        startLevel = 2    #2级标题开始建立索引

在你的配置文件中加入上面配置,这里需要注意的是你的配置文件可能不是 toml 格式的,有可能是 yaml 格式或者 json 格式。

阅读更多

Hugo 实现复制剪贴板添加@版权信息

大致介绍

我们经常会在简书、CSDN 等这些博客平台看到复制别人的文章内容在粘贴的时候出现几行版权信息,大致内容如下:

1
2
3
4
5
6
7
8
上面查询,我的版本是 v0.70.0 如果你的版本低于 v0.65.0 则不支持我们今天要设置的代码高亮,请先升级版本。

Hugo 在 v0.65.0 版本之后使用了 Chroma 代码高亮插件,它是一个 Go 语言实现的非常漂亮并能快速生成的代码高亮工具。
---------------------
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:水寒 源地址:https://dp2px.com/2020/05/29/hugo-highlighting/
来源:DP2PX.COM © 水寒版权声明:本文为水寒原创文章,转载请附上博文链接!

今天我们在 Hugo 博客中实现这种剪贴板,并做到如下三点:

  1. 可以过滤指定文章,也就是说部分文章不自动添加版权信息。
  2. 根据复制的字数过滤,低于一定字数不自动添加版权信息。
  3. 自动链接到原始文章路径。

阅读更多

设置 Hugo 的代码高亮

前提条件

首先我们要保证 Hugo 的版本是高于 v0.65.0 的,查询方法如下:

1
2
$ hugo version
Hugo Static Site Generator v0.70.0-7F47B99E windows/amd64 BuildDate: 2020-05-06T11:17:50Z

上面查询,我的版本是 v0.70.0 如果你的版本低于 v0.65.0 则不支持我们今天要设置的代码高亮,请先升级版本。

Hugov0.65.0 版本之后使用了 Chroma 代码高亮插件,它是一个 Go 语言实现的非常漂亮并能快速生成的代码高亮工具。

阅读更多

git pull --rebase 命令「转」

有一种场景是经常发生的。

大家都基于 develop 拉出分支进行并行开发,这里的分支可能是多到数十个。然后彼此在进行自己的逻辑编写,时间可能需要几天或者几周。在这期间你可能需要时不时的需要 pull 下远程 develop 分支上的同事的提交。这是个好的习惯,这样下去就可以避免你在一个无用的代码上进行长期的开发,回头来看这些代码不是新的代码。甚至是会面临很多冲突需要解决,而这个时候你可能还需要对冲突的部分代码进行测试回归,这就很麻烦了。

那么我们来看一下你在 pull 时候需要习惯性的加上 --rebase 参数,这样可以避免很多问题。--rebase 的本意是想让事情的发展看起来很连续和优美,而不是多出很多无用的 merge commit

阅读更多

Justified Gallery 使用中文文档

Justified Gallery 是一个方便你创建瀑布流照片的 JavaScript 库,它可以帮助你优雅的排列图片显示,使用它的网站有 500px、Flickr 和 Google.

官网地址:https://miromannino.github.io/Justified-Gallery/

如何使用

下载地址:https://github.com/miromannino/Justified-Gallery/releases

这个库使用的前提是引入 jQuery 如果你的浏览器不是旧的很离谱它都可以很好的工作。

1
2
<link rel="stylesheet" href="css/justifiedGallery.css" />
<script src="js/jquery.justifiedGallery.js"></script>

阅读更多

Android 查看内存指令

问题

最近在项目中遇到一个 Low on memory 内存过高导致应用退出问题,其中使用了一些内存查看命令,这里做一个记录,错误日志如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
I/ActivityManagerService(  443): Low on memory:
I/ActivityManagerService(  443):   ntv   N     4118 kB: zygote (pid 161) native
I/ActivityManagerService(  443):   ntv   N     2814 kB: surfaceflinger (pid 142) native
I/ActivityManagerService(  443):   ntv   N     1986 kB: logd (pid 136) native
I/ActivityManagerService(  443):   ntv   N     1925 kB: mediaserver (pid 157) native
I/ActivityManagerService(  443):   ntv   N     2749 kB: (Other native)
I/ActivityManagerService(  443):   sys   P    24827 kB: system (pid 443) fixed
I/ActivityManagerService(  443):   pers  P    37707 kB: com.android.systemui (pid 612) fixed
I/ActivityManagerService(  443):   pers  P    13423 kB: com.android.phone (pid 819) fixed
I/ActivityManagerService(  443):   pers  P     8760 kB: com.android.inputmethod.latin (pid 706) fixed
I/ActivityManagerService(  443):   pers  P     5996 kB: android.process.media (pid 575) fixed
I/ActivityManagerService(  443):   pers  P     3577 kB: com.cghs.stresstest (pid 796) fixed
I/ActivityManagerService(  443):   fore  T   153394 kB: com.dlc.huishouxiang (pid 24324) top-activity
I/ActivityManagerService(  443):             261276 kB: TOTAL
I/ActivityManagerService(  443):   MemInfo: 25032 kB slab, 140 kB shmem, 379704 kB vm alloc, 7532 kB page el stack
I/ActivityManagerService(  443):            132 kB buffers, 86556 kB cached, 42500 kB mapped, 180476 kB free
I/ActivityManagerService(  443):   ZRAM: 5652 kB RAM, 520908 kB swap total, 503928 kB swap free
I/ActivityManagerService(  443):   Free RAM: 224664 kB
I/ActivityManagerService(  443):   Used RAM: 677980 kB
I/ActivityManagerService(  443):   Lost RAM: 1158732 kB
I/ActivityManagerService(  443): Start proc 3350:com.android.smspush/u0a43 for service com.android.smspush/.WapPushManager

从日志上 18 ~ 20 行看 Lost RAM 占用太大了,而 Used RAM 占用并不大。

Free RAM:为剩余内存。

Used RAM:为用户态使用总内存。

Lost RAM:为内核态使用内存,比如 OpenGL 纹理内存、GPU 占用内存、图形显示 ION buffer 都包含在 Lost RAM 里,从字面意思是理解它是丢失的内存,也就是说它是操作系统无法解释和正常利用的内存。

其中 Lost RAM = TotalRAM - FreeRAM - UsedRAM 也可以理解为其他内存。

阅读更多

Adplayer 图片音视频广告混播

项目介绍

项目地址:https://github.com/licheedev/AdPlayer

简单的广告混播实现,没有类似 ViewPager 那样的切换滚动效果。

支持加载 url、本地文件、drawable 和 mipmap(仅图片)、raw 资源、asset 文件。

可以自定义图片加载器。

可以配置图片和视频的缩放模式。

添加依赖

app 的 build.gradle 中添加:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
dependencies {
        implementation 'com.github.licheedev:AdPlayer:1.0.3'
        implementation 'com.github.bumptech.glide:glide:4.9.0'
}

阅读更多

关于视频播放 VideoView 的一个 GC 问题

这段时间在一个项目中用到了视频和图片轮播的广告,一开始我使用了 ExoPlayer 视频播放库,结果出现了一个奇葩的问题 ANR on player release #4352,我的设备系统是 Android 5.1.1 于是我尝试工程更新到 AndroidX 将 ExoPlayer 更新到最新版本,结果还是会出问题,貌似在 Android 7.0 中这个问题得到了修复。迫于这个问题的困扰,于是我放弃了 ExoPlayer 而选择系统默认的视频播放库,结果遇到了另一个令人不爽的 bug bug 详细描述

这个问题在更高的 Android 系统中已经被修复 Fix context leak

最后变相解决 VideoView 在 Activity 中内存泄漏的方法:

创建 AudioServiceActivityLeak.java 类:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * Fixes a leak caused by AudioManager using an Activity context. 
 * Tracked at https://android-review.googlesource.com/#/c/140481/1 and
 * https://github.com/square/leakcanary/issues/205
 */
public class AudioServiceActivityLeak extends ContextWrapper {

  AudioServiceActivityLeak(Context base) {
    super(base);
  }

  public static ContextWrapper preventLeakOf(Context base) {
    return new AudioServiceActivityLeak(base);
  }

  @Override public Object getSystemService(String name) {
    if (Context.AUDIO_SERVICE.equals(name)) {
      return getApplicationContext().getSystemService(name);
    }
    return super.getSystemService(name);
  }
}

在使用 VideoView 的 Activity 中重写 attachBaseContext

1
2
3
4
5
6
public class ActivityUsingVideoView extends Activity {
  
  @Override protected void attachBaseContext(Context base) {
    super.attachBaseContext(AudioServiceActivityLeak.preventLeakOf(base));
  }
}

阅读更多

替换及重置 Homebrew 默认源「转」

替换默认源

1
2
3
4
5
6
7
# 替换brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git

# 替换homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git

替换Homebrew Bottles源请向下看。

阅读更多

Mac 终端美化

Mac 默认的终端 terminal.app 不进行配置的话,非常不友好,即没高亮又没提示。 配置以后就不一样了,比如这样:

zsh

shell 的类型有很多种,MacLinux 下默认的是 bash,虽然 bash 的功能已经很强大,但对于以懒惰为美德的程序员来说,bash 的提示功能不够强大,界面也不够炫,并非理想工具。而 zsh 的功能极其强大,上面这些 bash 没有的功能它都有。

阅读更多