Just For Fun 读书笔记

2015-05-12 00:00:00 +0000

Linus Torvalds / David Diamond 《Just for Fun》阅读笔记

Just For Fun by Linux, 这本书我已经不太记得什么时候开始看的了,印象中看了好久,这几天终于看完了。

这本书是 Linus Torvalds的自传。Linux 是 Linux 内核的最早作者,随后发起了这个开源项目,担任Linux内核的首要架构师与项目协调者,是当今世界最著名的电脑程序员、黑客之一。他还发起了Git这个开源项目,并为主要的开发者。不管是 Linux 还是 Git,对工程师来说都是伟大的作品,能造成一个已经举世无双,他造出了这两个。

生活的意义 他写的这本书很有意思,比如

“我们可以在第一章里对人们解释生命的意义何在。这样可以吸引住他们。一旦他们被吸引住,并且付钱买了书,剩下的章节里我们就可以胡扯了。”

还有

“人类的追求分成三个阶段。第一是生存,第二是社会秩序,第三是娱乐。最明显的例子是性,它开始只是一种延续生命的手段,后来变成了一种社会行为,比如你要结婚才能得到性。再后来,它成了一种娱乐。”

这也是 LInux 认为的生活的意义。“归根结底,我们就是为了开心”。

孩提时代 Linux 对自己的评价很客观,他书的第一句话就是,“我是一个长相丑陋的孩子”。然后他从小就接触计算机。这让我觉得,但凡在计算机领域有极高造诣的,儿童时代就接触这方面的东西了。当然有时候也让我感觉到,一个人成人所处的领域其孩提时代所接触的多少有些关系。总所周知,接下来的剧情肯定是沉迷,然后在知识的海洋,然后长达后又因缘巧合在这方面领域驰骋。

Linux 诞生 Linux 阐述他接触的电脑,电脑这玩意啊,是个人一开始接触都会喜欢的。电脑刚出来那会,很贵,普通人买不起,所以 Linux 就在学校的机房玩。之后他买了台电脑,开始学习编程,学习编写操作系统。他上大学时把精力放在了学习上,然后还去参军。当他分期付款买了 386 后,就更投入编程工作了。从 BIOS 开始了解,还有懂 CPU 的运行机制。Linux 操作系统也就这样开始了。

他对编程也是相当狂热,那时候他也是个书呆子。沉迷于解决计算机问题。一开始也因为终端的复杂想要放弃。然后大部分时间就是在编程。节奏是:编程—睡觉—编程—睡觉—编程—吃饭—编程—睡觉—编程—洗澡。这样的生活和我现在差不多。Linux 就这么造出来了,接着他干的一件事是开放源代码。因为开发了源代码,很多人一起参与了 Linux 系统的建设工作。Linux 的用户也越来越多。

版权 Linux 系统可是无价之宝啊。非卖品。然后他就采用 GPL 的版权声明。

生活 “在那个时候,只要一想到姑娘,Linux系统就变得不再重要了。在某种程度上,今天也还是这样。”

哈哈,最后当然也许我是错的。

jQuery datepicker

2014-11-08 00:00:00 +0000

jQuery UI datepicker 的一些实际应用. 演示效果请移步: http://plnkr.co/edit/q5mLhKQ3S1KJP8KXg6dn

第二个日期自动弹出.


两个日历的时候(从xx日期到xx日期), 选择第一个日期后第二个日期将会弹出.

html:

<input type="text" class="datepicker in">
<input type="text" class="datepicker out">

Javascript:

$( ".datepicker" ).datepicker({
	onSelect: function(dateText, inst) {
		if ($(this).hasClass("in")) {
			setTimeout(function() { $('.out').focus(); }, 0);
		}
	}
});

第二个日期的最小值


当选择了第一个日期后, 第二个的日期应该大于第一个的日期, 设置第二个日期的最小值

html:

<input type="text" class="datepicker in">
<input type="text" class="datepicker out">

Javascript:

$( ".datepicker" ).datepicker({
	onSelect: function(dateText, inst) {
		$( ".out" ).datepicker("option", "minDate", new Date($(".in").val()) );
	}
});

在移动设备上


在移动设备上为了不弹出键盘

html:

<input type="text" class="datepicker">

Javascript:

$( ".datepicker" ).datepicker().attr('readonly', 'readonly');

其他的建议参考官方文档


http://api.jqueryui.com/datepicker/

Sass

2014-08-25 00:00:00 +0000

Sass 介绍

Syntactically Awesome Stylesheets (Sass)

Sass is the most mature, stable, and powerful professional grade CSS extension language in the world.

快捷安装

如果写好了 Gemfile, 直接在该目录下 bundle install 即可.

Gemfile 文件参考:

gem "compass", "~> 1.0.1"
gem "sass", "~> 3.4.5"
gem "susy", "~> 2.1.3"

SASS 与 SCSS 区别:

SASS:

#sidebar
	width: 30%
	background-color: #faa

*.sass 文件


SCSS:

#sidebar {
	width: 30%;
	background-color: #faa;
}

*.scss 文件

Sass 安装

$ [sudo] gem install compass
$ [sudo] gem install sass
$ [sudo] gem install susy

如果直接用 gem install 安装会安装最新版, 最新版不知道什么原因没有办法使用.

基本命令

创建工程:

$ compass create --bare --sass-dir "sass" --css-dir "css" --javascripts-dir "js" --images-dir "images"

or

$ compass create pp -r susy -u susy

监控:

$ compass watch

为什么使用 Sass

  • 缩短开发时间。
  • “不要重复自己” (DRY) 的准则。
  • 使代码更加清晰易读。

References:

Ubuntu ssh

2014-03-19 00:00:00 +0000

Ubuntu 环境下 SSH 的安装及使用

SSH是指Secure Shell,是一种安全的传输协议,Ubuntu客户端可以通过SSH访问远程服务器 。SSH的简介和工作机制可参看上篇文章 SSH简介及工作机制

安装服务端

Ubuntu 安装 SSH Server:

$ sudo apt-get install openssh-server

确认是否开启服务

$ ps -e | grep ssh

如果看到 sshd 那说明 ssh-server 已经启动了

如果没有则可以这样启动:

$ sudo /etc/init.d/ssh start

References:

[转载]Web Developer

2014-01-31 00:00:00 +0000

From: 王子墨 如何成为一名优秀的web前端工程师(前端攻城师)

如何成为一名优秀的web前端工程师(前端攻城师)?

程序设计之道无远弗届,御晨风而返。———— 杰佛瑞 · 詹姆士

 

我所遇到的前端程序员分两种:
第一种一直在问:如何学习前端?
第二种总说:前端很简单,就那么一点东西。

 

我从没有听到有人问:如何做一名优秀、甚至卓越的WEB前端工程师

 

何为:前端工程师

前端工程师,也叫Web前端开发工程师。他是随着web发展,细分出来的行业。
Web前端开发技术主要包括三个要素:HTML、CSS和JavaScript!
它要求前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化、SEO和服务器端的基础知识,而且要学会运用各种工具进行辅助开发以及理论层面的知识,包括代码的可维护性、组件的易用性、分层语义模板和浏览器分级支持等。
随着近两三年来RIA(Rich Internet Applications的缩写,中文含义为:丰富的因特网应用程序)的流行和普及带来的诸如:Flash/Flex,Silverlight、XML和服务器端语言(PHP、ASP.NET,JSP、Python)等语言,前端开发工程师也需要掌握。

前端开发的入门门槛其实很低,与服务器端语言先慢后快的学习曲线相比,前端开发的学习曲线是先快后慢。
HTML 甚至不是一门语言,他仅仅是简单的标记语言!
CSS 只是无类型的样式修饰语言。当然可以勉强算作弱类型语言。
Javascript 的基础部分相对来说不难,入手还算快。

 

也正因为如此,前端开发领域有很多自学成“才”的同行,但大多数人都停留在会用的阶段,因为后面的学习曲线越来越陡峭,每前进一步都很难。

Web前端技术有一些江湖气,知识点过于琐碎,技术价值观的博弈也难分伯仲,即全局的系统的知识结构并未成体系,这些因素也客观上影响了“正统“前端技术的沉淀!而且各种“奇技淫巧”被滥用,前端技术知识的传承也过于泛泛,新人难看清时局把握主次。因此,前端技术领域,为自己觅得一个靠谱的师兄,重要性要盖过项目、团队、公司、甚至薪水。

 

另一方面,正如前面所说,前端开发是个非常新的职业,对一些规范和最佳实践的研究都处于探索阶段。
总有新的灵感和技术不时闪现出来,例如CSS sprite、负边距布局、栅格布局等;
各种JavaScript框架层出不穷,为整个前端开发领域注入了巨大的活力;
浏览器大战也越来越白热化,跨浏览器兼容方案依然是五花八门。
为了满足“高可维护性”的需要,需要更深入、更系统地去掌握前端知识,这样才可能创建一个好的前端架构,保证代码的质量。

 

随着手持设备的迅猛发展,带动了 HTML5行业标准的快速发展。web领域的技术,大概有10年都没有大的更新了!
现在市场很需要优秀的、高级的前端工程师。
一方面是因为这是一个比较新的细分行业,而且前端程序员大都自学一部分,知识结构不系统;另一方面,大学里面没有这种课程,最最重要的是:北大青鸟这类培训机构也没有专门的前端工程师的培训课程!!

 

吴亮在《JavaScript 王者归来》第一张的序里面说:大多数程序员认为 Javascript 过于简陋,只适合一些网页上面花哨的表现,所以不愿花费精力去学习,或者以为不学习就能掌握。
实际上,一门语言是否脚本语言,往往是她的设计目标决定,简单与复杂并不是区分脚本语言和非脚本语言的标准。
事实上,在脚本语言里面,Javascript 属于相当复杂的一门语言,他的复杂度即使放在非脚本语言中来衡量,也是一门相当复杂的语言!
Javascript 的复杂度不逊色于 Perl 和 Python!

 

如何学习前端知识? 

我们生活在一个充满规则的宇宙里面。社会秩序按照规则运行,计算机语言几乎全部是规则的集合。计算机前辈们定义规则,规则约束我们,我们用规则控制数据。大部分时候,对数据的合理控制,来自于你对规则的掌握。

 

学习 HTML,CSS 应该先跟着书仔细、扎实的学一遍。然后就需要做大量的练习,做各种常规的、奇怪的、大量的布局练习来捆固、理解自己的知识。
而学习 Javascript 首先要知道这门语言可以做什么,不能做什么,擅长做什么,不擅长做什么!
如果你只想当一个普通的前端程序员,你只需要记住大部分 Javascript 函数,做一些练习就可以了。
如果你想当深入了解Javascript,你需要了解 Javascript 的原理,机制。需要知道他们的本源,需要深刻了解 Javascript 基于对象的本质。
还需要 深刻了解 浏览器宿主 下 的 Javascript 的行为、特性。

 

因为历史原因,Javascript一直不被重视,有点像被收养的一般! 所以他有很多缺点,各个宿主环境下的行为不统一、内存溢出问题、执行效率低下等问题。
作为一个优秀的前端工程师还需要深入了解、以及学会处理 Javascript 的这些缺陷。

 

那么一名优秀的、甚至卓越的 前端开发工程师的具备什么条件

首先,优秀的Web前端开发工程师要在知识体系上既要有广度和深度!做到这两点,其实很难。所以很多大公司即使出高薪也很难招聘到理想的前端开发工程师。技术非黑即白,只有对和错,而技巧则见仁见智。
在以前,会一点Photoshop和Dreamweaver的操作,就可以制作网页。
现在,只掌握这些已经远远不够了。无论是开发难度上,还是开发方式上,现在的网页制作都更接近传统的网站后台开发,所以现在不再叫网页制作,而是叫Web前端开发。
Web前端开发在产品开发环节中的作用变得越来越重要,而且需要专业的前端工程师才能做好。
Web前端开发是一项很特殊的工作,涵盖的知识面非常广,既有具体的技术,又有抽象的理念。简单地说,它的主要职能就是把网站的界面更好地呈现给用户。

 

其次,优秀的Web前端开发工程师应该具备快速学习能力。Web发展的很快,甚至可以说这些技术几乎每天都在变化!如果没有快速学习能力,就跟不上Web发展的步伐。前端工程师必须不断提升自己,不断学习新技术、新模式;仅仅依靠今天的知识无法适应未来。Web的明天与今天必将有天壤之别,而前端工程师的工作就是要搞清楚如何通过自己的Web应用程序来体现这种翻天覆地的变化。
说到这里,我想起了一个大师说过的一句话:对于新手来说,新技术就是新技术。
对于一个高手来说,新技术不过是就技术的延伸。
再者,优秀的前端工程师需要具备良好的沟通能力,因为前端工程师至少都要满足四类客户的需求。

1、产品经理。这些是负责策划应用程序的一群人。他们会想出很多新鲜的、奇怪的、甚至是不可是实现的应用。一般来说,产品经理都追求丰富的功能。

2、UI设计师。这些人负责应用程序的视觉设计和交互模拟。他们关心的是用户对什么敏感、交互的一贯性以及整体的好用性。一般来说,UI设计师于流畅靓丽、但并不容易实现的用户界面,而且他们经常不满前端工程师造成 1px 的误差。

3、项目经理。这些人负责实际地运行和维护应用程序。项目管理的主要关注点,无外乎正常运行时间、应用程序始终正常可用的时间、性能和截止日期。项目经理追求的目标往往是尽量保持事情的简单化,以及不在升级更新时引入新问题。

4、最终用户。指的是应用程序的主要消费者。尽管前端工程师不会经常与最终用户打交道,但他们的反馈意见至关重要。最终用户要求最多的就是对个人有用的功能,以及竞争性产品所具备的功能。

Yahoo 公司 ,YUI 的开发工程师 Nicholas C. Zakas 认为:
前端工程师是计算机科学职业领域中最复杂的一个工种。绝大多数传统的编程思想已经不适用了,为了在多种平台中使用,多种技术都借鉴了大量软科学的知识和理念。成为优秀前端工程师所要具备的专业技术,涉及到广阔而复杂的领域,这些领域又会因为你最终必须服务的各方的介入而变得更加复杂。专业技术可能会引领你进入成为前端工程师的大门,但只有运用该技术创造的应用程序以及你跟他人并肩协同的能力,才会真正让你变得优秀。

————————————

关于书籍:
HTML、CSS 类别书籍,都是大同小异,在当当网、卓越网搜索一下很多推荐。如果感觉学的差不多了,可以关注一下《CSS禅意花园》,这个很有影响力。
Javascript 的书籍 推荐看老外写的,国内很多 Javascript 书籍的作者对 Javascript 语言了解的都不是很透彻。

这里推荐几本 Javascript 书籍:

初级读物:
《JavaScript高级程序设计》:一本非常完整的经典入门书籍,被誉为JavaScript圣经之一,详解的非常详细,最新版第三版已经发布了,建议购买。

《JavaScript王者归来》百度的一个Web开发项目经理写的,作为初学者准备的入门级教程也不错。
中级读物:
《JavaScript权威指南》:另外一本JavaScript圣经,讲解的也非常详细,属于中级读物,建议购买。
《JavaScript.The.Good.Parts》:Yahoo大牛,JavaScript精神领袖Douglas Crockford的大作,虽然才100多页,但是字字珠玑啊!强烈建议阅读。
《高性能JavaScript》:《JavaScript高级程序设计》作者Nicholas C. Zakas的又一大作。
《Eloquent JavaScript》:这本书才200多页,非常短小,通过几个非常经典的例子(艾米丽姨妈的猫、悲惨的隐士、模拟生态圈、推箱子游戏等等)来介绍JavaScript方方面面的知识和应用方法。
高级读物:
《JavaScript Patterns 》:书中介绍到了各种经典的模式,如构造函数、单例、工厂等等,值得学习。
《Pro.JavaScript.Design.Patterns》:Apress出版社讲解JavaScript设计模式的书,非常不错。
《Developing JavaScript Web Applications》:构建富应用的好书,针对MVC模式有较为深入的讲解,同时也对一些流程的库进行了讲解。
《Developing Large Web Applications》:不仅有JavaScript方面的介绍,还有CSS、HTML方面的介绍,但是介绍的内容却都非常不错,真正考虑到了一个大型的Web程序下,如何进行JavaScript架构设计,值得一读。

要做优秀的前端工程师,还需要继续努力:《高性能网站建设指南》、《Yahoo工程师的网站性能优化的建议》、“YSLOW”性能优化建议、《网站重构》、《Web开发敏捷之道》、“ jQuery 库”、“前端框架”、“HTML5”、“CSS3”。。。 这些都要深入研究!

 

万事开头难!如果你能到这个境界,剩下的路自己就可以走下去了。
人们常说:不想当裁缝的司机,不是个好厨师。
如果单纯只是学习前端编程语言、而不懂后端编程语言(PHP、ASP.NET,JSP、Python),也不能算作是优秀的前端工程师。
在成为一个优秀的前端工程师的道路上,充满了汗水和辛劳

 

—— 王子墨  写于Hong Kong,Kowloon

2012年10月28日 20:18

本文用到的参考资料:

1、What makes a good front end engineer?

2、Best Practices for Speeding Up Your Web Site

 

Go Lang

2014-01-07 00:00:00 +0000

Mac Install Go lang

下载 安装 go1.2.darwin-amd64-osx10.8.pkghttps://code.google.com/p/go/downloads/list

Mac $GOPATH not set Go 语言环境变量的问题

$ mkdir $HOME/go
$ export GOPATH=$HOME/go

添加这个工作空间子目录($GOPATH/bin)到系统的$PATH环境里

$ export PATH=$PATH:$GOPATH/bin

使用Google的性能分析工具分析Go程序的记录

http://my.oschina.net/qinhui99/blog/63903

References:

Mac Configure SAE mezzanine

2013-10-13 00:00:00 +0000

SAE

SAE作为国内的公有云计算,新浪开发的,安全可靠。我们可以将网站挂在上面运行。

Mezzanine

Mezzanine是一个强大的,扩展性良好的管理平台,是一种CMS(内容管理系统)。它是建立在Django的框架之上的。

配置SAE本地环境

一开始要安装ython(2.7),接着如下操作安装virtualenv并且运行virtualenv

$ [sudo] pip install virtualenv
$ ~/: virtualenv sae # install sae
$ ~/: source ~/sae/bin/activate # launch sae

source这一句是启动SAE本地环境,启动后 Terminal(终端) 最左会有(sae) 这样的标志,在virtualenv环境下,pip安装会安装到/sae/lib/python2.7/site-packages文件夹下。

一般来说需要安装下列的Python package (using pip install package) 安装如下的package

  • sae-python-dev,
  • django(django==1.5) or webpy,
  • mysqldb(mysql-python),
  • pylibmc,
  • PIL, …

安装如:

$ pip install sae-python-dev

pip mysql的安装:

$ pip install mysql-python

Saecloud install mezzanine

$ mkdir mezzanine
$ cd mezzanine

运行

$ saecloud install mezzanine

由于saecloud安装的问题,此时你的文件夹site-packages里面有很多无用的文件。

filebrowser_safe/ mezzanine/ requests/ requirements/ grappelli_safe/ oauthlib/ requests_oauthlib/

只保留这几个文件。接着运行:

$ mezzanine-project 1
$ cd 1
$ python manage.py createdb --noinput
$ python manage.py runserver

svn checkout 你的project:

$ svn co https://svn.sinaapp.com/project_name/

或者新建config.yaml文件,输入:

---
name: mezzanine
version: 1
libraries:
  - name: django
    version: '1.5'

新建index.wsgi文件,输入:

import os
import sys

root = os.path.dirname(__file__)

sys.path.insert(0, os.path.join(root, 'site-packages'))

import sae
import wsgi
import django.core.handlers.wsgi

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
os.environ['LANG'] = 'zh_CN.utf8'
os.environ['LC_ALL'] ='zh_CN.UTF-8'
os.environ['LC_LANG'] ='zh_CN.UTF-8'

application = sae.create_wsgi_app(wsgi.application)

执行python manage.py collectstatic收集静态文件

修改setting.py中的<pre>ROOT_URLCONF = “%s.urls” % PROJECT_DIRNAME</pre>修改为ROOT_URLCONF = "urls",这一句大概在208行。

运行脚本:

$ dev_server.py --mysql=root:root@localhost:3306 --host=127.0.0.1 --storage-path=/tmp

至此本地环境配置完毕。 打包上传到SAE。

References:

Mac install bs4 & requests

2013-10-08 00:00:00 +0000

As I want to run a crawler which in https://github.com/lvyaojia/crawler

but the error is from bs4 import BeautifulSoup ImportError: No module named bs4

install BeautifulSoup

So I install bs4 downloaded beautifulsoup https://pypi.python.org/pypi/beautifulsoup4 uncompressed it

$ cd beautifulsoup4-*
$ sudo python setup.py install

and then if you can run ‘from bs4 import BeautifulSoup’, it means it is ok.

after install bs4, I found the error become import requests ImportError: No module named requests

install request

So I install request download request https://pypi.python.org/pypi/requests uncompressed it

$ cd requests-*
$ sudo python setup.py install

and then if you can run ‘import requests’, it means it is ok.

References:

  • Jay Kim (Mar 26, 2012). from:URL

Mac install OpenCV

2013-10-07 00:00:00 +0000

Install opencv

Download XCode from App Store

Download XCode command tools

Open XCode -> Preferences -> Downloads -> Components -> Command Line Tools

Install ScipySuperpack (https://github.com/fonnesbeck/ScipySuperpack)

$ git clone https://github.com/fonnesbeck/ScipySuperpack.git
$ sh install_superpack.sh

Download OpenCV

Extract OpenCV-2.4.2.tar.bz2

Open Terminal at the extracted directory

At OpenCV-2.4.2 directory:

$ mkdir release
$ cd release
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON ..

Compile with:

$ make -j8

Install:

$ sudo make install

Configuring python with opencv

Update your bash_profile:

$ echo "export PYTHONPATH=/usr/local/lib/python2.7/site-packages/:$PYTHONPATH" >> ~/.bash_profile

Close and open the Terminal

Open python console and try to import cv2 to test if everything works

$ python import cv2

Configuring Eclipse with opencv

Open eclipse Click on File-> New Project-> Java Project Give an appropriate Project Name Now right click on Project and choose Properties.

Select Java Build Path and then select Libraries.

Click on Add Library.

Choose User Library. Click on User Libraries, then Select New and give a name to your library.

Now Select your library and click on Add External JARs, go to your build folder and then open bin folder, there you will find opencv-246.jar, Select this file. (this folder is /opencv/release/bin or /opencv/build/bin) Now Select Native Library Location and click on Edit.

Insert the path of your cv.so file, mine is in /build/lib. (this path maybe /opencv/release/lib or /opencv/build/lib) Click on Finish, Now your project is configured with openCV library.

ant

Environment

First, create a bin/ folder and copy the OpenCV jar into it. Second, create a lib/ folder and copy the OpenCV lib into it.

$ mkdir bin
$ cp <opencv_dir>/bin/opencv_<version>.jar bin/
$ mkdir lib
$ cp -rf <opencv_dir>/lib/ lib/

Running

$ ant -DocvJarDir=bin -DocvLibDir=lib

References:

Windows install jekyll

2013-09-21 00:00:00 +0000

Jekyll

jekyll 是一个简单的免费的Blog生成工具,它只是一个生成静态网页的工具,可以使用第三方服务,类似disqus作为它的评论。最关键的是它可以免费部署在Github上,并且绑定自己的域名。

windows 8 系统似乎还有问题,未解决

下载

下载:ruby on windows 下载:Devkit

安装

安装RubyInstaller到c盘 设置环境变量,path中配置形如C:\Ruby193\bin目录,然后在命令行终端下输入gem update --system来升级gem Devkit解压到C:\DevKit

$ cd C:\DevKit
$ ruby dk.rb init
$ ruby dk.rb install

上面这段code的目的是让Devkit目录下的config.yml中有形如 - C:/Ruby193 e.g.

最后

$ gem install jekyll

启动服务器

$ jekyll server

服务器地址为:http://127.0.0.1:4000 完毕

问题答疑:

这个问题是源于没有安装成功Devkit

References: