JavaScript回锅笔记

  1. Variables created without the keyword var, are always global, even if they are created inside a function.
  2. A closure is a function having access to the parent scope, even after the parent function has closed.
  3. A JavaScript function can be invoked without being called.
  4. Accessing a function without () will return the function definition:.

    <script>
    function toCelsius(f) {
        return (5/9) * (f-32);
    }
    document.getElementById("demo").innerHTML = toCelsius;
    </script>

    输出:
    function toCelsius(f) { return (5/9) * (f-32); }

  5. Avoid String, Number, and Boolean objects. They complicate your code and slow down execution speed.
  6. If you assign a value to a variable that has not been declared, it will automatically become a GLOBAL variable, even if it is executed inside a function. Do NOT create global variables unless you intend to.
  7. In HTML, the global scope is the window object: All global variables belong to the window object.
  8. Your global variables (or functions) can overwrite window variables (or functions).
    Any function, including the window object, can overwrite your global variables and functions.
  9. W3Schools JavaScript Reference HTML DOM Events
  10. You can also break up a code line within a text string with a single backslash:

    document.getElementById("demo").innerHTML = "Hello \
    Dolly!";

    (The \ method is not a ECMAScript (JavaScript) standard.Some browsers do not allow spaces behind the \ character.)

  11. Integers (numbers without a period or exponent notation) are considered accurate up to 15 digits. The maximum number of decimals is 17, but floating point arithmetic is not always 100% accurate:
  12. In JavaScript, all data types have a valueOf() and a toString() method.
  13. JavaScript counts months from 0 to 11. January is 0. December is 11.
  14. Bit operators work on 32-bit numbers.
  15. The constructor property returns the constructor function for all JavaScript variables.
  16. The unary + operator can be used to convert a variable to a number:
  17. 5 + null // returns 5 because null is converted to 0
    "5" + null // returns "5null" because null is converted to "null"
    "5" + 2 // returns 52 because 2 is converted to "2"
    "5" - 2 // returns 3 because "5" is converted to 5
    "5" * "2" // returns 10 because "5" and "2" are converted to 5 and 2
  18. Complete JavaScript RegExp Reference
  19. Hoisting is JavaScript’s default behavior of moving all declarations to the top of the current scope (to the top of the current script or the current function).
  20. Do not use tabs (tabulators) for indentation. Different editors interpret tabs differently.
  21. Avoid global variables, avoid new, avoid ==, avoid eval()

JavaScript里的奇葩语法

排名不分先后。

  1. "1234"+5的结果是"12345", 而"1234"-4的结果却是1230. 4+"1234"的结果是"41234", 而4-"1234"的结果是NaN.
  2. true==2的结果是false, false==2的结果也是false.
  3. typeof null的结果是"object".
  4. 对于str.slice(start, end),如果参数大于等于0,则结果不包括end指示的字符;如果参数小于0,则结果不包括start指示的字符.
  5. var x = 0.2 + 0.1; // x will be 0.30000000000000004
  6. typeof NaN; // returns "number"
    var x = NaN + "5"; var y = Infinity + "3"; // x will be "NaN5", and y will be "Infinity3"
  7. 0 < Number.MIN_VALUE // true
  8. var txt = "";
    var person = ["23", "12f", 2];
    var x;
    for (x in person) {
    txt += typeof x + " ";
    }

    最成txt为string string string

UEFI启动模式修复ubuntu引导

今天在移动硬盘上安装ubuntu,却把引导装错了,导致本机ubuntu引导不了。
开始尝试用grub-install修复却发现无法成功。

使用
$ sudo fdisk -l
发现一个奇怪的分区(其实以前也发现,但没注意),Name是EFI system partition.
挂载之,发现有个文件夹叫BOOT,遂感觉有问题。
又在EFI目录下发现有个文件夹ubuntu,其中有个文件grub.cfg,内容大概是这样的:

search.fs_uuid b6fcadd1-32ba-4448-acb0-7e66595ee3a1 root hd1,gpt2 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

至此,我发现端倪了,hd1,gpt2应该是定位到移动硬盘的系统去了,本机的系统应该是hd0,gpt8(依具体情况而定),我把前面的uuid改了、后面改成hd0,gpt8后。
重启系统。真棒,我的ubuntu回来了。

后记: 后来在网上查EFI,然后引出了UEFI什么的,具体我还没看,故标题可能有误。

Ubuntu 16.04 无线模块不能加载

升级ubuntu 16.04 LTS后,无线突然不能用了。
运行

$ sudo lshw -C network

后发现无线网卡是unclaim(ed)
我以为是驱动问题,寻求各大偏方,安了无数次驱动,均不能解。
后发现在insmod的时候,总出现

insmod: ERROR: could not insert module wl.ko: Required key not available-

于网搜之,高人指点,

这样的话,问题就很可能出在bios里面的secure boot了。你到bios里面去找到一个secure boot的东西,把它disable掉。

至此,遂解,wl模块能正确加载了,无线也可以用了。

但我还是不知道怎么回事,知道的麻烦告诉我一声。

何以知时间流逝

就是看见弟弟已升入高中,
上课打牌,翘课,上网。
在我印象里他还是个小孩子。
看着聊天记录里的,
“呵呵”,
表情,
追剧,
我才醒悟,他高一了,
就像三年前的我。
由是知,
时间流逝。

丙申年正月初十
于绵阳中学

懒人可以这样快速安装LaTeX+中文环境

这个寒假欲将四本生物教材浓缩为“坑教版”,开始在学校时在手机上用 WPS 写,放假回家后觉得效果不好,LibreOffice 也不咋样。突然想起《算法导论》前言中说该书是用 LaTeX 排版的,于是入了 TeX 坑..
但是我时间紧,又懒,捣鼓了一下午,总结出一个很快速就可以搭建 LaTeX + 中文环境的办法。大概像这样(对于Ubuntu),顺便传送门学习TeX的参考资料.
在终端运行

$ sudo apt-get install texlive
$ sudo apt-get install texlive-lang-chinese

好了,“大”功告成了.
新建一个hello.tex,输入

documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{gbsn}
您好,我是\LaTeX,我支持中文了!
$$\sum_{p\rm\;prime}f(p) = \int_{t>1}f(t)d\pi(t).$$
\end{CJK}
\end{document}

运行latex(生成.dvi文件)或pdflatex(生成.pdf文件)编译一下看看效果

$ latex hello.tex
$ pdflatex hello.tex

恩,他的样子应该是这样的:

hello
hello

如果你想有个编辑器的话,可以

$ sudo apt-get install texmaker

或者

$ sudo apt-get install texstudio

好了, 开始你的LaTeX之旅吧。

未来与“海森堡不确定性原理”

十分感谢中国科协与主办方给我这个机会,满满的一天下来,心中感想颇多,有些想法正好与未来论坛主旨吻合。
心中思绪甚乱,就先从会场外谈起吧。会场外展示了一些“未来”游戏,以及一个十分逼真的表情机器人,还有一架子书;但令我印象最深的,还是脚下写满的公式,有爱因斯坦著名的质能方程,还有一维运动自由粒子含时薛定谔方程(如果我没记错的话)。我觉得主办方这样布置颇有深意——前方是通向未来的大门,而这些形式简单描述自然规律的公式方程铺就了通往未来的路,这是因为科学技术的发展离不开这些基本公式的应用。
感想太多,下面简述部分想法。
第一点是关于创新。李彦宏在主题演讲《技术创新与模式创新》中讲到,要“先行先试”,给自己试错的机会。是的,当出现问题时,解决方案的产生就是创新的产生。在上午的“创新对话”中,还讨论了关于创新的定义。创新,一是“新”,二是能做得到,目的是“有用”。有嘉宾认为创新是一个系统的过程,必须做到“产生社会效益”才能算创新。我倒觉得这样把创新的外延缩小了,创新应当是追随内心的,否则便会限制自己发散思想。同时,创新不仅仅存在于解决问题的过程。事实上,提出一个好的问题比解决一个问题还要困难。阿里巴巴集团首席技术官王坚在主题演讲《从“互联网+”到“计算+”》中就提到,好想法是难得的,现在许多新产品其实是前人早就想到的,比如在潜艇出现前,早在十五至十六世纪达芬奇就曾构思过潜艇。有很多嘉宾都提到了现在中国的教育大环境是会限制学生的创新能力的发展的,所以建议我们要“对某领域产生持久、专注的兴趣”,“对自己感兴趣的是坚持做下去”,“人文基础也不可忽视”。另一方面,既需要我们本身的热情、天赋与毅力,也需要学校解放学生,帮助之“脑洞大开”。
第二点是关于科学发展。我小时候看《某某十万个为什么》的时候曾感叹道,这么多现象都已经被解释了,那还有什么不知道的呢?以后的研究人员不是都没有可以研究的了吗。但其实随着年龄的增长,我发现世界上无法解释的现实还有很多,“新世界还可以探索很多年”。这次论坛就有一位嘉宾讲到,“科学发展就是不断发现自己知道的很少的过程”。虽然邓小平提到“科学技术是第一生产力”,但把科学技术转化为生产力也是一段艰辛的路程。为此,高西庆教授在主题演讲中提到“应加快产、学、研一体化的步伐”。
第三点是思想的碰撞、眼界的开阔。当天来了很多中国、世界顶尖的科学家、研究员,他们做的主题演讲,是我认为那天最精彩的一部分。这些主题演讲涉及从数学到物理、从生命科学到人工智能的很多内容,使我受益匪浅,科学家们新鲜、前沿的思想让我有种“柳暗花明又一村”的功能觉。比如SENS研究基金会首席科学家Aubrey de GREY谈到的”Aging is actully ‘damage'”,王坚认为的“要想使计算能力从根本上大幅提升一个层次,必须彻底改变现有的电路结构”。中国科学院粒子天体物理重点实验室主任张双南教授在谈“美的科学”时提到了科学研究的三段式:“归纳,证实,证伪”;法国数学家Cedric VILLANI则说“数学最终是推理方式”。这些都使我对科学与探索的理解和认识上升了一个台阶。
施一公教授
这些演讲中令我印象最深刻的是施一公教授的演讲《生命科学认知的极限》。他从“出生:我们从何而来”讲起,然后讲到有关LDL低密度脂蛋白的疾病。接着说“神经电信号不一定是本质”,这引起了我的思考。他后面说的更让我信服。他说宏观世界决定于微观世界,微观世界决定于超微观世界,既然物质由粒子组成,那么生命很可能就是一个薛定谔方程。他还谈到也许人的思维的本质是量子纠缠,因为我们最初都是从一个小小的受精卵发育而来的。这些话也引起了我研究这方面的兴趣,我觉得如果在这方面有所突破的话,人工智能方面的研究也会取得突破。当时我在想欲使机器具有智能,只需它具有学习能力,欲使它具有学习能力,只需它具有进化的能力,而如果有了进化的能力,并且进化的速度较快,就可以制造最简单的模型,让它进化即可。
当然,这次的感想并非只有这么点。奈何我才疏学浅,水平有限,就仅谈这些吧。
在最后有一位嘉宾谈到“论坛进行到现在,那些科学家们说他们什么也不知道,这也不知道那也不知道,倒是我们在这里好像什么都知道的样子”。其实,虽然这个论坛以“未来”为名,但到最后也没有讨论出未来的具体情况。未来可能也满足与“海森堡不确定性原理”相似的规律。若对未来事件发生的情况预测的越准,那么对其发生时间就预测的不准;若对未来事件发生的时间预测的越准,那么对其发生情况的预测就不准。以上愚见,仅供参考。
但正是由于未来的不确定,不断激励一代又一代人在科学的道路上勇敢前行。

时乙未年腊月十三