Javascript程序员也可以开发iOS原生应用
2012-03-19

    主要方向是前端的我曾经也想过学学iOS的Object-C或者Android的Java。但是写习惯Javascript这种弱类型的脚本语言,突然去写严谨的C和繁琐的Java变成一件很煎熬的事情。所以这个学习过程就逐渐被搁浅了。

    HTML5在移动设备上的普及使得前端程序员开心了。自己的网站稍微改改,使之能够适应移动设备上较小的屏幕,然后再加上几个meta信息,就可以通过iOS上Safari的“添加至主屏幕”功能在桌面上添加一个叫做"Home screen app"的App了。这比学习Object-C => 用XCode开发app => 提交到app store => 等待苹果通过 => 从app store下载应用 这个漫长的过程要来的简单许许多多。而且完全不用看苹果的脸色。我认为这种方式在以后将会越来越流行。

    但是HTML5创建的Home screen app有几个不足之处:

  • 无法调用很多系统资源 (虽然现在某些接口可以提供地理位置调用,重力传感器信息调用,但比起原生程序来说还是太少了)
  • 无法控制设备旋转,所以必须要让网站适合设备竖看和横看
  • 虽然HTML5可以实现离线浏览,但是操作起来比较复杂
  • 无法通过app store来推广

    我认为HTML和Javascript这些技术在未来很长一段时间里面都是很主流的语言,而且应该会得到越来越多的应用(btw,很期待webOS发展壮大啊)。所以国外很多公司就瞄准了这块市场,纷纷开发出使用Javascript技术来写Native App的解决方案。其中比较流行的有PhonegapTitanium

    Phonegap是提供一个webview(浏览器界面),使得你可以在里面载入自己的HTML文件,执行JS程序等。然后Phonegap提供比Safari更多的接口,让你可以调用更多的系统资源。这样,Phonegap就有非常优秀的跨平台性。但是由于界面是用HTML绘制的,所以运行效率上会稍微差点(我本人无法接受)。我就不多讲了,因为我也没仔细研究过。

    而Titanium声称的Native,指的是用Javascript调用接口来生成原生的界面。程序具体的运行逻辑还是使用Javascript来实现。因为有太多的Native things,所以Titanium的某些接口只能在iOS上用,另外有一些只能在Android上用。有点违背“write once, run anywhere"的思想。不过如果写好一个平台的app,再迁移到其他平台还是比较容易的。

    我本人比较认同Titanium的思路。界面用Object-C调用系统UI来创建,保证了界面的流畅程度。我在iPhone上安装了Titanium的Kichensink (Titanium的各种接口演示程序) 。其流畅程度的确跟Object-C开发出来的程序在一个等级上。各种动画十分流畅。然后其他部分用我们熟悉的Javascript来实现。官方提供的接口足以满足绝大部分需求(当然开发大型的游戏是比较不现实的)。

    我尝试的第一个应用是做一个匿名随机聊天的app(对,EndTalk的iOS客户端)。界面用的是类似iOS上短信对话框的界面。然后通过Socket.IO与服务端的NodeJS通信。支持文字与图片。 这个需求对一个Object-C程序员来说还是挺多工作量的,但是在Titanium的帮助下,我用了一个晚上了解Titanium,另一个晚上来写app。就已经实现了主要功能。而且在真机和模拟器之间测试通过。

    另外,虽然用TItanium来绘制界面是件挺简单的事情。但是要绘制一些复杂一点的界面就有点力不从心了。不过还好Titanium推出了一个Marketplace,允许Object-C开发者为Titanium开发各种模块,提供给Javascript来调用。比如我用的那个短信界面就是一个免费的模块。哈哈,这样就可以跟其他Object-C开发者合作,开发一些应用了。大部分事情用Javascript来做,JS做不了的,就开发一个Object-C写的模块,JS调用就是了。

    虽然以前那种随便开发个app就可以在app store上赚很多钱的时代已经过去。但是越来越多的iOS客户端需求仍然得不到满足,所以目前Object-C开发者的工资都很高,很高。但是绝大部分的各种客户端都可以使用Titanium来做。比如微博客户端、B2C网站客户端、淘宝客户端、聊天软件客户端、电子图书、电子阅读器等等。

    所以,前端开发者们也可以很快速的入手iOS App开发,而且开发效率绝对比Object-C开发者快! 人力成本降低,在当前的市场中会很有竞争力。

    Javascript的应用环境其实非常多。稍微列举一下吧:网页、WebOS App、Titanium开发、Asp.NET中的JScript也算是吧、Windows的JScript脚本、Mac的Dashboard Widget、Windows的桌面小工具、最重要的:服务端的NodeJS! 欢迎补充。

完。

17872 read 8 comment(s)
译:怎样在Elance上赢得任何项目
2012-03-19

 

作为在Interspire雇佣了超过30位员工的雇主,大多数我需要帮助的时候,我只需在我的办公室打个电话,我的雇员就会帮我处理好一切。但是有时候我需要找一些有工作经验的人来做一些一次性的工作,比如写一篇用户手册,或者把产品介绍视频做成flash。这时候,我就会去Elance, Odesk或者Guru.com。

当我将工作信息发布到这些网站后,没过几个小时,我就开始收到反馈信息。但是我发现95%的Candidates不知道怎样写Proposal。一般,他们会像这样写:

  1. 从以前项目的proposal直接复制粘贴过来
  2. 没有明确的表达,而且没有把他们自己推销给我的意思

5年前作为一名自由职业者和现在作为雇主的经验,使我明白了怎样才能写一篇更好的proposal。我想我有必要写这篇文章来指点大家如何才能100%赢得任何你投过标的项目。(译者:貌似有点夸张吧,教大家如何写出更好的poposal还差不多)

这个项目对我和雇主来说有什么好处

投标的时候,你必须想一切办法来推销自己。说清楚自己的长处和雇佣你对雇主的好处。以下是一些好方法:

  1. 曾经为大公司工作过,例如微软和eBay
  2. 会全身心地投入项目,并且十分注重细节
  3. 如果雇主对结果不满意,保证100%退款
  4. 快速的提交时间

假设我是一名自由职业者,我想要投一个写技术文章的项目。首先我提到我曾经受雇于微软和eBay。雇主就可能会这么想:“哇,这个屌丝曾经为微软和eBay写过文章,看起来还是挺给力的。嗯,往下看看。”

然后,你告诉我你工作十分努力,并且对你的工作十分自信。并且你还给了我100%退款保证。这让我打消了所有的顾虑。

最后,你保证快速的提交时间。这是我非常喜欢的,因为我还有其他事情要做,不可能花很多时间来管理你的工作进度。

你的标题是不是足够吸引我

当我发布了一个工作信息后,99%的回复标题会长的像这样“Re: Technical writer position”, 如果我的邮箱有85封未读邮件,这样的标题必定不会吸引我的注意。

邮件标题要有创意,才能吸引我的注意。以下有一些好的例子:

  1. “You will NOT find a better technical writer than me. Guaranteed.”
  2. “Delete your post on eLance – read my resume to find out why”
  3. “I’ve worked with 2 of your closest competitors”
  4. “I am an expert at using your product and can write your user guide with my eyes closed.”

(译者:这个就不用翻译了吧。不过貌似在Elance上投标的时候,是不用填写标题的。)

你是真人吗? 

如果你知道多少candidates不会在proposal里面写上他们的联系方式的话,你绝对会震惊。你的联系方式不应该只有Email和IM,仅仅因为你在家工作。

雇主一般会喜欢你是“真实”的人,所以最好试下在你的proposal里面写上:

“I’m located in Los Angeles, California, and am able to begin working on your job right away. Please feel free to call me on 555 0199 to discuss the project any time. I look forward to hearing from you.”

(译者:但是作为国内接国外的项目,留电话貌似不太现实。所以译者建议还是写上自己的家乡,留个skype就差不多了。)

雇主一般都喜欢跟你用email交流,但是给雇主提供更多的通讯方式会起到一些加分效果。因为有很多海外的freelancer假装自己来自北美。

(译者:Elance上经常有程序自动投标的情况出现,所有有些项目会在描述种写上一些特别的要求来区别程序自动投标和真人投标。所以仔细阅读项目描述是十分重要的。)

我希望上面的3点建议能为你以后的proposal提供一些帮助。

原文链接:How to Win Any Job on eLance, oDesk or Guru.com
原文作者:Mitchell Harper (未经验证)
翻译:Longbill ( http://php.js.cn )

BTW,欢迎加入Elance QQ群:162095216

完。

14472 read 3 comment(s)
电信ADSL宽带对路由器人为限速
2011-10-01

    最近住朋友家,他们家是电信4M ADSL,然后接的TP-Link的路由器。白天上网都没问题,一到高峰期的时候就慢的要死,开始还以为是路由器的问题。后来换了个路由器,还是慢。。。

    今天对这个情况进行了仔细的分析。网速慢的情况只是连接路由器后才发生,如果用电脑直接连modem拨号,就正常。于是我在不用路由器的情况下,记录了到61.139.2.69的ping值,只有2ms。然后连上路由器,再次ping 61.139.2.69,时间增加到400多ms。 但是这个情况有可能是路由器那里卡了,于是我又ping了到电信网关,发现时间只有2ms。说明从我电脑经由路由器到电信网关的通路是正常的,没有特别大的延迟。那么问题就只能出在电信机房那边了。估计是发现我用路由器,故意丢包或者故意降低带宽。

    问题找到后,先打了10000号投诉。客服MM接到电话后,我先问电信是不是有不准用路由器的政策,回答没有。于是直接表明身份,我是专业人员,发现电信违规操作。于是客服MM没有跟我瞎扯,直接反应问题到后台了。现在就等明天电信的技术人员回复了。  

    如果通过10000号投诉的途径解决不了,我就到工信部投诉。以前投诉过一次,效果非常好。工信部投诉网址如下:http://www.chinatcc.gov.cn/html/mains/shensushl.html

完。

22626 read 24 comment(s)
我才知道的几个Javascript小知识点
2011-09-02

    因为我学习Javascript的过程比较零散,没有仔细系统的看过。有些细节方面就被遗漏了。下面是我最近才搞清楚的几个函数。如果你此前就知道,那么恭喜你,你的JS比我好。如果也不清楚,那么也恭喜你,你看了此文就清楚了。

1. Array 的 slice方法

    slice(start,end)   此方法可从已有的数组中返回位于start和end之间的元素。并且不改变数组本身。start和end参数可以为负数,表示从后面开始数的第几个。

    例如: [1,2,3,4].slice(2,3) 返回[3] , [1,2,3,4].slice(2,-1) 也返回[3] 。

    另外,如果只写一个参数,那么第二个参数默认是数组的长度。也就是说 [1,2,3,4].slice(-2) 返回 [3,4]

2. Array 的 splice 方法

    splice(start,length) 此方法返回现有数组的从start开始的length个元素。并且会改变数组本身。start参数可以为负数。

    例如: var a = [1,2,3,4]; a.splice(2,2) 返回[3,4] ,并且a变成了[1,2] 

    另外,splice还支持第3,4,5...个参数,表示用后面的参数替换掉被删除的元素。

3. String 的 substr 方法

    substr(start,length) 此方法返回字符串从start开始的length个字符。不改变字符串本身。start参数可以为负数。

    例如: "abcd".substr(2,1) 返回 'c',"abcd".substr(-2) 返回 "cd"

4. String 的 substring 方法

    substring(start,end) 此方法返回字符串的start到end之间的字符。不改变字符串本身。start和end参数不能为负数!但是start可以比end小。

    例如:"abcd",substring(1,3) 和 "abcd".substring(3,1) 都返回 "bc"

表格对比

  参数 参数是否支持负数 是否改变对象本身
Array.slice (start,end) Yes No
Array.splice (start,length) Yes Yes
String.substr (start,length) Yes No
String.substring (start,end) No No

 

    此外,删除对象的某个属性用delete 操作符。

    例如: var o = {"a":1,"b":2}; delete o.a; 那么o就变成 {"b":2}

    但是如果要删除数组的某个元素,就要用上面提到的splice方法了。

    例如: var a = [1,2,3,4]; delete a[1]; 那么a就变成[1,undefined,3,4],并且a.length还是4。 必须要用a.splice(1,1)。

    还有Array.pop, Array.shift, Array.push, Array.unshift等常用方法就不说了。

完。

13499 read 10 comment(s)
Elance新手入门
2011-07-14

    Elance是全球最大的外包网站。给我的印象是门槛高,服务好,项目多,项目质量好。比起国内的猪八戒之类的网站好不知多少倍。如果你是程序员、翻译、设计师等,同时英文又好,那一定要到Elance上来接项目,这样才能充分体现你的优势嘛。因为Elance是个国际平台,上面的价格是国际价格,换算成人民币怎么都划算啊。

注册

    Elance的注册是需要验证电话号码的。注册完了之后,Elance的机器人会打电话过来,叫你把网页上的数字用英文念出来。通过验证之后就算注册成功了。可以开始接项目了。PS. 因为Elance涉及到钱,所以对帐号保护比较严,一定要记得你的密保答案啊,因为下次你换个地方登陆,它就会让你输入答案了。。。

包装自己

    新手要顺利接到项目比较难,因为没有历史项目经历和别人给的评分。所以要靠自己profile上的自我简介,profilio和skill tests等来打动客户了。其中比较特别的是skill tests。Elance使用了第三方测试平台来衡量测试者的各种技能。在Elance网站上选择想要测试的技能,比如PHP5 Code Test,然后会进入一个第三方测试网站。一般选择类题目是40题,时间是40分钟。PHP5 Code Test属于代码实践题,需要测试者根据题目提供一段PHP程序,然后后台执行这段程序看看是否正确。

    测试的结果是按你在测试者中占的百分比来的,而且貌似只有top 1%,5%,10%,20%,30%(上次我做了个JS测试的top 2%,结果给我显示5%,冤屈啊。。。),其他的就用图形来显示你的测试成绩和平均测试成绩。免费会员可以选择5个测试成绩显示在自己的profile上。如果升级成付费会员则可以显示更多的成绩。如果某个测试你觉得不满意,没关系,14天之后可以再次做这个测试(题目大部分都一样的哦)。这些成绩是很有说服力的。比如你刚注册,但是在Javascript测试中获得了top 5%的成绩,那么你在投标的时候就可以说 “我刚来Elance,但是我在前端方面有 X年的经验,不信你去看我的profile,我在Javascript测试中排前5%哦。”。然后报价再稍微比别人低一点,获得项目的机会就会大很多。

项目流程

    Elance的项目主要分为固定价格的项目和按小时计费的项目。先说说fixed price project。

    首先在网站上搜索自己感兴趣又力所能及的项目。 然后就是投标了。

    投一个$500以下的项目需要1个Connect(Elance上的一种点数吧),$500-$1000的项目需要2个Connect ... $2000以上的貌似都是5个Connect。而且这个点数是不退的,也就是说对方发个项目,你去投,然后对方没选中你,甚至对方把项目关了,你都会一样损失这些点数。免费会员每月是10个点。我是每月$10的付费会员,每月有20点。这种点数的规则就限制了像猪八戒上那些胡乱杀价的人,所以Elance上看到的基本上都是正儿八经的人报的合理价格。

    然后投标内容一般用正式的英文书信格式,例如:

Hi Alex,

I am very interested in your project. I ....

Regards,
Chunlong

    而且内容一定要根据对方的项目需求来写。切记写一个模板到处去投标。比如对方想做个图片编辑器,你就应该说你以前做过类似的东西,然后把demo地址贴上去。这样对方会很感兴趣的。

    这段时间有可能对方会跟你来回通信几次,一旦他确定给你做,就会把项目award给你,然后你在elance后台就会看到这个项目,里面有各种设置和功能。一般项目award给你之后,对方就会把项目款打到Elance,如果没打,你可以等对方打了钱再开始做。这种第三方担保类似支付宝,需要双方同意钱才能转移。此时,你就可以跟对方交流任何内容,比如Skype帐号(上面的人大部分都用Skype,因为必要时候可以视频通话)。

    项目后台最常用的是message功能,可以收发消息,还可以带附件,每个消息还会forward到你的邮箱,甚至你可以用邮箱直接回复。另外还有一个是status reports,项目开始后记得用这个来向对方报告项目进度。Terms & Milestones是一个必须双方都同意的协议,里面涉及到项目的里程碑(可以在里程碑上协定支付部分项目款),项目截止日期,项目总价等。每个修改都需要双方同意之后才会生效。

    当项目结束后,如果对方确认了你的成果。那么就可以把status reports里面设置为completed。并且提醒对方放款。

    对于按小时付费的项目,大部分流程都是一样的。但是投标的时候的金额是每小时多少钱而不是项目总共多少钱。然后开始做之后,需要你下载一个Elance的Tracker软件(是一个Adobe AIR软件)。这个软件可以记录你的项目时间和屏幕截图。开始做项目的时候,进这个软件点击开始。然后就老老实实做这个项目,因为这个软件会不定期截屏上传的!万一被看到你在玩,那是有损声誉的事情啊。

    项目做完了就是提款,具体可以看我的《从Elance提现到国内银行的完美方法

欢迎加入Elance QQ群: 162095216

完。

62373 read 26 comment(s)
Copyright © Longbill 2008-2024 , Designed by EndTo , Powered by EndCMS