隨筆090830

本來想寫一篇關於唯心主義的隨筆。但是從一開始就被同學的QQ打斷,到後來SLL讓我去幫她同學修電腦,我的思緒完全被打亂了,已經忘記原本要寫的東西了。

居然開始幫助GK解決問題了,我真的感覺到自己的進步了。我開始可以肯定地做決定了,而不是半猜半想地去摸索一些事情。現在的每一個決定都必須是有道理和邏輯的。即使這個決定是錯的,那錯的是我所依託的道理和邏輯,至少方法對了。

我叔叔一直告訴我,事情不可能等到準備好了才開始做,都是邊做邊學的。很多事情,我都是肯定我叔叔的說法的,至少我找不到反駁的理由。但對於這一點,雖然我的經驗沒有我叔叔豐富,但我還是要堅持我的觀點。機會是留給有機會的人的,即使你看到了機會,沒有勇氣去投入,去把握住這個機會,那只能說你根本沒有看到這個機會。即使你去做了,那只能說是個巧合。真正的把握機會應該是,看到機會,並且義無反顧地去堅持,即使失敗了也重新爬起來,直到成功為止。

天哪,這并不是我想寫的,但既然已經寫下來了,就發表吧。下次再寫我今天本來想寫的東西。

對了怎麼能忘了,這個週末去志鍇他家慶祝他弟弟考上大學的事情。他弟弟好成熟,完全感覺不到他是一個高中畢業生,簡直像一個大學畢業生,挺佩服的。這次旅程看清了一些人,明白了一些道理,也算不虛此行。

C語言教程 — (一)環境配置

市面上的C語言書很多,我也看過一些,但始終沒有找到很好的范本,要么誤人子弟,要么不適合入門。這也是為什么那么多人說C語言難學,甚至有人說至少需要1年才能精通C語言。雖然我不知道他所謂的精通是達到什么程度,我不敢自稱精通,但至少引導入門的水平算是達到了吧。我現在寫的是入門級的教程

介紹一門語言,不得不講一下這門語言的歷史。C語言發布的時候并不是作為一門編程語言的研究成果,它只是作為一個偉大產品--Unix被發明的附屬物。是的,它是在Unix編寫的過程中,為了簡化編碼,加強邏輯性編程的一個工具。算是一個誤打誤撞的產品而流行至今,算是一個奇跡。但它的出現,為編程世界打開了一道新的大門,要知道當時的程序員寫的是最接近機器碼的匯編。C語言的出現,讓他們可以使用更接近人類語言和語法的代碼去同機器的世界溝通。

想知道更多關于C語言的歷史,可以查看: http://www.livinginternet.com/i/iw_unix_c.htm

接下來,簡單的介紹一下編程語言是怎么一回事。這要從計算機程序運行的方式說起。普通的應用程序都是運行在操作系統之上的。當然,操作系統也是一個程序,它作為普通程序的底層支持,溝通應用程序、計算機硬件還有使用計算機的用戶,在三者之間建立起聯系,作為三者溝通的橋梁。對于操作系統的介紹,這里略去10W字,不作為本文的內容。 我們要學習的是用編程語言來編寫應用程序。

這里介紹幾個概念:
1. 源代碼:我們使用編程語言,寫出的智慧的結晶
2. 可執行文件:可以直接在操作系統之上運行的應用程序 我們的目標是,寫出源代碼,并把它轉化成為可執行文件。

從源代碼到可執行文件的過程,叫做編譯。從事編譯這項工作的程序,叫做編譯器。C語言問世至今,已經有30幾年的歷史了,所以C語言的編譯器也有很多各種各樣不同的版本。C語言本身也出現了很多分支,這些分支當然有各自的編譯器來支持。我想推薦一個自認為最正統的分支:ASNI C99標準[1]。很好的實現這個標準,并被廣泛使用的編譯器是gcc[2]

終于要進入正題了。下面我們了解一下怎么在自己的機子上配置C語言編程的開發環境。鑒于大多數初學者都是使用Windows系統,這里只介紹Windows下的編譯環境配置。

我們需要的有:
1. 編譯器、系統頭文件、引用庫
2. 集成開發環境(IDE[3]

很幸運,Dev-cpp為我們提供了完整的1,至于2,我推薦Eclipse-cpp。
他們的下載地址:
Dev-cpp:http://www.bloodshed.net/dev/devcpp.html
Eclipse-cpp:http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/R/eclipse-cpp-galileo-win32.zip
Dev-cpp需要安裝在非中文目錄下,建議直接安裝在D盤根目錄下。D:\dev-cpp\ 安裝完成以后,右鍵單擊我的電腦-屬性-高級-環境變量,在系統變量里面找到Path,單擊編輯,在變量值的最后面加上:

也就是你安裝的目錄下面的bin目錄,注意,千萬別把原來的給刪了,后果很嚴重哦。保存好之后,點開開始菜單-運行,輸入:

在打開的黑色DOS窗口里輸入:

如果出現gcc的版本號,說明剛才的修改成功了,如果提示gcc不是命令,說明剛剛沒設置成功,請仔細查看以上步驟,重試。 接下來安裝Eclipse-cpp,其實不用安裝,找個地方解壓就行了。
然后運行Eclipse.exe。第一次運行會出現:

第一次打開Eclipse

第一次打開Eclipse


這個是設置工作目錄,也就是你創建工程和源代碼默認的根路徑。建議改成圖中的地址,這樣就把工作路徑設置成你安裝Eclipse的目錄下的workspace目錄下了。這樣做的好處是,以后可以直接打包整個Eclipse文件夾到別的電腦,而保持工程文件的完整性。以后每次打開Eclipse都會彈出這個窗口,詢問工作目錄,如果嫌麻煩,可以把下面的復選框勾上,這樣以后就不會再詢問了。
點擊OK,進入歡迎界面:
Eclipse的Welcome界面

Eclipse的Welcome界面

關掉歡迎界面,就見到Eclipse的主界面啦,如圖所示:

Eclipse主界面

Eclipse主界面

右鍵單擊Project Explore下面的空白處,選擇New-C Project,新建一個C工程,在彈出的窗口中選擇Hello World ANSI C Project。然后給你的第一個工程起個名字,輸入上面的Project name中。單擊Finish,第一個工程就創建成功啦。
現在可以在Project Explore中看到你剛剛創建的工程了。這個工程包含四個東西:
1.Binaries:生成的二進制文件
2.Debug:用于編譯輸出的文件夾
3.Includes:系統頭文件
4.src:我們的源文件,這里會有一個現成的文件,雙擊打開它。

用以下內容替換原來的內容:

然后單擊綠色的像播放一樣的按鈕Run(以下簡稱Run按鈕),右邊的黑色小箭頭,選擇Run Configurations…,這里我們要進行運行程序的配置。
雙擊左邊列表中的C/C++ Application,新建一個運行配置。現在把視線移到右邊。單擊Project右邊的Browse,由于我們現在只有一個工程,所以就選中這個唯一的工程。
再單擊C/C++ Application右邊的Search Project,此時也只有一個二進制文件可以選。Apply,我們的設置完成了,單擊Close關閉浮動窗口。
在下面一排的標簽,我們選中Console,也就是命令行。命令行是系統的標準輸入輸出。至于什么是系統的標準輸入輸出,將在下一節中講解。
現在直接單擊Run按鈕,如果Console中出現了應該出現的文字,那說明環境配置成功了。 至于應該出現什么文字呢?試試就知道了。

PS: 安裝Dev-cpp和Eclipse的這一段,我自己沒有測試過,是憑著自己以前的記憶寫下來的,可能會出現一些細節性的問題。沒辦法,我沒有寬帶,剛剛重裝過的電腦里也沒這兩個軟件。我的網速更沒辦法下載這兩個軟件。如果遇到什么問題,請留言。我明天去公司把這兩個東西載下來,再修正一下上面這段。

附錄:
[1] ASNI C99標準:American National Standards Institute C99
[2] gcc:Gnu C Compiler
[3] IDE:Integrated Development Environment

隨筆

好久沒有發表文章了,是不是該寫點什么。先解釋一下為什么是繁體字吧,因為簡體字又要改版了,我怕以后會不認識自己打出來的字,暫時用繁體安全一點。

上周周末去了福州,跟爬子還有CYC玩了兩天,非常開心,對福州印象大有改觀。爬說我成長很快,我很開心。(有點像新聞聯播的臺詞,大家不要太在意。)

今晚去叔叔家吃飯了,好像真的很久沒有去了。他說希望我能經常去他們家吃飯。嗯,我好像常常忙的忽略了與人的交流。今晚叔叔說了很多,提到了說了很多次的寫工作日記。真的,在日常工作中可以紀錄的點點滴滴太多了,可是事情一旦過去,就很難回想起來,還沒有轉化成自己的本質。工作日記啊。。。我實在是很懶,而且每次回到家就不太記得發生過了什么,難到沒有值得我記憶的事情嗎?不是的。。我必須做一個有心人。應該隨時用手機記下一些事情,Twitter不就是用來做這個的么。。。可惜被墻了。好吧,好像寫了一堆廢話。先到此為止,想到什么有意義的再紀錄下來。

《福布斯》:司法部没必要调查微软与雅虎交易

北京时间8月17日《福布斯》文章指出,微软和雅虎最近宣布双方将在搜索方面展开合作,司法部立即闻风而动,准备对那项交易展开调查.这是意料之中的事,但是司法部此举对广大用户的利益一点好处都没有.
在自由市场环境下,垄断是无法长期存在的.在执行反垄断举措上,自由市场也比华盛顿更有效率一些. 曾经无比强大而最终被市场力量打垮的垄断企业比比皆是.

上个世纪五十年代和六十年代时期,通用汽车曾刻意降低销售额以避免遭到反垄断起诉.如今,通用汽车仅仅凭借它每年从美国市场获得的700亿美元收入而存活.

随后,IBM因为它在大型机上的绝对领先优势备受反垄断诉讼困扰;但是到了九十年代,它却由于小型计算机和PC网络的出现而陷入濒临破产的境地.

施乐创造了复印机市场,但是其他厂商如佳能和理光却通过廉价的小型复印机而逐渐蚕食掉施乐的份额.施乐最后一直被挤到了死亡线上,随后才在前首席执行官Anne Mulcahy的带领下起死回生.

在微软与雅虎的合作交易中,即便是形式上的调查也是不合理的.谷歌控制着65%的搜索市场. 更糟的是,微软是想通过创新而非垄断行为来改变这个市场的现状.它推出的必应搜索已经动摇了谷歌的领先地位.这正是市场发展的方式,司法部应该了解这一点.

Array.indexOf in Internet Explorer

According to this document at Mozilla Developer Center, Javascript 1.5 has been implemented in a browser since at least the first releases of Mozilla as open source browser, which means, in other words, since around 1998. Let’s assume it was 2002 which is marked as the release of the 1.0 version.

And I was doing some interface programming lately and I needed to check if an element was in an array. Went to Gecko’s documentation (that’s the one I normally use, since it’s less overbloated with crappy ads) and checked that Array objects had an indexOf function. Cool! I used that function on my code. Then once I finished with all the development, went to The Horror (i.e. Internet Explorer) and tested it.

Surprise! It was broken! What had I done? (You know the debugger for Internet Explorer is not specially helpful)

I suspected of the indexOf function, and recalled vague memories about doing a custom search function in the past for looking into arrays and not having to write a for(i=0; i<ar.length;i++) thing each time…

Mmmm… did a alert(‘Array.indexO’) in ie and what did I get?: undefined

So they have been spent five years for releasing ie7 and still they didn’t implement Array.indexOf!

No worries, though. Javascript is flexible! Look, IE, I don’t care if you choke on the mere seeing of indexOf, you’re going to run it whether you like it or not!


and voila! my script wasn’t broken anymore!

jlUtil For Javascript

昨天用js写了一个Json_encode的工具函数,附上模仿jQuery并加强的extend函数。
对于extend函数,主要加强的是可以遍历子对象来extend,而不是简单的覆盖。

getJSON的使用方法:

extend的使用方法:

下面是代码:

[转]Web 设计与开发者必须知道的 15 个站点

转一篇cb的好文,以后应该会用到。

公司博客整整一个月没有更新了,最近一段时间,全公司都忙于两件事,为海尔集团做定制,为一个合作伙伴做 OEM,终于有了眉目。工作期间,常用到一些工具与帮助站点,今天读到一篇文章,介绍了15个对 Web 设计与开发师极端有用的站点,里面有不少也是我们一直在使用的,也许对很多人都有用,翻译出来以饷同仁。 ColorCombos

配色是 Web 设计的首要大事,Color Combos 帮你预备了数千种配色方案,可以根据色调浏览选取。
LIpsum

Lorem Ipsum Text 是一中自造的,字典中不存在的单词,是在演示页面结构的时候,需要加文字的地方使用 Lorem Ipsum Text 填充可以避免用户因关注文字的意思而分神。Lipsum.com 可以帮你生成制定数目的 Lorem Ipsum 单词。
What the font?

有时候你对某个 Logo 感兴趣,想知道是拿什么字体做的,可以将 Logo 图片上传到这个网站,结果之准确会让你难以置信。
ConvertIcon

Favicon 越来越受欢迎,尤其随着 Firefox 的流行,Firefox 会将你站点的 Favicon 标志显示在标签上,也会显示于书签,Favicon 支持多种图形格式,比如 png,但 IE 并不支持 png,该站点可以帮助你将 png 等图片格式的 Favicon 转换成 IE 支持的 ico 格式。
BgPatterns

现代 Web 设计的趋势之一包括使用背景图案,BgPatterns.com 可以帮你设计背景图案,他们有大量可选的图案,可以按不同方式接合,还可以设置透明度。
HTML Encoder

如果你要在网站中显示 Web 代码,那将是非常烦人的事,你必须将诸如 < 一类的符号用编码表示,这个网站可以帮你做这些事情,只需将你的代码复制进去,他们会帮你生成可以直接使用的代码。还有 HTML Decoder 帮你做相反的事。
Xenocode Browsers

该网站非常有用,可以直接在站点中预览你的网站在 IE6, IE7, IE8, Firefox 2, Firefox 3, Google Chrome 以及 Opera 中的样子。唯一的不足是,不支持 Mac 和 Linux 环境下的浏览器。
Test Everything

这个网站包含了超过 100 中工具帮你测试几乎所有东西,如跨浏览器兼容,查 PR 值,甚至帮你验证代码。
Sprite Generator

CSS Sprites 在显著降低 HTTP 请求方面功不可没,但 CSS sprite 可不是个简单的技术,Sprite generator 可以帮你做这些繁复的工作,将你的图片打包成 zip 上传上去,他们会把你的图片组合成 sprite,还帮你生成 CSS 代码。
Buttonator

这个网站可以帮你设计漂亮的按钮。
Load Impact

这个压力测试站点可以帮你测试你的站点的抗压能力,如果你的某篇文章曾经上过 Digg 或 StumbleUpon 等网站的首页,你就会知道抗压测试多么重要。
IconFinder

这个网站收藏了大量来自网络的免费图标。
TypeTester

该站点可以帮你测试不同字体的显示效果。
CSS Tidy

这个站点可以帮你检查 CSS 代码,并修正其中的错误,比如,它可以发现你的 CSS 代码中最常见到重复设置问题。
Contact Forms Generators

自定义表单可以帮助你实现同访问者的互动,无需编程,就能快速生成访客反馈表单,甚至帮你生成邮件发送 PHP, ASP, Perl 代码。

本文来源:http://www.catswhocode.com/blog/15-sites-web-developers-and-designers-should-know
中文翻译来源:COMSHARP CMS 官方网站

回家了

最近事情实在是太多了,好多朋友、同学过来住处玩,连写博客的时间都没有了。清华的同学回来,今天趁机逃回家里,写下这篇博客,本来这么短的blog应该写在twitter上面的,可惜twitter被水产了。有上cb的同学应该懂水产是什么意思哦。别告诉我你两个都不懂。。。

其实twitter还可以上的,只要用 https://twitter.com就可以访问了。可惜我的朋友们比较少人上,所以只好上去follow一些名人了。自己也很少上去写了。

WordPress的API-Key

貌似wordpress.com也被天朝给封了,为了开放评论,不得不开启Akismet(一个自动评判垃圾评论的插件,非常牛逼,还可以自动学习),可是Akismet需要wordpress官方的API-Key,只能找代理去注册了。我嫌麻烦,只用网页代理,可是很多网页代理不支持表单,所以没法注册。还好我运气好,找到了两个。
这里只是记录一下,不是帮他们宣传哦。

这个支持表单,还不错的代理,就是广告有点那啥,我是用它注册的

http://proxy.daili.name/

可是wordpress要登录还得用https,上面这个代理没法胜任,只好继续找,找到一个国外的,还不错,用它登录上了,估计注册也没问题

http://www.online-browser.com/

Pro Javascript Techniques – 目录

先来一段废话:

今天是周五,终于可以放松啦,蛮累的,今天上班的时候萌生这个想法,自己的博客流量总是上不去,多写点有用的东西,带动一下流量,嘿嘿。
本来是想继续翻译的,后来发现这本书已经有译本了,并且不允许在网络上发布其内容,只好放弃翻译,改写读后感好了,继续使用这个目录。两个半小时的心血啊。

正文:

目录

关于作者

关于技术校对者

感谢

第一部分 介绍现代Javascript

第一章   现代Javascript编程

1.1 面向对象Javascript

1.2 测试你的代码

1.3 打包和发布

1.4 非侵入的DOM脚本

1.4.1 文档对象模型DOM

1.4.2 事件

1.4.3 Javascript和CSS

1.5 Ajax

1.6 浏览器支持

1.7 总结

第二部分 专业Javascript开发

第二章   面向对象Javascript

2.1 语言特性

2.1.1 引用

2.1.2 函数重载和类型校验

2.1.3 命名域

2.1.4 闭包

2.1.5 语境

2.2 面向对象基础

2.2.1 对象

2.2.2 对象的创建

2.3 总结

第三章   编写可重用的代码

3.1 标准的面向对象代码

3.1.1 原型继承

3.1.2 经典继承

3.1.3 基础类库

3.1.4 原型类库

3.2 打包

3.2.1 名称空间

3.2.2 整理你的代码

3.2.3 压缩

3.3 发布

3.4 总结

第四章   Debug和测试的工具

4.1 Debug

4.1.1 错误命令行

4.1.2 DOM查看器

4.1.3 Firebug

4.1.4 Venkman

4.2 测试

4.2.1 JSUnit

4.2.2 J3Unit

4.2.3 测试实例

4.3总结

第三部分 非侵入的Javascript

第五章   文档对象模型DOM

5.1 介绍文档对象模型DOM

5.2 初识DOM

5.2.1 操作DOM中的空白部分

5.2.2 简单展示DOM的功能

5.2.3 绑定每个HTML节点

5.2.4 标准DOM方法

5.3 等待HTML DOM的载入

5.3.1 等待页面载入

5.3.2 等待大多数DOM载入

5.3.3 当DOM载入完成时

5.4 在HTML文档中搜索节点

5.4.1 通过class名称搜索节点

5.4.2 通过CSS选择器查找节点

5.4.3 XPath

5.5 取得节点的内容

5.5.1 取得节点的文字内容

5.5.2 取得节点的HTML内容

5.6 操作节点属性

5.6.1 取得和设置节点的属性值

5.7 操作DOM

5.7.1新建节点

5.7.2 插入节点

5.7.3 注入HTML

5.7.4 删除节点

5.8 总结

第六章   事件

6.1 介绍Javascript事件

6.1.1 异步事件和线程

6.1.2 事件阶段

6.2 常规事件特性

6.2.1 事件对象

6.2.2 this关键字

6.2.3 取消事件冒泡

6.2.4 重写浏览器的默认事件

6.3 绑定事件监听器

6.3.1 常规绑定

6.3.2 DOM绑定:W3C

6.3.3 DOM绑定:IE

6.3.4 添加和删除事件

6.4 事件的类型

6.5 非入侵的DOM脚本

6.5.1 Javascript被禁用时的准备

6.5.2 确保链接不依赖于Javascript

6.5.3 监视CSS是否禁用

6.5.4 事件的可访问性

6.6 总结

第七章   Javascript和CSS

7.1 访问样式信息

7.2 动态节点对象

7.2.1 节点的位置

7.2.2 节点的大小

7.2.3 节点的可见度

7.3 动画

7.3.1 滑入

7.3.2 隐现

7.4 浏览器

7.4.1 鼠标位置

7.4.2 可视范围

7.5 拖拽

7.6 脚本类库

7.6.1 moo.fx和jQuery

7.6.2 Scriptaculous

7.7 总结

第八章   增强表单功能

8.1 表单校验

8.1.1 必填字段

8.1.2 正则匹配

8.1.3 设置规则

8.2 显示错误信息

8.2.1 校验

8.2.2 什么时候校验

8.3 增强用户体验

8.3.1 悬停说明

8.3.2 标记必填字段

8.4 总结

第九章   创建一个相册

9.1 示例相册

9.1.1 Lightbox

9.1.2 ThickBox

9.2 创建相册

9.2.1 分离加载

9.2.2 透明掩盖层

9.2.3 定位容器

9.2.4 导航

9.2.5 幻灯片展示

9.3 总结

第四部分 Ajax

第十章   介绍Ajax

10.1 使用Ajax

10.1.1 HTTP请求

10.1.2 HTTP响应

10.2 处理响应数据

10.3 完整的Ajax类库

10.4 不同数据使用方式的示例

10.4.1 RSS

10.4.2 HTML选择器

10.4.3 JSON和Javascript:远程执行

10.5 总结

第十一章   使用Ajax增强博客功能

11.1 永不结束的博客

11.1.1 博客模板

11.1.2 数据源

11.1.3 事件检测

11.1.4 请求

11.1.5 结果

11.2 生动的博客

11.3 总结

第十二章   自动补全的搜索栏

12.1 自动补全搜索栏的例子

12.2 创建页面

12.3 监视键盘输入

12.4 搜索自动补全结果

12.5 导航结果列表

12.5.1 键盘导航

12.5.2 鼠标导航

12.6 最终结果

12.7 总结

第十三章   Ajax Wiki

13.1 什么是Wiki

13.2 关于数据库

13.3 Ajax请求

13.4 服务器端代码

13.4.1 处理一个请求

13.4.2 执行和格式化SQL脚本

13.5 处理JSON响应

13.6 额外的学习:一个Javascript博客

13.7 应用程序代码

13.7.1 Javascript核心代码

13.7.2 Javascript SQL类库

13.7.3 Ruby服务器端代码

13.8 总结

第五部分 Javascript的未来

第十四章   Javascript将去向何处

14.1 Javascript 1.6和1.7

14.1.1 Javascript 1.6

14.1.2 Javascript 1.7

14.2 Web应用程序1.0

14.2.1 创建一个时钟

14.2.2 简单的星球模拟

14.3 彗星

14.4 总结

第六部分 附录

附录A  DOM索引

A.1 资源

A.2 术语

A.3 全局变量

A.3.1 document

A.3.2 HTMLElement

A.4 DOM对象

A.4.1 body

A.4.2 childNodes

A.4.3 documentElement

A.4.4 firstChild

A.4.5 getElementById( elemID )

A.4.6 getelementsByTagName( tagName )

A.4.7 lastChild

A.4.8 nextSibling

A.4.9 parentNode

A.4.10 previousSibling

A.5 节点信息

A.5.1 innerText

A.5.2 nodeName

A.5.3 nodeType

A.5.4 nodeValue

A.6 节点属性

A.6.1 className

A.6.2 getAttribute( attrName )

A.6.3 removeAttribute( attrName )

A.6.4 setAttribute( attrName, attrValue )

A.7 DOM操作

A.7.1 appendChild( nodeToAppend )

A.7.2 cloneNode( true|false )

A.7.3 createElement( tagName )

A.7.4 createElementNS( namespace, tagName )

A.7.5 createTextNode( textString )

A.7.6 innerHTML

A.7.7 insertBefore( nodeToInsert, nodeToInsertBefore )

A.7.8 removeChild( nodeToRemove )

A.7.9 replaceChild( nodeToInsert, nodeToReplace )

附录B  事件索引

B.1 资源

B.2 术语

B.3 事件对象

B.3.1 常规事件

B.3.2 鼠标事件

B.3.3 键盘事件

B.4 页面事件

B.4.1 载入

B.4.2 关闭之前

B.4.3 错误

B.4.4 缩放

B.4.5 滚动

B.4.6 关闭

B.5 UI事件

附录C  浏览器

C.1 现代浏览器

C.1.1 Internet Explorer

C.1.2 Mozilla

C.1.3 Safari

C.1.4 Opera