堂的博客

给岁月以学习,而不是给学习以岁月


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

  • 搜索

js原生时间格式化

发表于 2020-09-25 | 更新于: 2020-09-25 | 分类于 前端 | 评论: | 阅读次数:

js 原生的时间格式化挺强的,内部用的是 Intl.DateTimeFormat() ,附 文档 , Intl 对象是 ECMAScript 国际化 API 的名称空间,它提供语言敏感的字符串比较、数字格式化以及日期和时间格式化。

以下附实用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const date = new Date('2020/9/25 09:40:50');

// 日期
console.log(date.toLocaleDateString("zh-CN"));
// 2020/9/25

// 时间
console.log(date.toLocaleTimeString("zh-CN", {
hour12: false
}));
// 09:40:50

//
console.log(date.toLocaleString("zh-CN", {
hour12: false
}));
// 2020/9/25 09:40:50

console.log(date.toLocaleString("hc", {
hour12: false,
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
}));
// 2020/09/25 09:40:50

Tip: 每个日期时间组件属性的默认值都是 undefined,但如果所有组件属性都未定义,则假定年、月和日为 numeric 。

EM算法

发表于 2019-12-19 | 更新于: 2019-12-20 | 分类于 机器学习 | 评论: | 阅读次数:

引用自 NLP-LOVE/ML-NLP

什么是EM算法

数据挖掘十大算法之一的EM算法。

最大期望算法(Expectation-maximization algorithm,又译为期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量。

最大期望算法经过两个步骤交替进行计算,

第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;
第二步是最大化(M),最大化在E步上求得的最大似然值来计算参数的值。M步上找到的参数估计值被用于下一个E步计算中,这个过程不断交替进行。

极大似然估计用一句话概括就是:知道结果,反推条件θ。

阅读全文 »

机器学习算法—降维算法—PCA

发表于 2019-08-27 | 更新于: 2019-08-30 | 分类于 机器学习 | 评论: | 阅读次数:

现实应用中属性维数经常成千上万。而许多学习方法都涉及距离计算,而高维空间会给距离计算带来很大的麻烦,例如当维数很高时甚至连计算内积都不再容易。

事实上,在高维情形下出现的数据样本稀疏、距离计算困难等问题,是所有机器学习方法共同面临的严重障碍,被称为 “维数灾难(curse of simensionality)”。缓解维数灾难的一个重要途径是 降维(dimension reduction) , 亦称 ”维数约简“, 即通过某种数学变换将原始高维属性空间转变为一个低维 ”子空间“(subspace), 在这个子空间中样本密度大幅提高,距离计算也变得更为容易。

为什么可以降维呢? 因为很多时候,人们观测或者收集到的数据样本虽然是高维的,但与学习任务密切相关的也许仅是某个低维分布,即高维空间的一个低维 ”嵌入“。例如:数据属性中存在噪声属性、相似属性或冗余属性等,对高维数据进行降维能在一定程度上达到提炼低维优质属性或降噪的效果。

在很多算法中,降维算法成为了数据预处理的一部分,如 PCA

降维算法简介

目前已经存在大量的数据降维算法,可以从另个不同的维度对它们进行分类。按照是否有使用样本的标签值,可以将降维算法分为 有监督降维 和 无监督降维 ;按照降维算法使用的映射函数,可以将算法分为 线性降维 与 非线性降维 。

  • 无监督降维算法 不使用样本标签值,因此是一种无监督学习算法,其典型代表是 PCA 。有监督的降维算法 则使用了样本标签值,是一种有监督学习算法,其典型代表是 LDA
  • 线性降维算法 根据样本集构造出线性函数完成向低维空间的映射。一般通过对向量 $x$ 进行线性变换即左乘一个投影矩阵 $W$ 而得到结果向量 $y$ : $y = Wx$ , PCA 和 LDA 都是 线性降维算法 ; 非线性降维算法则构造一个非线性映射完成数据的降维。很多时候数据是非线性的,因此需要使用 非线性降维算法 以取得更好的效果,LLE 就是一种 非线性降维算法

对于 线性降维,我们主要使用 投影 的方法。对于 非线性降维, 我们主要使用 流形学习。流形学习(manifold learning) 是一种借助拓扑流形概念的降维方法,流形是指在局部与欧式空间同胚的空间,即在局部与欧式空间具有相同的性质,能用欧氏距离计算样本之间的距离。这样即使高维空间的分布十分复杂,但是在局部上依然满足欧式空间的性质,基于流形学习的降维正是这种 “邻域保持” 的思想。可以简单的将流形理解成二维空间的曲线,三维空间的曲面,等几何体在更高维空间的推广。

有时候, 投影 并不是降维的最佳方法。在很多情况下,子空间可能会扭曲和转动,比如图所示的著名的瑞士卷数据集:
swiss_roll_data
简单地将数据集投射到一个平面上会将瑞士卷的不同层叠在一起,如图左侧所示。但是,你真正想要的是展开瑞士卷所获取到的类似图右侧的 2D 数据集。这时候就需要使用 流形学习。
swill_roll_reduce

所以采用哪种方式降维,这一切都取决于数据集。

大概介绍一下几个比较出名的降维算法: PCA 、 LDA 、 LLE

阅读全文 »

Service Workers 简单实例与学习

发表于 2019-07-12 | 更新于: 2019-08-20 | 分类于 前端 | 评论: | 阅读次数:

Service Workers 可以让你的网页在离线模式下访问。 附几个链接:

  • Service Workers 使用文档
  • Workbox:快速构建 Service Workers 的工具
  • A 5 minute intro to Workbox 3.0

前情提要

  • 目前有的浏览器还不支持,比如 IE … 使用前请用 caniuse 查询支持情况
  • https 的页面才支持。为了调试,本地 localhost 也可以

通过观察拥有 Service Workers 的网站,比如说 996.ICU ,通过打开 Chrome dev tools => Application => Service Workers 选项,可以看到这个网站注册了一个 Service Workers, 它使用的源文件是 service-worker.js ,点击打开可以看到里面的代码,这个很简单,而且使用 workbox 生成的。

其实我们的浏览器会记录所有访问过的网站里面有 Service Workers 的。在上面的调试窗口下,可以看到 996.icu 下面还有一个 Service workers from other domains 的选项,打开就可以看到其他使用 Service Workers 的网站了。我看了我访问过的那些网站, 除了 lodash 的 sw.js 不知道用什么生成的外,其他的都用的是 workbox 生成的。

下面简单说一下步骤,简单明了,保证你一看就会。就以 frontend-nanodegree-mobile-portfolio(这是上一篇博文网页关键渲染路径中的实例仓库) 为例

阅读全文 »

网页关键渲染路径

发表于 2019-07-02 | 更新于: 2019-07-10 | 分类于 前端 | 评论: | 阅读次数:

详细请阅读 google文档 ,这儿记录一些关键的总结
udacity 有个课程也讲得很详细: 课程

浏览器首次渲染的几个步骤

  1. 处理 HTML 标记并构建 DOM 树。
  2. 处理 CSS 标记并构建 CSSOM 树。
  3. 将 DOM 与 CSSOM 合并成一个渲染树。渲染树不包括不可见的元素(如: header 下所有,display:none; 的元素,但包括 visibility:hidden; 的元素)
  4. Layout : 根据渲染树来布局,以计算每个节点的几何信息。
  5. Paint : 将各个节点绘制到屏幕上。

优化关键渲染路径就是指最大限度缩短执行上述第 1 步至第 5 步耗费的总时间。 这样一来,就能尽快将内容渲染到屏幕上,此外还能缩短首次渲染后屏幕刷新的时间,即为交互式内容实现更高的刷新率。

阅读全文 »

flutter 使用 CI 打包

发表于 2019-06-03 | 更新于: 2019-08-15 | 分类于 flutter | 评论: | 阅读次数:

CI (continuous integration) : 持续集成。用来做一些自动化工作,比如程序的打包,单元测试,部署等。

  • 我最常用的 git 仓库是 Github , Travis CI 对 Github 支持的特别好,使用非常方便。
  • 公司的仓库在 Gitlab 上, Gitlab自己内部集成了 Gitlab CI。

本文主要介绍这两种 CI 自动化打包部署 flutter apk

Travis CI

Travis CI 与 Github 结合比较紧密,对 GitHub 上的开源Repo是免费的,私有Repo收费。

Travis CI 有两个网址,一个是 travis-ci.org , 另一个是 travis-ci.com 。 官方推荐使用 travis-ci.com , 告诉我们 travis-ci.org 后面会全部迁徙到 travis-ci.com 。 目前在两个网址都可以实现效果,没啥区别,但不能同时使用。

下面以 travis-ci.org 为例,反正我刚开始用的时候就选了这个,索性 “将错就错”

激活要运行 CI 的仓库

使用 github 账号登录 travis-ci.org , 在个人设置中心可以看到自己在 github 上的仓库, 打开对应的开关即可激活。如图: travis_active

.travis.yml

在项目根目录下添加 .travis.yml, travis 提供了多种语言要用的例子, 可以参考这儿。这儿想实现一个 flutter 打包 apk 的 CI , 我们可以参照它提供的 android 例子。 但是 flutter 和 android 都更新的太快了,所以例子上用的都是老的 android 。

这是我的 .travis.yml , 基于最新的 flutter 版本(目前稳定版是 flutter 1.5.4 )与 android28 进行打包。我这儿暂时没有加签名…

阅读全文 »

dart需知

发表于 2019-04-24 | 更新于: 2019-07-10 | 分类于 flutter | 评论: | 阅读次数:

谷歌开发了 dart 语言,目前已经可以用作 web 端 和 移动端(flutter),在谷歌的展望中以后还可以做桌面端,大一统啊。 此处记录下一些基本又重要,自己会选择性忽视和经常要用的点。

特点:

  • 基于类,面向对象,类可以继承,但只可以单继承
  • 接口实现(多态),抽象类,泛型
  • 单线程(拥有异步处理)
  • 动态类型(类似 js ,拥有 var) 或 类型注解(使用 静态类型关键字 来声明变量,以获得严格的类型检查)。我们可以这样编写我们的代码,在函数的入口,即定义函数的参数时使用 类型注解;而在函数内部,当类型并不重要时使用 动态类型。
阅读全文 »

计算机知识

发表于 2019-04-10 | 更新于: 2019-11-18 | 分类于 杂说 | 评论: | 阅读次数:

看 Crash Course 得到的一部分知识。讲的真好,翻译的也真好。

集成电路IC

每两年左右,随着材料和制造技术的发展,同样大小的空间,IC能塞进两倍数量的晶体管。这就是 摩尔定律

操作系统

  • 操作系统可以运行多个程序,但是当我们切换程序的时候我们不希望丢失数据,所以每个程序有指定的内存区。
  • 但有的程序在使用过程中需要更多地内存,所以就会向操作系统提出申请分配更多地内存。如果同意,就会分配另外的内存,但是由于程序都有指定的内存区,所以新分配内存和之前指定的内存就不是连续的。为了解决这个问题,出现了虚拟内存, 虚拟内存和真实内存是映射关系,虽然程序的实际内存是不连续的,但是虚拟内存是连续的,从 0 到 xxxx
  • 由于程序有不同的内存,所以可以内存保护。不同的程序无法访问其他程序的内存。早期的 windows 由于缺乏内存保护,有时候程序的不当使用会导致系统崩溃,从而引发蓝屏

文件系统

文件的本质是一段二进制,通常在前面的几位是文件头,描述了文件的大小,描述了如图片文件的行列数(什么时候换行)…

  • 为了方便扩展文件大小,硬盘上分为一个个存储块,每个文件占用一个或多个存储块,文件占用的存储块随着文件顺序排列,当文件变大的时候分配新的未使用的存储快
  • 为了记录文件所对应存储快,文件同层下会有一个目录文件,记录了当前目录下所有文件的相关信息:创建时间、修改时间、是否是目录、所在的存储块…
    • windows 删除文件的时候其实只是删除了目录文件下对该文件的记录,让我们无法看到,而没有在在硬盘上的删除该文件。所以我们可以通过有些工具恢复删除的文件
    • windows 上同一块存储上移动文件特别快,原因是因为只需要在原来目录下的目录文件中删除该文件信息,然后再目标目录下的目录文件中添加该文件信息即可。而不是在存储结构上真实的移动
    • windows 在多次进行文件的删除、修改、迁移之后,会使得很多文件在存储上占用的存储块都是不连续的。而 碎片整理 就是从新让文件在存储上顺序排列的过程( SSD 不需要 碎片整理 )

压缩

图片颜色用 红绿蓝 三种颜色合成表示,每个颜色都是 1 个字节, 所以一个 16px 的图片 占用的内存是 16 * 3 = 48 字节。我们可以用以下方法实现减少内存。

阅读全文 »

flutter 父子通信

发表于 2019-04-02 | 更新于: 2019-06-11 | 分类于 flutter | 评论: | 阅读次数:

很早之前看过一句话,最近又重新看到。一个程序员,应该花80%的时间做代码设计、画UML图、画时序图,20%的时间写code和debug。而我恰恰相反,是不是得改变一下做法了?

flutter 做出来的 App 性能非常好,比 react-native 好太多了,基本和原生一样。flutter 里面的组件叫做 Widget ,名称不同,思想一样,下面是一些组件通信的技巧。

子组件调用父组件的函数

这个简单,父组件给子组件传递回调函数参数,子组件在需要的地方调用传进来的回调函数即可

父组件调用子组件的函数

globalKey

类似于 vue 中的 refs , 可以直接获取子组件 state 的引用

示例代码:

main.dart:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import 'package:flutter/material.dart';

// 1. 创建 globalKey
GlobalKey<HomePageState> globalKey = GlobalKey();

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.help),
onPressed: () {
// 3. 通过 globalKey 的 currentState 获取方法
globalKey.currentState.methodA();
},
),
),
// 2. 给子组件传递一个 globalKey
body: HomePage(key: globalKey),
),
);
}
}

阅读全文 »

机器学习算法 — 奇异值分解

发表于 2019-03-26 | 更新于: 2019-07-10 | 分类于 机器学习 | 评论: | 阅读次数:

机器学习算法可以分为三大类:监督学习、无监督学习和强化学习。

  • 监督学习可用于一个特定的数据集(训练集)具有某一属性(标签),但是其他数据没有标签或者需要预测标签的情况。
  • 无监督学习可用于给定的没有标签的数据集(数据不是预分配好的),目的就是要找出数据间的潜在关系。
  • 强化学习位于这两者之间,每次预测都有一定形式的反馈,但是没有精确的标签或者错误信息。

有几种常见的关于监督学习和无监督学习的算法。比如决策树、朴素贝叶斯分类、最小二乘法(是一种计算线性回归的方法)。在这儿,主要介绍一种无监督学习的算法:奇异值分解(SVD), 在线性代数中,SVD 是复杂矩阵的因式分解。

基础知识

矩阵的特征值和特征向量

设 A 是 n 阶矩阵,若存在数 $\lambda$ 及非零的 n 维列向量 $\nu$ ,使得
$$A\nu=\lambda\nu$$
成立,则称$\lambda$是矩阵 A 的特征值,称非零向量 $\nu$ 是矩阵 A 属于特征值 $\lambda$ 的特征向量

阅读全文 »

12…8
堂

堂

道不同不相为谋,懒懒的继续编程......

74 日志
8 分类
49 标签
RSS
GitHub 知乎 QQ群
Creative Commons
友情链接
  • 飞哥的博客
  • 治元的博客
  • 长安曹公子
  • IT姑凉博客
0%
© 2020 堂
由 Hexo 强力驱动
|
主题 — NexT.Gemini v6.1.0