Serif 和 Sans Serif 字体区别
Sans-serif字体的笔画宽度变化往往比Serif字体小。它们通常用于传达简单性,现代性或简约性。 某些字体的笔画结尾处的小特征称为“Serifs”。 Sans-serif font Serif font Serifs (coloured in red) 一些常见的Serif字体是Times New Roman,Georgia,Palatino和Garamond。 相反,常见的Sans Serif字体包括Arial,Helvetica和Tahoma。 在不同的设计中同时使用Serif和Sans Serif字体有很多优点。简单来说,Serif字体在小尺寸正文中易于阅读,而Sans Serif字体在大字体中确实脱颖而出 由于大多数显示器的分辨率不如印刷介质,因此Serif字体在小尺寸显示时可能效果不佳。随着视网膜显示器等技术的改进和4k屏幕的普及,这已不再是一个问题,但是与印刷相比,绝大多数显示器的分辨率仍然很低。因此,目前最好还是将大部分Sans Serif字体用于Web。
macOS中staff和wheel是什么?
“staff”和“wheel”是“Groups”。 Unix权限分为User(Owner)、Groups、World(Other),并为每个用户类别分别设置了读取,写入和执行权限。 “staff”和“wheel”是标准Groups。 通常,向所有用户帐户授予“staff”成员身份。因此,如果您在系统上创建另一个用户帐户,则它们将具有唯一的用户ID,但也将被授予“staff”成员身份。可以分配权限,允许其他Staff成员访问您的文件,但拒绝World/Other访问(注意:World并不真正意味着地球上的所有成员,只是系统上不是您而且不是成员的其他进程;这些术语是在计算机没联网时发明的,他们是自己的小世界。 就像“大轮子“中的“wheel”一样,它是具有重要意义和权威的人,是一个针对管理员的团体。许多文件是wheel组的一部分,这些文件允许wheel组中的用户访问它们的权限,但不允许其他用户访问wheel组。 在macOS系统中,staff和wheel很常见。
通过font-display控制字体行为
web font的生命周期 在讨论什么是font-display之前,让我们先讨论一下web font的生命周期。 在block期间,浏览器将以不可见的字体呈现文本。 这就是为什么在很多使用web font的网站上,在页面的第一次加载期间,您不会看到任何文字或更糟的幻影下划线的原因。 在swap期间,浏览器将以fallback字体呈现文本(在该图中的示例中,这将是默认的“serif”字体)。 failure期意味着未找到字体,在这种情况下,浏览器将使用fallback字体呈现文本,如上所述。 使用新的font-display属性,您可以控制每个周期的长度,以及其中一个周期失败时会发生的情况。 有4个不同的值:block,swap,fallback和optional。 还有auto,通常最终与block相同。 所有现代浏览器(不包括IE)都支持这些值,但是请仔细检查兼容性表以获取最新的信息! font-display用于@font-face内部, @font-face { font-family: ‘Arvo’; font-display: auto; src: local(‘Arvo’), url(https://fonts.gstatic.com/s/arvo/v9/rC7kKhY-eUDY-ucISTIf5PesZW2xOQ-xsNqO47m55DA.woff2) format(‘woff2’); } Google字体现在允许您使用display查询参数控制字体加载: <link href=”https://fonts.googleapis.com/css?family=Roboto&display=optional” rel=”stylesheet”> font-display参数 font-display接受以下值: auto:默认值。使用用户代理使用的任何字体显示策略。当前,大多数浏览器的默认策略都类似于block。 block:赋予字体较短的阻止时间(大多数情况下建议为3s)和无限的swap时间。 换句话说,如果未加载字体,浏览器将首先绘制“不可见”文本,但是在加载后立即swap字体。 为此,浏览器将创建一个匿名字体,其字体与所选字体相似,但所有字形均不包含“墨水”。 仅当需要使用特定字体呈现文本才能使页面可用时,才应使用此值。 swap:给font-face提供零秒的block周期和无限的swap周期。 这意味着如果未加载字体,浏览器会立即以备用字体绘制文本,但是在加载后立即swap字体。 与block相似,仅当以特定字体呈现的文本对页面很重要时才应使用此值,但是以任何字体呈现仍会得到正确的消息。 Logo文字是进行swap的理想选择,因为使用合理的fallback显示方式来显示公司名称会传达信息,但最终您将使用正式字体。 fallback:使font-face的block周期非常小(大多数情况下建议100ms或更短),而swap周期则很短(在大多数情况下建议三秒)。换句话说,如果未加载字体,字体会首先呈现fallback效果,但是一旦加载,字体就会被swap。但是,如果经过的时间过多,则会在整个页面的剩余生命周期中使用fallback。fallback是诸如正文文本之类的不错的选择,在这种情况下,您希望用户尽快开始阅读,并且不想在加载新字体时四处移动文本来打扰他们的体验。 optional:为字体提供了非常小的block周期(在大多数情况下,建议为100ms或更短)和零秒swap周期。与fallback类似,当下载字体更像是“不错”但对体验并不重要时,这是一个不错的选择。可选值由浏览器决定是否启动字体下载,它可以选择不执行字体下载,也可以将字体下载作为低优先级,这取决于它认为最适合用户的方式。在用户连接较弱并且拉下字体可能不是资源的最佳使用的情况下,这可能是有益的。 放到一起,看起来像这样: 一个简单的示例。 所以我该怎么做? 这在很大程度上取决于您使用Web字体的方式,以及使用fallback字体呈现文本是否有意义。 例如,如果要在网站上呈现主体文本,则应使用font-display:optional。 在实现它的浏览器上(2019年更新本文时所有现代浏览器),体验会好得多:您的用户将获得快速的内容,并且如果Web字体下载花费的时间太长,他们将不会获得页面在阅读您的文章时进行重排。 如果您使用web font作为图标,则没有可以使用的fallback字体可以渲染这些icons(除非您使用emoji或其他东西),因此唯一的选择是使用font-display:block完全阻止字体,直到字体准备好为止。 Controlling Font Performance with font-display Font-display
ES5中新增的方法
Array filter 对数组中的每个元素都执行一次指定的函数(callback),并且创建一个新的数组,该数组元素是所有回调函数执行时返回值为 true 的原数组元素。它只对数组中的非空元素执行指定的函数,没有赋值或者已经删除的元素将被忽略,同时,新创建的数组也不会包含这些元素。 //过滤掉小于 10 的数组元素: //代码: function isBigEnough(element, index, array) { return (element >= 10); } var filtered = [12, 5, 8, 130, 44].filter(isBigEnough); // 12, 130, 44 map //将所有的数组元素转换为大写: var strings = [“hello”, “Array”, “WORLD”]; function makeUpperCase(v){ return v.toUpperCase(); } var uppers = strings.map(makeUpperCase); // uppers is now [“HELLO”, “ARRAY”, “WORLD”] // strings is unchanged some 对数组中的每个元素都执行一次指定的函数(callback),直到此函数返回 true,如果发现这个元素,some 将返回 true,如果回调函数对每个元素执行后都返回 false ,some 将返回 false。它只对数组中的非空元素执行指定的函数,没有赋值或者已经删除的元素将被忽略。 //检查是否有数组元素大于等于10: function isBigEnough(element, index, array) { return (element >= 10); } var passed = [2, 5, 8, 1, 4].some(isBigEnough); // passed is false passed = [12, 5, 8, 1, 4].some(isBigEnough); // passed is true every 对数组中的每个元素都执行一次指定的函数(callback),直到此函数返回 false,如果发现这个元素,every 将返回 false,如果回调函数对每个元素执行后都返回 true ,every 将返回 true。它只对数组中的非空元素执行指定的函数,没有赋值或者已经删除的元素将被忽略 //测试是否所有数组元素都大于等于10: function isBigEnough(element, index, array) { return (element >= 10); } var passed = [12, 5, 8, 130, 44].every(isBigEnough); // passed is false passed = [12, 54, 18, 130, 44].every(isBigEnough); // passed is true forEach //打印数组内容: function printElt(element, index, array) { document.writeln(“[” + index + “] is ” + element + “<br />”); } [2, 5, 9].forEach(printElt); // Prints: // [0] is 2 // [1] is 5 // [2] is 9 lastIndexOf 语法 var index = array.lastIndexOf(searchElement[, fromIndex]); 参数说明 searchElement: 要搜索的元素 fromIndex : 开始搜索的位置,默认为数组的长度(length),在这样的情况下,将搜索所有的数组元素。搜索是反方向进行的。 功能说明 比较 searchElement 和数组的每个元素是否绝对一致(===),当有元素符合条件时,返回当前元素的索引。如果没有发现,就直接返回 -1 。 //查找符合条件的元素: var array = [2, 5, 9, 2]; var index = array.lastIndexOf(2); // index is 3 index = array.lastIndexOf(7); // index is -1 index = array.lastIndexOf(2, 3); // index is 3 index = array.lastIndexOf(2, 2); // index is 0 index = array.lastIndexOf(2, -2); // index is 0 index = … Continue reading
干支历,八字排盘 – 钦天
钦天主要功能包括阳历、农历、干支历、二十四节气、七十二候。可以用来指导农业生产,推测运程。 下载(APP Store)
泰然金融CTO付银海是如何迫害员工的
泰然金融(小泰科技)CTO付银海,曾任职阿里巴巴、oracle,回流蚂蚁金服失败。 2017年中,付银海被王梅招聘入职,作为泰然金融董事长潘宝锋的幕僚,付银海通过卖弄爬虫技术(获取京东/微信/支付宝订单信息)、裁员、打散、架空、孤立、离职证明威胁、明升暗降、提拔前同事、鼓动上市套现等一些列操作,深得泰然金融董事长潘宝锋信任。 潘宝锋在员工大会上满心欢喜任命付银海为泰然金融CTO,将所有权利交给付银海,潘宝锋提到他想实现的付银海都可以帮他实现,潘宝锋信心百倍讲到小船哺育大船,泰然金融目前市值100亿,我们要将泰然金融打造成1000亿市值的公司。 2022年一审案中,潘宝锋被判无期徒刑,付银海将责任甩锅潘宝锋,在供词中讲到自己是被潘宝锋指使的。 我于2016年8月-2018年7月任职泰然金融旗下泰然鲸数云计算,付银海对新员工赔偿低的员工采取裁员,对老员工打散、孤立、边缘化,让他们自己离职。先后将我的同事打散,领导架空逼走。为逼迫我离职达到不赔偿的目的,在掌权的第一个工作日早上9点以前将我招聘的两名员工调走,孤立我。在2017年底绩效考核中将我叫至付银海的单独办公室,将我的工作总结全部否定,挑衅的强调:“我觉得你做的不怎么样,我可以明确的告诉你,以前的团队是不可能给你们恢复的!”。抑扬顿挫的重复4次80分是最低分我是80分,提醒我3次没有低于80分的。付银海接二连三提拔自己的前同事为负责人或项目经理,在半年左右的时间里将我的岗位调换5次,其中4次(米粒钱包、蜂贷前端组、数据盒子、丁亮ATS项目组)上级为其前同事。2018年中付银海伙同其前同事丁亮侮辱我骚扰女同事,我在丁亮挑衅眼光与无尽的悲愤中离职。在接下来的几年里我忍不住叹气,呼吸系统受损。 泰然金融-董事高管 泰然金融(小泰科技)CTO付银海 潘宝锋 泰然金融(小泰科技)CTO付银海 审判
我在深圳企业云科技有限公司试用期被开除
我于2016年7月入职深圳企业云科技有限公司,面试当天直接签合同开始上班,上班第7天,那位胖乎乎,大约40几岁的的项目经理对我进行劝退,对方讲到: 你和别人沟通的太少,你表现出来的能力不足,薪酬太高,学历不行,其他2位员工,一位工作很多年,另外一位是海龟,你是什么?你明天不用来上班了。 试用期违法解除合同需要2N赔偿,2N=1个月,即使能力不足也需要证明-培训-再证明,但是当时不懂劳动法,带着无尽的悲伤走人,事后很多年仍然很难受。 如果不赔偿我半个月薪酬,我会一直战斗至我气消为止。 深圳企业云科技有限公司薪酬待遇 深圳企业云科技有限公司怎么样? 深圳企业云科技有限公司工作环境 深圳企业云科技有限公司有坑吗? 深圳企业云科技有限公司工作经历
Sublime text中文字符与Unicode互相转换插件
Sublime text中文字符与Unicode互相转换插件,允许你转换.js、.json和 .css 文件。 功能 中文字符转Unicode Unicode转中文字符 安装 使用Package Control: 搜索ConvertChineseCharacters并install Open the command palette Win/Linux: ctrl+shift+p, Mac: cmd+shift+p Type Install Package Control, press enter 搜索ConvertChineseCharacters并install 或者将源码复制到 你的sublime text’s package目录 演示 使用Command Palette 使用右键菜单 选择一个或多个字符从上下文菜单运行convertChineseCharacters,每一个字符将会被替换。 Unicode编码/Unicode解码/Emoji编码/Emoji解码 Github
我在深圳京东一年绩效3次C
京东绩效分A、B、C,强制绩效分布,C占比10%,一个季度1次,一年5次,4次+年度=5次。 我于2014年从杭州入职深圳京东(原腾讯电商团队),深圳环境比北方干净,有大片的云朵很漂亮,我特意选择深圳大道的观光巴士,欣赏过几次改革开放的成就。 第一次绩效考核得C,一共15个人左右的团队,只有我一个人得C,对方讲到: 你原来在阿里上班,以为你会很厉害,结果并没有感觉到。 重构工作,15个人中除了1位员工的几个h5活动动画看起来有点炫外,其他人都是正常工作,没有特别的东西。我在阿里工作为外包员工,每个人都知道。 年度绩效系数是0.9,还是0.8我记不清了,为季度累计结果,相当于C。看到年度结果,以及根据半年左右的工作感受,我联系了以前联系过我的腾讯音乐员工A,结果A出于帮助我的目的将我的简历群发,有几个部门的员工没有联系我却直接找我目前的上级,询问离职原因(我离职的时候才知道)。 对方看我的眼神已经越来越轻蔑。 第12个月,绩效结果C,原因: 你已经入职1年,仍然没有影响力,没有让人感觉你很厉害,你还是C,你要反思你自己。 考核当前季度我与别人合作一个复杂的H5活动,我负责活动整体布局及脚本编写,同时我在做其他东西。对方全职负责翻书动画部分,耗时3周,动画很炫,结果一致好评。对方升职,我继续得C。轮到我开发H5活动的时候只有我一个人,动画部分逻辑相比翻书逻辑简低一个档次,为业务策划逻辑如此,时间只有3天。 离职,已经没有办法继续工作下去。 在深圳找找工作经常会被问到为何离职?你在京东这样的公司都干不长。在腾讯内部本来有几位联系人但是因为绩效结果,没人要我。 几个月没找到合适的工作。 在深圳游览过几次,想过定居,灰溜溜的离场。
JavaScript modules
现在,所有主流浏览器都支持JavaScript modules! 本文介绍了如何使用JS modules,如何负责任地部署它们以及Chrome团队如何努力使modules在将来变得更好。 什么是JS模块? JS模块(也称为“ES模块”或“ECMAScript模块”)是一项主要的新功能,或者是新功能的集合。 您过去可能使用过userland JavaScript模块系统。 也许您在Node.js中使用过CommonJS,或者在AMD中使用过,或者在其他方面使用过。 所有这些模块系统都有一个共同点:它们允许您导入和导出内容。 JavaScript现在已经为此提供了标准化语法。 在模块内,您可以使用export关键字导出几乎所有内容。 您可以export const,function或任何其他变量绑定或声明。 只要在变量语句或声明前加上export前缀,就可以设置好: // ? lib.mjs export const repeat = (string) => `${string} ${string}`; export function shout(string) { return `${string.toUpperCase()}!`; } 然后,您可以使用import关键字从另一个module导入module。在这里,我们从lib module导入repeat和shout功能,并在我们的main module中使用它: // ? main.mjs import {repeat, shout} from ‘./lib.mjs’; repeat(‘hello’); // → ‘hello hello’ shout(‘Modules in action’); // → ‘MODULES IN ACTION!’ 您还可以从module导出default值: // ? lib.mjs export default function(string) { return `${string.toUpperCase()}!`; } 可以使用任何名称导入此类default导出: // ? main.mjs import shout from ‘./lib.mjs’; // ^^^^^ Modules与classic scripts略有不同: 默认情况下,模块具有严格模式。 模块中不支持HTML样式的注释语法,尽管它可以在classic scripts中使用。 // Don’t use HTML-style comment syntax in JavaScript! const x = 42; <!– TODO: Rename x to y. // Use a regular single-line comment instead: const x = 42; // TODO: Rename x to y. Modules具有词汇top-level范围。 这意味着,例如,运行var foo = 42;尽管在classic scripts中就是这种情况,但在modules中创建一个名为foo的全局变量并不能通过浏览器中的window.foo进行访问。 同样,modules内的this不引用全局this,而是undefined。(如果需要访问全局this,请使用globalThis。) 新的静态import和export语法仅在modules内可用-在classic scripts中不起作用。 Top-level await在modules中可用,但在classic scripts中不可用。 相关地,尽管classic scripts中的变量可以在异步函数之外命名为await,但是await不能在Modules中的任何位置用作变量名。 由于存在这些差异,相同的JavaScript代码在作为module scripts与classic scripts时可能会表现出不同的行为。因此,JavaScript运行时需要知道哪些scripts是modules。 在浏览器中使用JS modules 在网络上,可以通过将type属性设置为module来告诉浏览器将<script>元素视为modules。 <script type=”module” src=”main.mjs”></script> <script nomodule src=”fallback.js”></script> 了解type=”module”的浏览器将忽略具有nomodule属性的脚本。 这意味着您可以为支持modules的浏览器提供基于modules的有效负载,同时为其他浏览器提供备用。 即使只是为了表现,这种区分的能力也是惊人的! 考虑一下:只有现代的浏览器才支持modules。 如果浏览器了解您的modules代码,则它还支持modules之前的功能,例如箭头函数或async-await。 您不再需要在modules捆绑包中转换这些功能! 您可以为现代浏览器提供较小的,且未移植的,基于modules的有效负载。 只有旧版浏览器才能获取nomodule有效负载。 由于默认情况下modules是延迟的,因此您可能还希望以延迟的方式加载nomodule脚本: <script type=”module” src=”main.mjs”></script> <script nomodule defer src=”fallback.js”></script> JavaScript modules