第3期 — 2019-05-19

在浏览器中阅读

周e信

扫描二维码关注微信公众号

前端

Blue Bill

页面下滚动动画辅助脚本-delighters🔗

只用于页面向下滚动时触发的动画

使用方法:

引入脚本

<script type="text/javascript" src="delighters.js">

设置需要动画的元素

<div class="foo" data-delighter></div>

自己写动画样式

/* 初始 */
.foo.delighter {
  transition: all 0.3s ease-out;
  transform: translateX(-100%);
  opacity: 0;
}
/* 动画开始 当元素top处于viewpoint 75%处时触发 */
.foo.delighter.started {
  transform: none;
  opacity: 1;
}
/* 动画结束 当元素bottom处于viewpoint 75%处时触发 */
.foo.delighter.started.ended {
  border: solid red 10px;
}

delighters 的作用就是当页面滚动到元素时会应用你的动画样式。

Q42

纯css实现弹出菜单🔗
<button></button>

<nav class="menu">
  <ul>
    <li>
      <button onclick="alert('Hello there!')">
        Display Greeting
      </button>
    </li>
    <li>
      <button onclick="print()">
        Print This Page
      </button>
    </li>
  </ul>
</nav>
.menu {
  visibility: hidden;
}
/**
当点击按钮触发focus时显示菜单,
显示后菜单后点击菜单会触发菜单的active,
这时也要显示,否则菜单按钮无法点击
*/
button + .menu:active,
button:focus + .menu {
  visibility: visible;
}

在线demo

Simone Vittori

响应式纯css框架tailwind1.0发布🔗

工具组合式的使用方式

<div class="max-w-sm mx-auto flex p-6 bg-white rounded-lg shadow-xl">
  <div class="flex-shrink-0">
    <img class="h-12 w-12" src="/img/logo.svg" alt="ChitChat Logo" />
  </div>
  <div class="ml-6 pt-1">
    <h4 class="text-xl text-gray-900 leading-tight">ChitChat</h4>
    <p class="text-base text-gray-600 leading-normal">
      You have a new message!
    </p>
  </div>
</div>

Tailwind

Peter Cooper

googlefont 开始支持 font-display 特性🔗

googlefont 通过生成样式表使用 font-display 来控制字体加载方式。

@font-face {
  font-family: 'my-font';
  /* 当我们将font-display的值设置为swap的时候,
  最开始会先使用系统字体来显示文字,当自定义字体下
  载完毕后,自定义字体就会取代系统字体。*/
  font-display: swap;
  src: url(my-font.woff2) format('woff2');
}
<link
  href="https://fonts.googleapis.com/css?family=Lobster&display=swap"
  rel="stylesheet"
/>

Zach Leatherman

火狐开发版支持行内断点,logpoint🔗

logpoint不会导致 pause。

新的线程面板可更方便的调试 worker,可单独或并排显示多个 worker,可单独 pause worker。

Harald Kirschner (digitarald)

ola-实时数字平滑插值动画js库🔗

示例

// 创建1000个数字实例
const dots = Ola(Array(1000).fill(0));

// 每600毫秒更新所有
setInterval(
  () =>
    dots.forEach((dot, i) => {
      dots[i] = Math.random();
    }),
  600
);

Francisco Presencia

cssfx-复制即可用的纯css效果集合🔗

精简常用的特效,例如加载动画等,不需要图片就可以实现。

Jonathan Olaleye

Electron将每12周发布一稳定版🔗

Electron为适应 Chromium 每 6 周发布一版本的步伐,将开始每 12 周发布一稳定版,同时依然支持最近的三个大版本。

Sofia Nguy

使用create-dmg秒建Mac DMG安装文件🔗

安装npm install --global create-dmg
创建create-dmg 'Lungo.app' Build/Releases 开发者证书不是必须的。

Sindre Sorhus

数据库

丹麦一出租车公司接到信息隐私违规罚款约18万美元🔗

丹麦一家出租车公司 Taxa 因违反 GDPR(一般数据保护条例 General Data Protection Regulation) 数据保留期而被丹麦数据保护局 datatilsynet (DPA) 处以一般数据保护条例处罚。

尽管此数据公司已对用户数据做了匿名处理,然而DPA认为依然可以由电话号码关联到具体用户。

Compliance Junction

postgraphile支持Postgres订阅🔗

postgraphile是基于 Postgres 的支持实时订阅和实时查询的 GraphoQL Nodejs 工具。

订阅特性开始于刚刚发布的 4.4.0 版本。基于 Postgres 的LISTEN/NOTIFY特性。

支持 http,express,connect 整合

可自动映射 SQL 关系到 GraphQL Schema

支持基于指针的翻页

支持 JWT 整合

自带 GraphQL 开发 UI。

Ka

Python

既要高精度也要高性能,人脸识别主流算法大合集🔗

人脸识别的主要应用方式:

  • 在验证场景下,人脸识别算法主要用于回答“这是否为某人”。
    通常直接比较两幅人脸图像提取出来的两个特征的相似度,所以我们常称之为 1:1。

  • 在辨认场景下,人脸识别算法主要回答“这是谁”。
    通常需要将给定的一副人脸图像与计算机中存储的 N 个人的图像比较,所以我们常称之为 1:N。
    比对目标库通常是常住人口库、逃犯库等覆盖面非常广泛,容量非常庞大的人脸数据库,库容量 N 通常能够达到上千万、甚至上亿级别。

  • 监控场景同时具有辨认和验证的特点,人脸识别算法需要回答“这是否为要找的人”。
    库容量相对辨认场景要小,所以我们称之为 1:n。
    库容量一般为几千人甚至万人级别。

对于深度学习来说,不一定总是数据越多,效果越好,但是在人脸识别领域,绝大多数情况是数据越多,效果越好。

残差结构可以很轻松的构建几百层,一千多层的网络而不用担心梯度消失过快的问题,原因就在于残差结构的捷径(shortcut)部分。

残差结构利用捷径这样一个跨层连接的机制,无损地传播梯度,解决了深层网络训练中的梯度消失的问题。从此,深度学习的网络可以轻松到达上百乃至上千层,而不用担心难以训练的问题。

BN 全名是 batch normalization 即批规范化,通过规范化操作将输出信号规范化保证网络的稳定性。

可以理解为 BN 层将输出从饱和区拉倒了非饱和区。它带来的优点主要有:

(1)可以放心的使用大学习率而不用小心的调参了,较大的学习率极大的提高了学习速度;

(2)BN 本身上也是一种正则化的方式,能够增加模型的泛化能力;

(3)BN 降低了数据之间的绝对差异,有一个去相关的性质,更多的考虑相对差异性,因此在分类任务上具有更好的效果。

评价一个人脸识别模型性能好坏最直接的就是它验证性能的好坏。

一个完整的人脸识别系统并不是只有人脸识别算法就能够正常的工作运行的,它还需要诸如人脸检测、关键点定位等诸多算法的配合。

何智翔

将二进制文件分割成 BASE64 文本然后传到 google 不需要占用空间🔗

google doc 文档文本内容不占空间? 那么就这样利用?

> python uds.py push Ubuntu.Desktop.16.04.iso
Ubuntu.Desktop.16.04.iso 需要 543 个文档来保存.
创建父目录成功 ID 1fc6JGpX6vUWiwflL1jBxM1YpuMHFAms8
上传成功 Ubuntu.Desktop.16.04.iso: [██████████████████████████████] 100%

Stewart McGown

你在python3里应该使用的新特性🔗

内置LRU最近最少使用缓存 (3.2+)

import time
from functools import lru_cache
@lru_cache(maxsize=512)
def fib_memoization(number: int) -> int:
    if number == 0: return 0
    if number == 1: return 1
    
    return fib_memoization(number-1) + fib_memoization(number-2)
start = time.time()
fib_memoization(40)
print(f'Duration: {time.time() - start}s')
# Duration: 6.866455078125e-05s

Pathlib (3.4+)

from pathlib import Path
root = Path('post_sub_folder')
print(root)
# post_sub_folder
path = root / 'happy_user'
# 获得绝对路径
print(path.resolve())
# /home/somefolder/post_sub_folder/happy_user

类型提示 (3.5+)

def sentence_has_animal(sentence: str) -> bool:
  return "animal" in sentence
sentence_has_animal("Donald had a farm without animals")
# True

枚举 (3.4+)

from enum import Enum, auto
class Monster(Enum):
    ZOMBIE = auto()
    WARRIOR = auto()
    BEAR = auto()
    
print(Monster.ZOMBIE)
# Monster.ZOMBIE

Extended iterable unpacking (3.0+)

head, *body, tail = range(5)
print(head, body, tail)
# 0 [1, 2, 3] 4
py, filename, *cmds = "python3.7 script.py -n 5 -l 15".split()
print(py)
print(filename)
print(cmds)
# python3.7
# script.py
# ['-n', '5', '-l', '15']
first, _, third, *_ = range(10)
print(first, third)
# 0 2

Vinko Kodžoman

python3.8将要引入fstring调试语法🔗

Python3.8 beta 1.将会引入fstring新语法以方便调试: f"name={name}"可简写为f"{name=}"

./python.exe
Python 3.8.0a4+ (heads/master:88db8bd064, May  9 2019, 15:54:59)
[Clang 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> name = "karthikeyan"
>>> f"name={name}"
'name=karthikeyan'
>>> f"{name=}"
"name='karthikeyan'"

Karthikeyan

其他

谷歌在微服务上的坑和教训🔗

第一条 开始之前需要明确构建微服务的原因

我认为构建微服务的唯一充分理由是组织结构,并且这也应该是大多数组织构建微服务的唯一原因。

第二条 无服务器服务仍然运行在服务器上

我认为有一种趋势,将事情分解成越来越小的部分会变得非常有趣,以至于我们会忘记了其实两个进程间通过网络通信的成本非常高。我也确实看到很多人在这个方向上走的太远,再次强调一下,这还是痴迷于单一目的服务的理念,也是盲目蛮干的失败模式。 我宁愿看到围绕工程组织中的功能单元构建服务,并考虑一定的分区,而不是将事情细分为尽可能小的部分。

第三条 独立并不是绝对的

在为单个服务写代码的时候开发工作还是很顺利的,但在部署的时候问题就来了,交叉出现了一系列的跨服务横切关注点,尤其在生产环境中。那些显而易见的关注点包括安全性、监控、服务发现、身份验证等。这些都是跨功能的关注点。这时候会面临两个问题,第一个问题,每一个团队都必须承担运维压力,而每一个团队的规模相对较小,所以必须要付出额外的成本。第二,其中一些事情是全局的问题,特别像可观察性,需要从系统的全局进行设计,而这样的事情如果每个团队自己做决定,将会失去统一有效的机制。

我认为,当人们追求微服务的独立性时,他们应该考虑哪些维度实际上是独立的,哪些维度应该委托给某类平台团队

第四条 警惕巨大的仪表板

监控不应该对根本原因发出告警,它应该是细化过程的一部分;而应该对 SLI(即服务水平指标)发出告警,对于任何特定系统,SLI 的信息不会有那么多而导致无法处理。

第五条 无法跟踪一切

了解一个微服务系统最基础层面发生的事情可以更好的维护和提供服务,诸如服务请求的起点、它的旅程直到请求的结束,这就是分布式跟踪的最基本想法。

Ben Sigelman 译者 禚娴静

FireFox Send - 火狐免费个人文件分享网盘服务 (加密传输 ,设置密码,限制时间)🔗

FireFox Send 作为一款“临时性的文件传输共享服务”,与传统网盘不同,你上传的文件可设置访问密码、过期时间、最大下载次数。一旦时间或次数超限后,分享链接将自动失效,文件也会彻底销毁删除,无法再被恢复。

实际测试,在国内访问和上传下载的速度都比较快,体验不错,有很高的实用性。

匿名用户可以上传最大 1GB、最长 1 天的临时文件、被下载 1 次后自动删除文件;而注册用户 (同样完全免费) 则最大可以上传 2.5 GB 文件、最长可以保留 7 天的时间、最多允许 100 次下载次数。

得益于 FireFox Send 完全开源 (基于 Node.js 开发),甚至还有开发者推出了命令行版本的工具,可以通过命令一键上传并分享文件,对于运维或开发人员,可以非常方便地通过服务器传输文件或者编写脚本整合到自己的工作流中去。

X-Force

扫描二维码关注微信公众号
本期阅读量