Web 编程真的很难!!
Web很难!
说老实话,我过去很生气那些互联网公司,我送去简历,他们却根本不给我一点机会和时间。我已经很久没有向互联网工作职位投过简历了,因为我知道我的简介会被第一个丢到废纸篓里。
两个月前,我还不能理解为什么互联网公司对我的大量的C/C++/指令控制/嵌入式系统的简历毫不感兴趣。现在我知道了。下面写的就是为什么 …
Web软件开发体现了一种全新的思维方式。例如,我过去是用微软的.NET来做界面程序的。当经过了几个月的 CSS,HTML,JavaScript学习之后,我可以老实的说我很惭愧。做为一个非Web软件开发者,我想起了曾有无数的嵌入式软件技术人员随手把 Web编程工作写作一种“琐碎的”或“无聊的”工作。然而,经过了过去两个月对Web编程的钻研,我发现事实正好相反。
就让我们先看看前端的这些东西:
- 学习CSS,HTML,JavaScript,Jquery 以及把它们之间的相互作用关系搞通,并不是件容易的事情。事实上,对于那些从 .NET,C++ 或 Qt 思维模式过来的人,它会困难的让人沮丧。GUI Toolkit这些东西跟Web前端的东西比较起来显得笨头笨脑没有灵性。
- 这个世界已经永远的抛弃了那些设计糟糕的、令人讨厌的桌面图形界面。而互联网对此要求的近乎苛刻 — 一个糟糕的用户界面设计会毁了一个互联网公司。人们经常在说,Facebook更简约的界面设计正是致使Myspace逐渐败退、几近消亡的关键原因。有 一个在一个新近突起互联网公司工作的软件技术人员告诉我: 每天,新代码都会受到考验,来自不同地区的数百万的用户采用不同的方式,使用任何你能想到的软件、硬件对程序进行测试。你在数秒钟内就能获得反馈信息。如果某处改动可能会导致某种灾难性错误,我们可以只向1%的用户开放,并记录一切发生的事情。很遗憾,大多数桌面图形程序不会遇到这么大的压力。
- 桌面图形程序很容易跨平台。然而,面对着这么多不同的浏览器之间的细微差别和各自的奇特的癖好,你想让这样优雅的前端代码在它们中都能正确的运行,这更难。
现在,让我们讨论一下系统配置:
- 嵌入式系统通常是文本文件(如XML)来保存系统配置,运行时加载到内存里。的确,你可以做出一个嵌入式的Web前端来作为管理工具,用户通过这个前端修 改配置,但配置信息仍然存储在一个简单的文本里,有时,当简单文本体积增大的一定程度时,人们会使用小的sqllite3数据库。而web里,它要求的是 巨大的、精心设计的关系型数据库,例如mysql,更不用说那些数目众多的只是看起来像数据库东西,如memcache, CouchDB, MongoDB, NoSql 。
在web编程中我唯一能用上力的部分只有后端的server程序。可是当遇到大数据问题时,我又不行了。我就像离开了水的鱼。
我要再说一次:Web编程很难。它让我感到惭愧。在我努力学习它。
[英文出处]: Web Programming is Hard !!
[译文来源]: 外刊IT评论
Handler-Socket Plugin for MySQL – SQL的功能、NoSQL的性能
记得半年多前写过 MySQL vs NoSQL ,且一直以来我比较坚持用数据库存储K/V数据,因为不只是对数据安全等能提供保障,主要是发现大部分系统的qps根本就没那么高,能上4k的水平已经很少了,这点MySQL完全可以满足,因为优化好的K/V请求,在 MySQL的SQL层上能实现每核心5k左右的qps,而这一数据在 HandlerSocket出来之后,得到了更大的提升。
HandlerSocket plugin for MySQL 已经出来一段时间了, 鉴于HandlerSocket和 InnoDB的健壮、安全性, 可以预见HandlerSocket取代Memcached等 NoSQL存储/ Cache,已经是大势所趋。
HandlerSocket 是 MySQL的一个插件,用于跳过 MySQL的SQL层面,直接访问内部的 InnoDB存储引擎,从而充分发挥 InnoDB的性能优势;此外, InnoDB的ACID特性,可以保障数据的安全。
初步对比了下,HandlerSocket Plugin for MySQL性能跟Memcached差不多,原文中的测试数据显示更胜Memcached一筹,接下来准备跟ndbapi的性能进行对比测试,为系统构架提供参考。
approx qps server CPU util MySQL via SQL 105,000 %us 60% %sy 28% memcached 420,000 %us 8% %sy 88% MySQL via HandlerSocket 750,000 %us 45% %sy 53%
HandlerSocket源码地址: https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/
HandlerSocket的客户端:
HandlerSocket Client for Perl
每位网页设计师新手都应知道的10件事
在做网站时会遇到很多的问题,所以网页设计师通常要扮演多种角色,并且要掌握如何构建一个有效实用的网站布局知识。
你在网页设计所学到的大多数教训都来自工作经验。学习是一个反复持续的过程,并且没有比犯错更好的方式来获得知识(从错误中学习)。在本文中,我们将讨论10个重要并常规的技巧,这是每位网页设计师新手都应该知道。
1. 优化图片,获得更好的页面加载速度
学习如何通过选择正确的格式,来优化网页图片,并确保文件大小在可行的范围你是足够小的。虽然现在人们已经都在使用宽带,但仍然有人是拨号上网。此外,虽然移动装置技术的普及,但移动装置却不一定支持像宽频一样的速度,图片文件的大小可能还是会延长网页的加载时间,有可能把用户赶走的。
这里有个选择适合的文件格式的技巧:如果图片是单色,那最好保存成PNG或者GIF格式;如果是连续性的色调(如照片)则最好保存成 JPG格式。
有很多的工具可以帮助你进一步优化你的图片,降低他们的文件大小。可以参考这个工具列表来帮助优化你的图片。尽量把图片数量减到最低,并且灵活使用图片,并且尽可能地减小文件大小。如此一来,将可以大大的减少页面的读取时间和改善网页的性能。
2. 保持干净和简单(即:简洁)
一个好的网页设计不光只是看起来好看而已,还要是用户友好型的。通常来说,一个干净、简单的网页设计最终会成为一个可用性高的网页设计,因为它在与用户的交互中不会使其产生混淆。当页面上有太多的网站功能和组件时,将会分散网站用户的注意力而失去原本浏览网站的目的。确保每个页面元素都有其目的,然后问自己以下问题:
- 是否真的需要这个设计么?
- 这是什么组件是做什么用,它如何协助用户浏览?
- 如果我突然删除这个组件,大多数人会希望它“回来”吗 ?
- 如何把这些元素和目标、消息和网站的宗旨互相结合?
此外,尽管它可能是一个超酷的新概念或界面设计模式,但你还是要确保对你的用户而言该设计仍然是方便和直观的。人们习惯于通用性的交互模式、网站功能、和网络接口,如果你的设计的确很独特,确保它不是太模糊和晦涩。 要有创意,但还要保持简单。
3. 导航(条/栏)是最重要的设计
一个网站最重要的部分就是整个网站的导航。没有它,无论在哪个页面中,用户都会发生卡在这个页面离不开的状况。有了这明显的实际方向,我们将讨论一些建构网站导航时重要的点。
首先,在网站的导航结构上,投入足够的时间和很多规划是非常重要的。虽然这是常识,但仍然有很多设计师想当然地设计网站导航。
摆放位置、风格、所用技术(javascript或CSS)、可用性和网页易读性,这些是你制作导航设计时需要考虑的。
在没有CSS的状况下,你的导航设计应该也是可用的,这是基于文字基础的浏览器相容性。你可以尽量去嘲笑文字基础的浏览器,但它们在很多的移动设备上还是流行的。也许更为重要的是,对屏幕用户来说(99.99%的情况下),没有CSS的导航功能照样可用访问。
在没有客户端技术情况下(如JavaScript或Flash),导航功能应该容易进入和使用的。用户可能因安全性或公司政策而没有开启或安装。
所以,制定一个导航系统可以放置的良好位置是必须的,例如放在一个显眼可见的地方。一个好的导航功能,只要网页载入就出现,而不需要鼠标再向下滚动。这是为什么页面要保持干净和简单的重要作用,一个复杂且非常规的设计可能会让用户困惑。
哪怕只有一瞬间,用户也必定不会纳闷:“网站导航在哪里?”
最后,对网站建立阶层结构,多层次的管理。确保它在父层与子层之间易于导航。此外,不管在哪一个网页当中,也应该能很容易到达最高层的页面(例如网站首页)。
最主要的目标就是你的网站导航,尽可能减少操作(动作),努力而让用户到达他想要浏览的内容。
4. 明智和有条理地使用字体
虽然有成千上万的字体,但你真的能用的只是一小部分(至少要等到主要的浏览器完全支持CSS3)。 所以坚持使用网页安全字体。如果你不喜欢网页安全字体,可以考虑利用sIFR或Cufon逐步增强的网页设计。
保持字体的一致性,确认标题和段落的内容看起来有所不同。使用空白、调整行高、字体大小和字母间距属性,使用户轻松愉快地阅读和扫描内容。
也许一个网页设计师常常犯的错误就是使用不对的字体大小。因为我们想尽可能的将内容都塞在一个网页中呈现,所以我们有时设置字体大小而让用户感觉到不舒服。如果可能的话,尽量保持字体大小12像素以上,特别是对段落内容。虽然很多没有遇到因为字体太小而造成阅读上的困难,但是想想老人家、近视眼和其他类似视觉障碍的族群吧。
5. 理解色彩无障碍性
说完字体后,我们还需要指出使用正确颜色的重要性。例如,黑色文字在白色背景,如果使用高对比度,橙色背景上的红色文字会令你的眼睛感到紧张。
此外,使用一些对特殊形式色盲的用户友好的颜色(检查工具名为Vischeck,可以测试某些类型的色盲)。
有些色彩组合只适合运用在前景色的部分,而不适合做背景色。举个例子来说,深蓝色的文字搭配粉红色的背景与粉红色的文字搭配深蓝色的背景,都是使用两种一样的颜色,但用在不同的部分则影响了它的可读性和阅读的舒适度。重要的是,不仅要使用良好的色彩组合,而且要把它用在页面中的合适元素上。
6. 知道如何编写代码
随著各种所见即所得的网页编辑器充斥市场,网页设计已经成为简单的1-2-3步骤就能设计好一个网站。然而,大多数网页编辑器掺杂了不必要的代码,使你的HTML结构设计不当,难以维护和更新,导致网页膨胀。
通过自己编写的网页代码,能得到简洁的代码,能够愉快方便地阅读和维护。你可以自豪地说是自己写出来的代码。但知道如何使用所见即所得的IDE或预览功能并不会妨碍学习 HTML和CSS。你要知道发生了什么事情,才能创造有效并高度优化的网页设计。
7. 不要忘记搜索引擎优化
在设计网站时,一个好的网页设计师应该永远牢记基本的SEO概念。例如,网页内容结构、用文字表示标题(即网页的标题和标志)。此时,以前学习的如何合理编码的能力就派上用场。认识正确、语义和基于标准的HTML/CSS 后,你会很快认识到Div比表格布局好得多,不仅更为准确地展现内容,而且对搜索引擎排名也有帮助。另外,知道用CSS更换背景、文字和图片也是一个好主意。
8. 理解人是没有耐性的
普通人用几秒钟就决定是否要阅读更多网页内容或到另一个网站。因此,作为一个网页设计师,要有个好方法,能在这珍贵的几秒钟鼓励用户选择前者(看更多内容)。
要知道,如果用户在网页头部看不到感兴趣的内容,没有多少人会向下滚动,去查看整个网页的内容。所以,在网页头部很容易看到的地方放置网站上的重要元素,但也不要过度拥挤在上半部分网页,否则会吓到用户,而不会往下继续看内容。记住上半部分网页设计的卖点:视其为推销员,使人们有购买想法,即他们想在你的网站上看到什么。
9. 了解(并意识到)浏览器的兼容性
当一个网页设计师必须要知道的一件事,就是你的工作环境(浏览器)是挑剔和难以预料的。如果你的网页设计只能运行在的几种网页浏览器,那是不够的,你需要尽可能多浏览器下测试。这里有一款工具Browsershots,可以测试浏览器兼容性。
10. 使设计有灵活性和可维护性
一个好的网页设计师可以确保以后可以很容易更新或修改网站。设计一个有可塑性、易于维护的网站,是一个伟大网页设计师的标志。让你的工作尽可能从结构化转向模块化。
网页设计这个行业是动态的,而且还很“年轻”。事情往往在短暂中变化。牢记这种思想,将推动建立更加灵活的网页设计。
Android SDK开发环境Eclipse安装搭建笔记
参考自《Android开发入门与实战》,根据最新版本Android2.1不同设置而修改,在Windows下搭建。
1)安装Java JDK
见:http://www.pugwoo.com/2010/01/28/jdk-install.html
2)安装Eclipse
到eclipse官方主页,下载"Eclipse IDE for Java Developers (92 MB)",得到eclipse-java-galileo-SR1-win32.zip,解压它,比如放在D:\eclipse,运行该文件夹下的"eclipse.exe",初次运行要设置一下存放程序的目录,如D:\eclipse_workplace。
3)安装Android SDK
到Android主页,下载,得到一压缩包。解压到某一目录,如D:\android_sdk。然后右键点击"我的电脑","属性"|"高级"|"环境变量",在系统变量的path变量前加上 D:\android_sdk\tools; 新版的SDK还需要手动下载Platform,运行D:\android_sdk下SDK Setup.exe。如果它提示https不可用,则必须到settings里把"Force https...http:"这一项勾上。然后选择左边"Avaliable Packages",再选择一个SDK Platform,如"SDK Platform Android 2.1,API 7,revision 1",安装。
4)创建AVD(Android Virtual Device)
AVD就是电脑里虚拟的Android手机。新版SDK需手动添加AVD,进入SDK目录,如D:\android_sdk,运行SDK Setup.exe,点击左边栏"Virtual Devices",右边点"New",弹出创建对话框,给这个SVD随便取个Name,比如手机型号Hero,然后设置Target为某个Android版本,SD Card为虚拟的SVD的SD卡容量,再设置分辨率,如320*480,然后在Hardware添加这台AVD需要的特殊设备,如键盘KeyBoard等,最后点下面"Create AVD"完成。
5)安装ADT(Android Development Tools)
不同Eclipse版本对此设置可能不同。运行Eclipse,"Help"|"Install New Software",在Work with处填入"Android - http://dl-ssl.google.com/Android/eclipse/",然后下面会出现"Android DDMS"和"Android Development Tools",勾上,一直next,accept,完成。接着就等它自动下载安装了,这过程很久,如果出现什么是否继续安装对话框,点继续。安装完成后重启Eclipse。
6)设置Android SDK位置
运行Eclipse,菜单栏"Window"|"Preferences",左边栏点击"Android",右边SDK Location填上上面第3)步SDK位置,如D:\android_sdk,点Apply,选择一个Platform,完成。
7)设置Eclipse中ADV
运行Eclipse,菜单栏"Run"|"Run Configurations",选择Android Application,选择一个configuration,右侧选择"Target",再选择一个AVD即可。
8)Hello World
运行Eclipse,菜单栏"File"|"New"|"Project",选择"Android"|"Android Project",设置如下图:

如果建立此项目后Eclipse没有列出此项目,这是因为没有设置其显示,在菜单栏"Window"|"Show View"里选择如Package Explorer等。
然后左侧的Package Explorer里右键刚刚建立的项目TestDemo,选择最后一个"Properties",再选择"Run/Debug Settings",在右侧"New"添加"Android JUnit Test",在弹出的设置里,选择标签"Target",再选择一个AVD,完成。
最后,左侧的Package Explorer里右键点击项目TestDemo,选择"Run As"|"Android Application"。看到一台虚拟的Android手机启动就成功啦。

