All Posts

第一个chrome extension

如今,chrome浏览器的使用如越来越流行,chrome extension往往能提供更多很丰富的功能。以前一直想了解这方面的东西,可是又担心很复杂。前段时间,在斗鱼看一个直播,想刷弹幕,但是每次自己输入有很麻烦,所以写个小脚本就可以了,后来想以下也可以使用chrome extension来实现。关于chrome extension,google就给出了相关的文档,另外国内360也翻译了这篇文档。当然我所做的东西还是很基础的,在此,也是就是说一下自己第一次尝试的经验。 其实,chrome extension似乎和现在很火的pwa有一点类似,对于chrome extension来说,有个文件是必不可少的,即manifest.json,这对于extension是非常重要的。这个文件主要是项目的某些描述,以及一些文件的引入。以我的文件为例: { "manifest_version": 2, "name": "弹幕增强", "description": "This extension provides you a good experience of sending danmu at douyu", "version": "1.0", "browser_action": { "default_icon": "icon.png", "default_popup": "popup.html" }, "content_scripts" : [{ "matches": [ "http://*/*", "https://*/*" ], "js" : ["app.js"], "run_at": "document_end" }] } manifes_version好像是必须定义为2,这个好像是强制要求。提及一点的就是你可以使用开发者模式从而调试你的extension。你可以在tab右键打开更多工具,然后找到拓展程序打开,然后你可以通过加载已解压的拓展程序,只要选择你extension的文件夹就可以了,并且在右上角勾选上开发者模式。 接着主要讲一下“brower_action"里面定义的是extension的相关内容,“default_icon"即是插件的图标,“default_popup"就是弹出的页面,chrome extension规定html文件和js文件必须是分开来的。extension和当前打开的页面之间的环境是相互隔离的,是不可以直接通信的。“content_script"是定义插入到当前打开页面的相关js文件,“matches”可以让脚本再匹配到规定的正则才会执行,“js"则是插入到页面的js文件,你还可以插入css文件。需要注意的是,“content_script"虽然能够操纵当前页面的dom,但是他和当前页面的js环境是相互隔离的,不能够互相交互,当然也有相应的其他方法。 我的extension只是用到了”content_script”: var times = 1000; for (var i = 0; i < times; i ++) { (function(i) { setTimeout(function() { console.

Ext.js性能优化漫谈

Ext.js是一个用于建立企业级应用的纯JS框架。毫无疑问,它为我们提供了大量的组件,比如container,panel,field,grid,这些组件使用起来很方便,不需要去写js和html,但是ext.js的性能却存在很大的问题。比如,我在公司负责的页面,在本地的加载时间居然需要十几秒,当然这可能和后台服务有关,但是前台的渲染和执行也耗费了大量的时间。下面就我个人感受和网上的一些信息对Ext.js的性能优化做一些总结: 尽量不要使用Panel Panel是一个功能比较强大的组件,但是上面却附加了很多的功能和属性,所以也带来了更多的负担,因此在不必要的情况下,尽量不要使用panel,而去使用基类container。 事件监听 页面的render相关事件监听是比较花时间的,在不必要的情况下,尽量不要使用。还有在监听store的load时间的时候,应该监听一次: listeners: { load: onFirstLoadData, single: true } 在页面渲染之后,尽量不要再去修改页面,从而避免页面reflow或者repaint。 避免组件封装 我们的项目代码往往总是container里面封装container,或者组件里面包裹了组件,其实有很多封装往往是不必要的。因此,减少不必要的组件封装,也可以简化页面DOM结构。 减少border布局 不需要一下再加载所有的元素 批量处理 如果需要处理大量数据,最好一次性修改,避免多次修改,从而提升性能。

latex中large的作用域问题

在毕业论文的写作过程中,遇到了一个\large 作用域的问题。假设下面有三种写法: I am cool \large{you are right}, yeah, yeah, yeah I am cool {\large you are right}, yeah, yeah, yeah I am cool \begin{large} you are right \end{large}, yeah, yeah, yeah 我们希望的结果是you are right,这三个单词可以放大,而其他的文字仍然是正常大小,那么以后三个哪些是正确的呢? 下面且看这三个命令的分别显示结果: 很明显可以看的出来,第二个和第三个是正确的,而第一个不是正确的。第一个后面的文字都受到了前面\large 的影响,也变成了放大的字体。这就是\large的作用域问题,第一条命令并没有限制好作用域。可以看的出来,应该要把命令放在花括号中。第三种写法也是可以工作的,像一般的环境都是有这种写法的,但是这种写法比较麻烦,不是特别推荐。

Latex--入门系列三

Latex 专业的参考 tex对于论文写作或者其他的一些需要排版的写作来说,还是非常有意义的。我在网上看到这个对于Latex的入门介绍还是比较全面的,Arbitrary reference .所以将会翻译出来,供初学者学习。 TeX语法 TeX语法,编辑 你可能已经注意到,(La)TeX文档是蠢笨的基本上不包含什么具有特殊意义的符号,经常是依赖环境的并且很容易就可以看得出来。下面有一段LaTeX的代码,你也不用担心你还读不懂它,因为它可能包含不少的特别的符号: I am text. Yes. %comment: a semi-complex table with math in it: \begin{tabular}{|l|r|} \hline $a_1~~~b$ & $\sqrt[3]{a_1^2}$ \\ \end{tabular} 最终产生的表格的排版是这个样子的特殊符号的总结 **{和}**是作为一些命令参数来定义一些小块,比如临时的粗黑体在{\bf bold} **$**是用来开始和结束数学模式的,比如一些公式啊,数字之类的。你可以在你文本的任何地方插入$a+b=c$,输入$$a+b=c$$,那么你的公式就会在段与段之间以块的形式展现。 **%**是用来注释的,这个是单行注释。如果你要注释大段的代码的时候,为了避免插入过多的百分号,你可以把这些字符放在\iffalse和\fi里面。 **_和^**分别作为下标和上标。你也可以同时使用上标和下标,比如: **~**是一个硬空格,它对于排版是有影响的,它是具有大小的,并且不可分连的空格,就像&nbsp一样的。它很有用比如:A.~Smith以及在引用的图表的时候Figure~\ref{dataflow},这确保了作者姓名或者图片和数字之间不会在行与行之间分隔。(也可以使用其他的办法来解决这个问题,比如mbox,不会强制使用特殊的空格大小) 实际上,\ 经常和~拿起来一起来使用。尽管这两者之间还是有区别的:\ 是字间的空格,经常用来告诉LaTeX这不是句子的末尾,一般用于缩写或者标题。(Dr.\ Jones) **&**适用于在数组以及表格中定义列的。 ****用于开始一个命令。有一些可能是比较特殊的(\\用于换行,\>用于tab缩进),一般化的话应该是这样的\commandname。当然这可能会有看起来不太相同的使用方法: 一次效果函数,比如使用\ss来获得一个德国字母。 状态改变,比如粗体,强调,比如text-{\em a-tron}会产生。(花括号是来限制作用的范围的) 使用命令取得相应的值,一般是使用{}或者[]。比如: \textsc{SmallCaps}产生 \caption{Description用于标题说明,一般用于图表。 口音和发声符号,比如\'{e} \v{o}来产生 使用\begin和end是定义环境,从而和其他内容区分处理,比如:

只要三步,你就可以在github上发布网站了

今天,看到github推送了一个新的消息,Publishing with GitHub Pages, now as easy as 1, 2, 3。总结起来就是在github将你的文档或者发布网页将会变得十分简单。 三步: 创建仓库 提交markdown文件 激活Github pages 现在github对于markdown文件真的支持的特别好,比csdn的markdown好多了。老实说,如果不是github在国内的访问速度感人,我早就把我的博客迁移到github上面去了。csdn的博客简直丑到不能忍了。 反正github的这次更新主要是针对GitHub Pages,这样markodown可以方便快捷的渲染成页面,而且还不会影响你现有的项目或者网站。而且还会给你进行一些默认的配置,对于新手来说,的确是非常友好的。当然了,实在不想用的话,还可以在设置里面禁用掉。更多详细情况,可以去GitHub上面去了解,试试看啊!!!

Latex--入门系列二

Latex 专业的参考 tex对于论文写作或者其他的一些需要拍版的写作来说,还是非常有意义的。我在网上看到这个对于Latex的入门介绍还是比较全面的,Arbitrary reference .所以将会翻译出来,供初学者学习 基本的使用 基本的使用 TeX会产生什么 最基本的来说,你会生成一个.tex文件,即你的文档,即youfile.tex。 运行latex you file.tex可以让TeX工作并且生成your file.dvi,这是当下的输出。dvi是一个独立的排版语言。 因为dvi不能够存储图像, 所以它经常被用来作为媒介步骤来产生文档。 dvi也可以被转化成pdf文件,所以pdf文件经常是可以立即生成的,不要dvi文件作为媒介可以直接调用pdflatex yourfile.tex。 输出文件: LaTeX运行一次会产生很多文件,其中很多文件产生的原因是因为LaTeX是单流的;很多文件指示文档编译的信息文件,它们也能用于下次运行,当你编译文档的时候你还可以引用它们。比如,图的引用,章节的引用,以及其他文献的引用。鉴于此,它产生的数据是有特定用途的。(.aux文件是引用的,toc是给章头用的等等),这些数据下次运行还可以继续使用。 注意这可能是你经常需要运行LaTeX两次来确保引用正常工作从而来更新它们。在一些特别变态的情况下,你甚至要运行更多次。你可以忽略掉这些额外的文件,你可以在生成文档后删除这些文件。 如果你用的是unix的系统,我建议你可以看看rubber。它的目的是为了在必要的时候重新编译文档。它不是特别简单的,但是能给你带来很多便利。 一个.log文件也会产生,它是tex文件编译产生的一些相关信息。 注意一点,一旦这个文件生成了,你无需担心保存除了原始数据(.text, .bib)其它的任何数据。log,aux, toc文件可能在运行之后看起来比较混乱,你也可以删掉它们。 其他可能输出的格式 除了在unix系统用于xdvi以及打印,dvi格式并不是很有用。上文曾经提到过,通过dvips软件可以将dvi文件转化为PostScript。你甚至可以先转成PS,然后再转成pdf文件,或者直接转成pdf文件。但是这些间接的步骤可能只是引发新的问题,在pdf方面经常不会怎么使用。更重要的是,这还会存在一个字体渲染的问题。对于pdf,我建议你使用pdflatex或者类似的工具从而避免字体的一系列问题。你必须将所有的.ps/.eps文件转化为pdf,但这不是很困难的事。你可以在图片章节找到更多的细节。

Latex--入门系列一

Latex 专业的参考 tex对于论文写作或者其他的一些需要排版的写作来说,还是非常有意义的。我在网上看到这个对于Latex的入门介绍还是比较全面的,Arbitrary reference .所以将会翻译出来,供初学者学习。 TeX, LaTeX以及他们的用法 Tex:排版 Tex是Donald Knuth发明的一种排版语言。排版意味着从结构性的文本到审美的一个标准。在Tex里面,你可以控制文本的根本结构,而不是像word一样,是软件阴影的帮你管理文件的结构,而紧紧给你提供一个图形化的接口。在TeX/LaTeX里面,对于布局和样式都有着默认的合理的设置但是却是可以控制的。 Tex对于希望控制文本的人是非常友好的,一部分可能是因为它不会帮助你不能控制的东西。当然,简便也是一方面的-当TeX工作正常的时候,它运行的很好并且容易明白,但是当它有问题的时候,将会很麻烦,将会变得难以处理。(这点我深有体会)如果你稍微脱离了他的运作方式或者期望一个不太容易实现的功能,你可能需要头痛一下了。 还有其他的一些优点和缺点。TeX的公式拍版是它的强项之一。在以前它可能是唯一较为正式的选择,即使像现在可以使用MathML或者MathType的时候,TeX也被认为是使用起来还是比较便利的。假如你以前还没有接触过TeX,那么你可尝试穿件下面的公式: 在TeX仅仅使用t) = h(t) \otimes g(t) \equiv \int h(\nu) g(t-\nu) d\nu就可以搞定了。是不是看起来挺简单的。 它的缺点可能是将它用于不是它的目的功能的地方。比如,你希望得到一些奇特的表格,你可能会遇到问题并发现一些替代的解决方法,不过这意味着你需要用一些相应的包并且按照其相应的方式去实现了。 LATEX:文档编制 LaTeX是围绕TeX的一种文档编制的宏命令,它是一个比较高层次的能够利用它们产生一些比较常用的文档类型。它考虑到很多方面的内容,包括页眉和页尾,表格内容生成,自动两列的样式以及其他更多的细节。LaTeX现在被广泛得应用以及于它和TeX之间可以交换使用。TeX的实现方法大多数可以直接用在LaTeX的文档上面。当然你可以直接写TeX文件,但这不一定有什么用。如果希望看到更多的介绍,你可以参考这个。 书籍,报告以及PDF LaTeX对于写文章,报告以及书籍有些基本的设置。 它之所以受到喜爱的原因可能是对于大型的文档不容易搞混样式,于其它的一些工具截然不同,比如微软的word,随着文档长度的增长,它的处理复杂度也在逐渐增长,如果你曾经参与过大型的共同合作的文档项目,那么你将深有体会。 近些年以来,pafTeX编译器变得流行起来,因为它可以直接编译pdf文件(不需要dvi以及ps文件作为媒介),使用pdflatex 而不是latex,你可使用一些针对pdf的特点。 包 在TeX和LaTeX里面有各种各样的包,你可以用一些比较怪异的符号,制作一些表格包括输和公式,写活页曲谱,做CAD图,确保首字母大写以及单词拼写正确,或者仅仅只是用一些特别的地方。 版本变化以及实现 LaTeX最近通用经常写作是LaTeX2e。我认为你是在使用这个版本的。通常这也无关紧要,但是有一些老的命令我不会特别提及。 注意这个版本以及老版本的LaTeX209是最通用的语言以及实现规范,并不针对特别的包或者实现。 免费的TeX软件包括通常的’teTeX’也叫做’TeX Live’对于unix系列的系统,以及对于windows系统的’MikTex’。你也可以参考下面相关的软件。 你可以参考维基百科里面的TeX以及LaTeX。TUG是近些年的一些开发工作和相关文档。

the sum of two fixed value

the sum of two fixed value description Input an array and an integer, fina a pair of number in the array so that the sum is equals to the inputed integer. If there are several pairs, you can output any pair. For example, if the input array is [1,2,4,5,7,11,15] and an integer 15, because 4 + 11 = 15, hence output 4 and 11. analysis and solution We try to figure out this problem step by step.

你可能不知道谷歌浏览器开发工具的其他用处

原文链接 原文链接似乎翻墙才可以访问 译者:neal github: https://github.com/neal1991 你可能不知道谷歌浏览器开发工具的其他用处 Chrome内嵌开发者工具。它具有丰富的功能特色,比如元素,网络以及安全。今天,我们将完全关注javascript的console. 当我才开始编程的时候,我只是将console用作纪录服务器的响应。但是后来经过一些教学的帮助,我开始发现console可以做的更多。 在这我们讲一些你可以用console做更多有用的事情。如果你是用chrome浏览这篇文章,你可以马上就试试效果。 选择节点元素 如果你熟悉jquery的话,你应该知道$(’.class’)和$(’#id’)事多的么的重要。你可以根据id或者类名选择相应的元素。 同样你可以在console使用同样的方式来访问元素。$(’tagName’) $(’.class’) $(’#id’)和document.querySelector(’’)是等同的。这个将返回文档中第一个匹配这个选择器的元素。 你可以用$$(’tagName’)来访问,注意这边的两个美元符号可以访问所有符合这个选择器的元素。这些元素会组成一个数组 2.将你的浏览器转化成一个编辑器 你是否想过可以直接在浏览器中直接编辑?答案是肯定的,你可以将你的浏览器转化成一个文本编辑工具。你可以在dom元素中任意添加或者删除文本。 你不需要检测html中的元素。取而代之,你只要去console里面输入以下: document.body.contentEditable = true 3.寻找dom中元素绑定的事件 当调试的时候你可能希望知道dom元素中绑定的事件。console工具能使你很轻松就找到这些事件。getEventListeners($(‘selector’))将会返回一个数组包含所有事件的对象。你可以展开这个对象看到所有的事件: 如果希望找到某个特定事件的监听,你可以这么做: getEventListeners($(‘selector’)).eventName[0].listener 这将展示所有和这个事件相关的监听。比如: getEventListeners($(’.firstName’)).click[0].listener 4.监听事件 如果你想监听特定元素绑定的事件的时候,你也可以在console里面这么做。你可以使用以下的这些命名: monitorEvents($(‘selector’))将会监听符合这个选择器的元素的所有事件,并且将会显示这些事件当事件被触发的时候。 monitorEvents($(‘selector’),’eventName’)将会监听符合这个选择器的特定事件。你可以将事件的名称作为一个参数传入到这个函数中。 monitorEvents($(‘selector’),[’eventName1’,’eventName2’….])将会监听符合这个选择器的事件。 unmonitorEvents($(‘selector’))这个会停止监听并且在console里面显示出所有的事件。 5.找到语句块执行的时间 console里面有一个很重要的函数叫做console.time(’labelTime’)能够启动一个计时器。另外又一个函数叫做console.timeEnd(’labelName’)能够结束相应的计时器。 比如我们想看到一个循环的执行时间,我们可以做如下处理: console.time('myTime'); //Starts the timer with label - myTime for(var i=0; i < 100000; i++){ 2+4+5; } console.timeEnd('mytime'); //Ends the timer with Label - myTime //Output - myTime:12345.

Bootstrap真的总是好的吗

原文地址:Bootstrap considered harmful 原文作者:Hidde de Vries 译文出自:neal 译者: Neal 个人主页:http://neal1991.pythonanywhere.com 这些年Bootstrap已经在前端项目中流行起来,它能够带来很多好处。然而,但是如果以你们的团队已经有了在职的前端开发人员,我觉得最好还是不要用Bootstrap,在某些地方,弊大于利。 Bootstrap的好处是什么 Bootstrap主要是栅格系统,但同时也带来了很多组件的样式表和脚本,包括表格,导航栏,进度条,页码,表单样式,模式和提示文本。在这篇文章,我所说的Bootstrap是包含它的所有功能的。 Bootstrap是一个很好的工具对于一个纸箱装饰他们的程序但是无须担心结果的样式问题的后端开发人员。如果因为某些原因,预算或者什么的,你的团队没有前端开发人员或者设计人员,Bootstrap是一个绝佳的弥补方法。 对于设计人员来说,Bootstrap也是有用处的:它可以快速地从设计软件切换到浏览器中,不需要过多担心前端的代码设计。 即使是对于那些基本只专注于数据但是很少关注UI和布局的前端开发人员来说,Bootstrap也是一个绝佳的工具。 什么时候你最好别用它 然而,如果你的团队已经拥有了前端开发人员,使用Bootstrap可能会潜在的浪费他们宝贵的时间,并让他们可能从解决实际问题上转移注意力。Bootstrap做的正是前端开发人员所擅长的事情,但是用的是一种很通用的方式。你的网站或者网络app是非常特别的,因此如果你使用一个通用的系统可能会不太合适。这意味着为了实现这种特殊性将会包含很多的异常发生。 当需要很多异常来复位Bootstrap Bootstrap曾经是被Twitter 的开发人员用于系统化他们网络app的样式。如果你的网站app和他们的样式不一样,这意味着你需要解除他们中的某些样式。 很多网站和Twitter的样式并不相同。因此,如果他们装载了Bootstrap的时候,他们可能需要卸载很多地方。 在某些网站上,我看到有9/10的Bootstrap样式已经被网站自己的样式所替代。坦白说,这很荒谬。 当它让简单的事情变得复杂 CSS是给网站添加一套简单的样式规则,这有时候可能会被重写。当你在你的网站使用Bootstrap的样式的时候,几乎所有的元素都是用一个复杂的样式规则。任何异常都会在它之上表现。问题是大多数网站他们的样式异常都被表现在Bootstrap之上。 Bootstrap的样式是非常复杂的:你可以利用12列的栅格系统和任何元素相结合起来,对于需要特别处理的列则要区别对待。很多网站十分简单:它们在小屏幕设备上没有列或者只有一到两列在大一点的屏幕上。 当它产生技术债务的时候 前端依赖Bootstrap的时间越长,就会牵扯到更多的东西,更多的规则需要设置来覆盖Bootstrap的某些规则。这或多或少地让技术代码背负技术债务,尤其前端代码的部署需要手动的更新。随着依赖的增多,Bootstrap将变得更加难以移除。 当它命名一些不是你app的规定 命名是一件很困难的事情,为团队的应用中的规定命名需要花费相当多的时间。使用’btn’之类的缩写并不能很好的给组件命名。 结论 Bootstrap可能对于产生网站的多个流程都起到了很大的帮助。但是它并不能让所有的事情都变得简单:相反,很多问题可以由前端开发人元专注于UI就能够更好地解决。