0%

Sublime Text 是一款非常优秀的编辑器:速度快,界面简洁,插件众多;并且能够跨平台使用,在 Mac 和 Windows 上都发挥完美。虽然是一款付费软件,但作者很厚道地给了无限期的试用期限。这一切正如其官网广告词说的那样:The text editor you'll fall in love with.
Skim 是一款免费轻量的 PDF 阅读、标注工具,布局贴心友好,与 OS X 自带的 Previewer 相比,Skim 能更好的注释 PDF 文件。
是一款权威的科技论文排版系统,不仅可以写论文,也可以处理日常的各种文档工作,甚至是做幻灯片。相比于 Microsoft Word,最大的优势是对于复杂公式的编辑与排版非常漂亮,并且用简单的命令就可以生成脚注、索引、目录和参考文献等复杂的结构。这一切优点都使得世界上众多的科学家们不再需要身兼作者与排版工两职,从而将更多的精力集中于文章内容本身。
本文的目的是将上述三种软件综合部署在 Mac 上。完成之后,你将可以在 Sublime Text 里面进行代码编辑,用 Skim 预览生成的 PDF 文件。更重要的是,让你觉得,写论文也可以是一件很优美的事。

阅读全文 »

最近笔者在学习前端设计的时候,知道了很多实用的小技巧,于是决定写一篇文章总结一下。

use strict

在一些脚本中,你或许会在最前面看到单独的一行 "use strict",这是严格模式的声明。
严格模式对正常的 JavaScript 语义做了一些更改:

  • 严格模式通过抛出错误来消除了一些原有静默错误。
  • 严格模式修复了一些导致 JavaScript 引擎难以执行优化的缺陷:有时候,相同的代码,严格模式可以比非严格模式下运行得更快。
  • 严格模式禁用了在 ECMAScript 的未来版本中可能会定义的一些语法。

JavaScript 传递参数

这是一种向外部 JS 文件传入参数的方法。在 HTML 中写入

1
<script data-flag="1" src="example.js"></script>

example.js 中写入

1
2
3
4
var scripts = document.getElementsByTagName("script"),
script_len = scripts.length,
script = scripts[script_len - 1],
flag = script.getAttribute("data-flag");

这样即可获取 data-flag 的值,可以说是非常的巧妙了。

dataset

除了使用

1
var flag = script.getAttribute("data-flag");

还有另一种方法可以获得 HTML 标签中形如 data-* 的属性的值,那就是 dataset。与上面等价的写法是

1
var flag = script.dataset.flag;

<noscript> 标签

对于停用了 JavaScript 的用户,<noscript> 标签可能非常有用。

1
2
3
4
5
<noscript>
<div style="background-color: #5C5C5C; position: fixed; bottom: 50px; left: 80px; opacity: 0.95; border-radius: 15px; color: #FFFFFF;">
<p style="margin: 15px; max-width: 400px;">系统检测到您的浏览器禁用了或不支持JavaScript。为了保障您的浏览体验,请启用JavaScript或<a target="_blank" href="http://browsehappy.com" class="a" style="color: rgba(239,178,75,1)">升级浏览器</a></p>
</div>
</noscript>

<a> 标签的 download 属性

设置 <a> 标签的 download 属性,可以在点击该链接时下载目标,即 href 属性指向的超链接。
该属性也可以设置一个值来规定下载文件的名称。所允许的值没有限制,浏览器将自动检测正确的文件扩展名并添加到文件。例如:

1
<a href="https://www.example.com//images/2017/10/example.jpg" download="logo">

支持该属性的浏览器会将其保存为 logo.jpg

阅读全文 »

前言

笔者使用的 MacBook Air,256G 闪存,可用空间约 251G,曾经的分区表为:

(这是使用 diskutil list 命令输出的结果)

GUID 分区表,共四个分区,分别是 EFI 引导分区、APFS 的 Mac 主分区(在更新 macOS 10.13 之前为 HFS+)、NTFS 的 Bootcamp 分区以及 Windows Recovery 分区。
在最初安装 Bootcamp 时,考虑到 Windows 系统只是用来运行某些没有 macOS 版本或无法移植到 macOS 的程序(例如《红色警戒 2》),Bootcamp 分区的大小仅分配了 35G。然而,在 8 月中旬昆特牌国服开启公测后,入坑的笔者发现 Bootcamp 分区的大小似乎不够用了。

由于 Bootcamp 是磁盘上靠后的分区,并不能用常规操作向前扩充,吞并 APFS 分区的空间(DiskGenius 使用计算器 + 手动改分区表数据似乎属于非常规操作,且面临着分区出现问题的危险),所以只能考虑备份 Bootcamp 分区内容,然后将其移除,并在主硬盘上重新划分 Bootcamp 分区。
不过,新的问题又产生了:Mac 主分区的大小也很有限(毕竟是安装了 Adobe 全家桶、Autodesk Maya、XCode 等程序的),并不足以重新划分出较大的 Bootcamp 分区以安装 Windows。于是只得寻求其他解决方案。比较显而易见的解决方案有:

  • 换个 Mac(没有了信仰灯和 MagSafe)
  • 换个硬盘(MacBook Air 的闪存是 BGA 封装的,并不能像 SATA 的 SSD 那样直接拆)
  • 装个 SD 卡(高性能大容量的 SD 卡价格感人,并且不适合 NTFS 文件系统)

这些都不是最优解。在综合了各方面的考虑后,最终选定了如下方案:

  • 使用移动硬盘,一个分区做 Win To Go,另一个分区做 Time Machine 备份。其中移动硬盘选择的是西数 Elements 500G。
阅读全文 »

编写 C 语言控制台程序时,如果使用 scanf() 函数作为输入,往往需要解决非法输入的问题。比如以下情况:

1
2
3
printf("输入一个0~9的整数a\n");
int a;
scanf("%d", &a);

此时可能出现如下几种典型的非法输入:

  • 123
  • 123xyz
  • xyz123

对于第一种,使用 if 判断 a 的范围是否满足要求即可。第二种和第三种则较为复杂,因为其中涉及到了字符的输入。第二种情况,scanf() 会将 123 存入 a,而 xyz 留在了输入缓冲区;第三种情况,scanf() 不会读取任何数据,xyz123 都留在了输入缓冲区。
如果只是判断这一次输入的合法性,可以利用 scanf() 的返回值。如果输入有效,scanf() 会返回 1,否则返回 0。由此可以排除 scanf() 无法读取的输入。

阅读全文 »