Nodejs中的模块(Modules) – v0.4版

总结Nodejs中模块的引用,和一些技巧。 Node 0.4版本之后官方文档有些变化,搜寻模块的顺序跟以前可能不太一样。

永远不变的是这一句:Node uses the CommonJS module system.

Node里面模块有三种:核心模块(内建二进制的)、js文件、文件夹(一组文件)

文件型模块:一般用.js/.node扩展名保存,js是纯文本的js文件,.node是编译的二进制addon模块。
引用模块的时候,Node首先按照指定的名字查找,如果没有找到就自动添加这两个扩展继续搜寻

文件夹型模块:目录中的package.json指明这个组的主程序。如果没有这个文件,Node会加载里面的index.js/index.node(如果有的话)

引用方法两种:

require(‘模块名字’);

require(‘./相对路径’);

Node搜寻模块的几个位置(可以把自定义模块放到这里):

如果require的不是“路径”(包括绝对和相对路径)
Node会沿着目录的路径向上查找名为node_modules的文件夹 :

官方文档里的例子:在’/home/ry/projects/foo.js’中引用require(‘bar.js’)搜寻的顺序

  • /home/ry/projects/node_modules/bar.js
  • /home/ry/node_modules/bar.js
  • /home/node_modules/bar.js
  • /node_modules/bar.js

关于多层嵌套引用的搜寻顺序在官方文档里Optimizations to the `node_modules` Lookup Process部分有说明。

可以用require.resolve()查看具体引用的哪个文件

注:如果引用的模块名字与内建的模块重名,Node默认直接返回内建的模块(比如 http)。所以,与内建的模块重名的模块只能用相对路径引用。

待整理……

Mac上的Unix开发工具

Mac系统华丽的界面把Unix包装的太深了,但是Unix有的东西Mac里面还原汁原味的保留着呢。

Mac的命令行支持所有标准的Unix命令,但是其他一些Unix&Linux中常用的工具&包管理器,Mac里面可能没有自带,这里总结一些这样的Mac工具。

Mac中已经自带了Python、Ruby、Perl,这些方便我们安装更多好用的工具。

一、软件包管理

1.Homebrew:http://mxcl.github.com/homebrew/

新概念的包管理器。所有包都从源码编译安装。

类似于一套ruby脚本库,帮你自动化的“下载-编译-安装” (wget-tar-configure-make-make install)

2.MacPorts:http://www.macports.org

3.Fink:http://www.finkproject.org

二、编程开发

1.Xcode:Unix开发工具

三、

不断积累更新……

中国的互联网翻不了身,悲哀

一定要注释一句:
几个月前的牢骚,一直没整理好,看来都是怨念,
怨念就怨念吧,
乱七八糟的发了就发了,
只当我发牢骚了……
看不懂最好

未来的五到十年,中国的互联网也还只能是抄袭国外。国内的政策限制了各种创新,即使有创意,也只是空想:“巧妇难为无米之炊”。

本文中讲述的内容都不是最前卫的新闻,只是突然意识到未来无望,感觉到沮丧……

正文

一流企业定标准;二流企业做设计;三流企业“脚踏实地”的搞生产。

利润的大头儿都被前两位给赚足了!……

微软的时代已经过去了,Apple顺理成章的超过微软。如果听到那则新闻的时候显露出一点惊讶,那你肯定是落伍了!

现在的互联网面临着两大革新:

  • 云计算和无处不在的无线互联
  • 全新的人机界面,美妙的用户体验

稍微了解一点的人提到云计算,可能会想到“集群”、“网格计算”这一类的专业名词。但是有多少人知道云计算讲给我们的信息生活带来怎样的改变。

就像几个世纪前欧洲的工业革命一样,云计算将会改变人们使用信息设备的方式。从蒸汽机到电动机,我们现在所经历的是把自己从电脑桌旁解放出来,你的超级计算机会通过无处不在的网络跟随你到任何地方。真的就像游戏世界里面召唤自己的坐骑一样。

他有多强大:要多强大有多强大,你甚至可以使用全世界的计算机的处理能力,不再需要移动硬盘(还要小心轻放,还要升级大容量),比任何现有的硬盘都大(因为在机房里,那是成千上万的硬盘组合在一起)。

这样的美梦天天都做,但是今天我突然醒了:在我还能满怀激情的闯荡互联网江湖的这10年里,看不到任何希望。

曾经一直在想“我所想到的东西都已经被人做出来了,郁闷我自己活在一个太发达的时代,没有给自己发挥的空间……我只要等着他们越来越成熟,逐渐能走进我的生活,只要等着iPad越来越便宜 或者山寨的AdroidPad越来越精致、移动的G3无处不在 网速飞快……”,你可能也这样想过。

但是现在我意识到,这方面我们可以做的还很多,因为我们需要把理想变做现实!(至少在中国,这些还都是空白)

云计算的基础,基础的基础是稳定畅通的网络,让我们能随时随地连接到自己的那片云。但是目前在国内……5年之内能用上便宜的无线网络吗?(要求不高,以北京现在有线宽带的价格和服务质量就感谢党了)

没有这样的网络环境,也没有政策引导(中国政府还没那么前卫),面对这么垃圾的网络质量,哪还有什么欲望去挖掘网络应用,还有谁愿意把自己的文件保存到心理距离千里之外的服务器上……没有需求、没有投资,有几个偏执狂能在这方面坚持到条件成熟(像不被人理解的科学家一样,守着自己的一堆堆代码守10年……)

真到“条件成熟”,中国还只能是“与国际接轨”“引进国外先进技术”……

中国人的品位(大部分)还停留在“完成基本功能”的水平上。不是没文化、天生的土,是因为压根儿就没敢想。

Android打败iOS是不可能的,没有谁打败谁,根本都不是一个市场的……

简单分享:windows用git工具

公司里用的是svn,越来越感觉过于笨拙,不够灵活(主要还是大家都不会用,只会checkout和commit)

有时候自己做点小东西喜欢用分布式版本管理系统,比如Mercurial Hg

之前只会用svn和cvs的时候 完全理解不了git是怎么用的,后来用了一段时间的hg后发现“分布式”的一些优点,其他工具无法替代。现在回来尝试git(说起来,当时刚刚接触git查到的那几篇教程太烂了,本来挺简单的几个概念给我解释的晕头转向,让我一直对这个东西有恐惧心理)

正文:

同样,git源自Unix世界,Win上用git现在终于也比较简单了:TortoiseGit(又是那个乌龟)、msysgit(git for win 命令行程序)

1.去msysgit的页面下载7z格式的PortableGit,解压就能用了(绿色的,随意放在哪个目录)

msysgit原本是提供一整套工具,可以在windows上源码编译安装git(那个complete要130多兆)。现在有了这个直接的二进制版,直接下来来用就行了。

2.下载TortoiseGit小乌龟,安装(它依赖第一步安装的git程序),然后配置git的路径(就是让小乌龟知道git程序在哪)。

(说白了,小乌龟只是个图形界面,真正版本控制、管理代码还是调用git完成)

文件夹里点邮件 -> 小乌龟菜单 -> setting    他可能会提示你没有找到git   然后去设置界面 “浏览”   ==  /git解压安装的路径/bin

可以了!

为什么不直接用命令行,用小乌龟显得很不专业……

我也想那样命令行比较酷,但是windows的命令行(cmd&powerShell)没法处理utf-8汉字,输进去、输出来全都是乱码。(恨啊……)

参考:

其他关于中文的配置可以参考这篇文章:http://www.cnblogs.com/baizx/archive/2010/08/09/1796120.html

Firefox的智能表单提交

莫名其妙,突然发现程序里面的表单绑定的事件被执行了两次……(那里包含一个统计功能,也就是统计数字都会2倍,悲剧了)

更悲剧的是,查了半天没发现有什么重复绑定的事件……

用其他浏览器试了一遍,正常,没有重复执行。

后来我发现了这个秘密:火狐的表单提交事件变的“相当智能”了!!我想说:“太TM智能了!!”

场景: 每个表单的提交按钮照旧用type=submit,而且为了屏蔽Chrome的“回车提交”功能 给form加了action=”javascript:void(0)”.另外,为了让所有的浏览器都能回车提交(只绑定了最后一个输入框的事件)

然后,邪门的事儿就发生了:只要给submit的按钮绑定了事件,火狐就会默认给表单里的“回车”绑定到那个submit绑定的动作……

无语了……

今天早上Firefox好像是自动更新了一次,现在的版本号是 3.6.11,不知道是不是这个版本的特有功能……

Snow Leopard下安装nginx+php5.3.x+MySQL

php从5.3开始 编译的配置有了不少的变化:fastcgi没有了,php-fpm成了自带的;Mysql不用MysqlClient代码了。

方案:

之前php一直是apache的标准配置,所以有apache专用的mod与php结合,nginx没有,只能CGI方式了。大家常用FastCGI,性能比较好。fpm(FastCGI Process Manager)是php的FastCGI程序。

Nginx + php-fpm + php5.3.x + Mysql native Driver + MySQL

其中php-fpm在5.3以上版本都自带了,不用另外下载,编译时候只要加上–enable-fpm就有了;mysql native driver也比以前简单了,直接–with-mysql=mysqlnd

PHP官方关于MySQL的说明:

MySQL Native Driver is a replacement for the MySQL Client Library (libmysql). MySQL Native Driver is part of the official PHP sources as of PHP 5.3.0.

The MySQL database extensions MySQL extension, mysqli and PDO MYSQL all communicate with the MySQL server. In the past, this was done by the extension using the services provided by the MySQL Client Library. The extensions were compiled against the MySQL Client Library in order to use its client-server protocol.

With MySQL Native Driver there is now an alternative, as the MySQL database extensions can be compiled to use MySQL Native Driver instead of the MySQL Client Library.

关于5.3以后自带fpm:php 5.3.3 中的php-fpm配置

Google的结果:

使用网上的方法编译配置 没能./configure成功,就卡在MySQL那一步:

http://blog.jiqila.com/post/220/

http://blog.diynbuy.com/index.php/archives/65

我的安装过程:

实验后编译成功的配置(因为麻烦 没装GD):

./configure \
–prefix=/usr/local/php \
–with-mysql=mysqlnd \
–disable-ipv6 \
–with-zlib \
–enable-xml \
–disable-rpath \
–enable-fpm \
–with-mcrypt=/usr/local/libmcrypt \
–with-openssl \
–with-mhash \
–enable-zip \
–with-bz2 \
–with-fpm-user=_www \
–with-fpm-group=_www
当然要提前装好几个lib:zlib、libxml2、libmcrypt、libiconv、mhash  (参考http://zannarkand.blog.sohu.com/103458898.html

目前nginx配置(参考nginx官方wiki):

server {

listen       80;

server_name  test.net;

root /Users/xxxx/htdocs/;  #你自己站点的根目录

location ~ .php$ {

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  /Users/xxxx/htdocs$fastcgi_script_name;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;

fastcgi_param SERVER_SOFTWARE nginx;

fastcgi_param QUERY_STRING $query_string;

fastcgi_param REQUEST_METHOD $request_method;

fastcgi_param CONTENT_TYPE $content_type;

fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;

fastcgi_param REQUEST_URI $request_uri;

fastcgi_param DOCUMENT_URI $document_uri;

fastcgi_param DOCUMENT_ROOT $document_root;

fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param REMOTE_ADDR $remote_addr;

fastcgi_param REMOTE_PORT $remote_port;

fastcgi_param SERVER_ADDR $server_addr;

fastcgi_param SERVER_PORT $server_port;

fastcgi_param SERVER_NAME $server_name;

}

}

配置php-fpm (基本就是按照需要去掉他们的注释号) /usr/local/php/etc/php-fpm.conf   。其中有一句  创建进程.pid文件 一定要加上,关闭php的时候要用。

启动:

分别启动他们

启动nginx:   sudo nginx    (或许你需要输入nginx的全路径)

启动php:   sudo /usr/local/php/php-fpm

关掉他们:

sudo nginx -s stop

sudo kill -SIGINT `cat /usr/local/php/var/run/php-fpm.pid`

其他参考:
有问题  下面回复吧….

是苹果 也是Unix

做技术的都喜欢用linux,桌面上都是Ubuntu,我就偏偏喜欢被咬了一口的Mac。

他们不了解Mac,都说我是非主流……倒也没说错,linux出了问题google一下基本就解决,而且全中文……mac环境下开发遇到问题,平均Google二十几次也解决不了问题。

其实Mac就是基于BSD Unix造出来的,命令行上的东西应该都是一样的。只是在Unix的内核外面重新造了一套超级好用的图形界面,这里还包括一堆新概念:软件.app框架、程序数据的管理(类似于windows的AppData)、pkg安装包、dmg硬盘镜像、系统配置、Dock….(在mac的世界里,只要会用鼠标拖拽,就能完成系统的管理)

不过,国内的Mac用户好像大多是做设计和做产品的,真正把Mac当作Unix用的太少,中文Google里完全找不到共同语言。看来我要在这方面出一份力了。

前几天刚刚解决了Kerberos的问题,昨天又搞了一天的php环境(nginx + fpm + php + mysql),简单总结一下Mac这个Unix怎么编译安装新程序。

Mac默认不带GCC的,需要的话 得装个XCode,安装过程中要选上“Unix开发….”,然后才能在命令行里使用gcc/make等的命令

一般的从源代码编译安装都是

./configure –prefix=/usr/local/your_soft

make

sudo make install

为了删除的时候方便 一般都用–prefix参数指定安装到一个单独目录下,不用的时候直接删除整个目录就行了。如果没有指定prefix,安装好的文件会散落在/usr/local/里面各个文件夹下。可以用rm $(find /usr |grep 软件名)来删除,这样可能会留下一小部分垃圾文件,不过除了浪费点空间,没什么大影响。rm $(find /usr |grep 软件名)在删除每个文件时都会让你确认一下,安全第一。你可以先 find /usr |grep 软件名)一下,如果你确认这些都是那个软件生成的,直接 rm -rf $(find /usr |grep 软件名)即可。

其他配置参数,可以先执行./configure –help查看一下。

Mac下使用Kerberos

纠结了两天的Kerberos问题终于解决了,国内竟然没搜到这样的问题,简单记录一下……

问题表现(看看是不是你遇到的那个问题):

本来Mac是自带kerberos程序包的(krb5-user),错就错在太相信Mac了….

kinit获取票据正常,klist可以看到获取到的票据,但是ssh登录我已经有权限的服务器还是让我输入密码

想看ssh的执行过程可以用参数-v(更详细的log信息可以用-vv甚至-vvv)

这个时候发现:可用的身份认证方式里面有gssapi… password 两种,但是前面那种跳过了(这个时候我才估计是kerberos缺文件了,ssh用不了kerberos…)

解决办法:

去这里:http://web.mit.edu/macdev/KfM/Common/Documentation/index.html 下载一个Mac OS X Kerberos Extras 安装一下就好了(是Mac自带krb5的一个补充)

注意安装过程选“自定义”去掉默认安装的mit kerberos配置,你自己的配置还是写在/etc/krb5.conf(上面mit的网站上写了放配置文件的三个位置了,要动哪个你随意)

其他的基本不用管了,安装过程会自动配置机器上的ssh开启kerberos认证方式。

可以了

别忘了Mac(leopard以上)系统还自带了一个图形界面的Ticket Viewer(深藏在这里/System/Library/CoreServices)

还有,那个著名的小卡车(Transmit)FTP客户端是支持kerberos的,密码不填直接连接就可以了!!爽!!

总结前端JS开发流程

就当我胡诌八扯瞎白话吧……

参与项目与产品合作:

一定要参加产品讨论会,可以从技术的角度提供一些合理建议(主要还是告诉产品我们可以实现怎样的效果……可以这样,不可以那样),另一方面:把产品不靠谱的想法扼杀在摇篮,也是产品与技术之间熟悉沟通的过程,可以减少今后的理解偏差。

第一次拿到产品需求文档(这个时候可能需要估计大概的工时),一定要先通读,细读,画流程图(挨个对照设计图)找细节漏洞,直到每一个细节(细到提示文案每一个标点),这期间沟通很多,可以发现一些理解歧义。

修改后的产品文档,开始设计程序,做个模型,各方面接口约定好。一定要技术一起讨论这个问题,产品不应该分配这个任务。

估计准确的工时(加上根据2/8原则,或者其他什么更适合自己的原则)这个时候才能开始开发。

在项目周期,代码维护方面:

对于一个项目,应该会有好几期(如果这个产品策划的靠谱的话),几个原则:

  • 对于今后可能出现的功能留有扩展余地
  • 靠谱的产品应该有固定的一套设计元素(交互界面控件)这些可以考虑封装
  • 在实验阶段的产品,设计元素没有确定,先写散,待产品渐渐稳定 一定要给时间整理代码,封装这些设计元素

不是产品要变成技术,更不是技术一定要转做产品,谁也不能取代谁,只是为更好的合作,做出更好的产品!

稍后继续总结完善(应该还会有图出来)

用Fiddler代理调试Javascript

最近在调试JS程序的时候力不从心……就是因为服务器端的程序“太过灵活”,绑host的方式满足不了需求了,还好前两天从同事那里接触到Fiddler这个东西。

Fiddler就是为了这个生的:
当我们发现更改代码不能即时生效,还要等一个不算漫长的服务器Cache;或者某些时候我们要调试的代码依赖于线上的某段代码,调试环境很难构建…… 很多时候Geeker们都是想到“SSH”这个东西, 其实没必要这么纠结!

Fiddler原理就是一个本地代理(跟翻墙的AutoProxy差不多),这样它就能在中间截获所有请求,在这过程中Fiddler提供了一系列贴心的功能:筛选、暂停、自动回复……主要的就这几个(现在Fiddler支持IE和Firefox,其他浏览器用着不是很方便)

一次调试的基本流程:

  1. 发现问题:上述,没办法通过绑host的方式调试,想起来Fiddler
  2. 分析需要调试的几个程序文件,地址、域名
  3. 打开Fiddler,清空记录,填写fliter条件
  4. 一次完整的页面请求,列表中找出需要调试的程序文件,添加到AutoResponse,要返回什么就是我们说了算了(一般情况是拷一份线上的文件进行调试)
  5. 这个时候就跟绑host的调试完全一样了,而且对于那种页面上的空间有概率显示的时候更有效,因为我们可以决定返回给浏览器的内容。

其中,AutoResponse可以用正则表达式,用regex:开头就可以了,别忘了给网址的“.”转译

待续

 
Powered by Wordpress. Design by Bingo - The Web Design Experts.