在这之前,不得不说, 我以前非常讨厌像php、perl、shellscript这样变量名加个美元符号(我又不是每个变量都和钱有关),但在近段时间写大量js时, 不得不说这样引用变量确实非常之方便。 因为在js中可能会出现大量字符串中嵌入函数,函数中嵌入函数, 以前遇到的都比较简单,字符串一律用双引号, 里面再有字符串用单引号, 也没有出现什么问题,但如果出现大量的嵌入时,我们就必须引入大量的转义,代码非常难看。而在需要字符串连接时(连接某个字符串)变量更是麻烦,代码非常不具有可读性,而使用了美元符号加{}后,一切都变得简单明了,$ 和{}基本不需要转义,因为我们很少直接使用它们的字面义。
说到这, 还是不喜欢php中不加$被无理取闹当作字符串, 有时神神秘秘的不知道传了什么参数, 我觉得语法分析中应该检测这个错误,字符串强制引号,避免一些离奇的错误。
unix下的命令ftp, 只能put 、get 文本文件(plain file), 而不支持传输整个目录, 因此每次传输一个目录, 需要手动打包成一个tarball文件,这不可厚非的,压缩后毕竟能够节约网络带宽。 但作为一个传统的ftp,还是存在许多弊端, 最大的问题在于不支持断点传输, 若由于网络故障,则必须重新传输,当然一般我们可以使用更强大的ssh(scp)、wget、axel等传输。 对于只支持ftp协议的情况,则推荐一个ftp强化版-----ncftp,当然用的也是ftp协议的。ncftp是文字模式ftp程序的佼佼者,它具备多样特色, 包括显示传输速率,下载进度,自动续传,标住书签,可通过防火墙和代理服务器等。
对于IE和chrome, 貌似window.event是个全局变量, 但对于firefox, 则不是全局的, 因此我们在定义Onclick函数需要传递参数时,需要把event传入,并且只能是第一个参数:
document.getElementById("button").onClick = function(e) { alert(e); }
然而我们写成这样该如何传递参数呢?
<button Onclick="foo();">按钮</button>
这就没法传入事件参数了, 因此需要自己写一个getEvent函数:
function getEvent() { if (document.all) return window.event; func = getEvent.caller; while (func != null) { var arg0 = func.arguments[0]; if (arg0) { if ((arg0.constructor == Event || arg0.constructor == MouseEvent) || (typeof(arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) return arg0; } func = func.caller; } return null; }
然后传递时这样:
<button Onclick="foo(getEvent());">按钮</button>
众所周知, extjs非常强大, 可以把网页做成类似桌面应用的效果, 类似webqq. 但是用起来也确实很麻烦, 新建一个窗口,得写一堆js代码.
而easyui 功能也十分强大, 用起来挺方便的, 新建一个window, 只需要写一个div 设置类为 easyui-window 即可, 而新建一课树,只需要设置class为easyui-tree, 树的级别(深度)由ul li来控制, 非常简单. 并且强大的datagrid, 可以从远端服务器直接获取数据(要求是json格式文本),生成表格. 具体实例传送门:http://www.zi-han.net/case/easyui/
首先下载源码:
git clone https://github.com/douglascrockford/JSON-java
这个git居然没有build.xml, 编译很麻烦, 得自己写个build.xml. 我的build.xml为
<project basedir="." name="json" default="release"> <property name="src.dir" value="src"/> <property name="build.dir" value="build"/> <property name="class.dir" value="${build.dir}/classes"/> <property name="jar.dir" value="${build.dir}/jar"/> <property name="lib.dir" value="lib"/> <target name="prepare"> <mkdir dir="${build.dir}"/> <mkdir dir="${class.dir}"/> <mkdir dir="${jar.dir}"/> <mkdir dir="${lib.dir}"/> </target> <target name="compile" depends="prepare"> <javac srcdir="${src.dir}" destdir="${class.dir}"/> </target> <target name="jar" depends="compile"> <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${class.dir}"> </jar> </target> <target name="clean" depends="prepare, compile, jar"> <delete dir="${build.dir}"/> </target> <target name="release" depends="jar"> <copy file="${jar.dir}/${ant.project.name}.jar" todir="${lib.dir}"/> </target> </project>
记得把这个build.xml放入JSON的根目录下,然后运行ant就编译好了. 下面测试下 新建一个目录test, 在test下有目录src, lib, 把刚刚编译的json.jar 复制到这个lib下. 然后写一个测试java文件放入src下,代码为:
import java.util.*; import java.io.*; import org.json.*; class Bean { private int id; private String name; public Bean(){ id = 0; name = "Mary"; } public int getId() { return id; } public String getName() { return name; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public String toString() { StringBuilder s = new StringBuilder(); s.append(id); s.append(":"); s.append(name); return s.toString(); } } public class Test { public static void main(String[] args) throws Exception { String s = new JSONObject().put("JSON", "Hello, World!").toString(); System.out.println(s); Bean b = new Bean(); b.setId(100); b.setName("Mary"); System.out.println(new JSONObject(b)); HashMap<String, Integer> map = new HashMap<String, Integer>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); JSONObject json = new JSONObject(map); json.accumulate("c", 4); System.out.println(json); json = new JSONObject("{'a':{'a':4}}"); System.out.println(json); JSONStringer js = new JSONStringer(); System.out.println(js.object().key("name").value("Mary").endObject()); } }
在test根目录下写一个build.xml, 内容如下:
<project name="Test" basedir="." default="run"> <property name="build.dir" value="build"/> <property name="lib.dir" value="lib"/> <property name="src.dir" value="src"/> <property name="class.dir" value="${build.dir}/classes"/> <property name="jar.dir" value="${build.dir}/jar"/> <property name="main-class" value="Test"/> <path id="classpath"> <fileset dir="${lib.dir}" includes="**/*.jar"/> </path> <target name="prepare"> <mkdir dir="${build.dir}"/> <mkdir dir="${class.dir}"/> <mkdir dir="${jar.dir}"/> </target> <target name="compile" depends="prepare"> <javac srcdir="${src.dir}" destdir="${class.dir}" classpathref="classpath"/> </target> <target name="jar" depends="compile"> <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${class.dir}"> <manifest> <attribute name="Main-Class" value="${main-class}"/> </manifest> </jar> </target> <target name="run" depends="jar"> <java fork="true" classname="${main-class}"> <classpath> <path refid="classpath"/> <path location="${jar.dir}/${ant.project.name}.jar"/> </classpath> </java> </target> </project>
运行ant就可以看到结果了... json包中两个最常用的就是JSONObject和JSONArray对象,望文生义,不需解释.
另外JSONStringer 和JSONTokener 也是有用的工具,具体实例传送门:http://blog.csdn.net/xiazdong/article/details/7059573
另外有个问题, JSONObject有一个构造方法是可以把一个java bean转化为JSONObject对象,我的bean为:
class Bean { private int id; private String name; public Bean(){ id = 0; name = "Mary"; } public int getId() { return id; } public String getName() { return name; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public String toString() { StringBuilder s = new StringBuilder(); s.append(id); s.append(":"); s.append(name); return s.toString(); } }
new 一个Bean后,传进去,不知为什么返回的是{},即一个空json, 不知道什么原因.
sublime编辑器(差点记成subline #!)据说很强大,查看这篇文章http://www.iplaysoft.com/sublimetext.html。
吸引我的一点是支持vim模式, 于是很兴奋的安装了。 确实初次使用感觉挺清新的,支持快捷输入,比如java的System.out.println()函数只需输入pl,而且很高效的文件切换,只需输入ctrl+p,再输入文件名(不是全名,只要是能够区分其他文件名,比如只有一个文件,有a字母命名,只需要输入a,自动切换到该文件,回车都不需要输。 还有就是代码高亮、多行输入(同时给多行加上前缀特别有用)、折叠等等。还有就是文本地图(就是打开文件的缩略图)、强大的命令、自由方便的配置等。
但是,仍有许多不足,我是习惯了vim的,基本的vim操作都支持,比如删除d,移动光标等,但是很多特别常用的不支持,比如删除空白行:%g/^$/d 替换:%s/a/A/gc等,还有不支持q退出。平时的:wq无效。 所以还是很难以接受过来的。如果sublime和vim能够完美结合,应该是个不错的。
Bootstrap是快速开发Web应用程序的前端工具包。它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等。各种过渡效果、滚动、对话框、轮播等都有现成的组件可以调用,非常方便。less(不要将linux命令less弄混淆了)语言将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox),也可以借助Node.js或者Rhino在服务端运行。
bootstrap传送门:http://www.bootcss.com/
zh_CN.UTF-8 UTF-8 en_US.UTF-8 UTF-8 zh_CN.GBK GBK zh_CN.GB2312 GB2312
sudo dpkg-reconfigure locales
set fileencodings=utf-8,gbk,gb2312
#include <stdio.h> int main(int argc, char **argv) { printf("HelloWorld\n"); return 0; }
测试下, 看下效果!