刘春龙的博客 刘春龙的博客,大量原创技术文章。关注 PHP,Javascript 等技术。 http://php.js.cn/ zh_CN 2024-04-27 18:21:09 2024-04-27 17:21:09 EndCMS RSS Generator 5 <![CDATA[i9 13900k Nvidia 4090 安装esxi遇到的问题]]> http://php.js.cn/blog/i9-13900k-nvidia-rtx4090-asus-esxi8/ 我配了台电脑,主板是华硕z790,cpu是i9 13900k,显卡是 nvidia 4090。  底层系统我打算装esxi8,过程中遇到很多坑,在这里记录一下。

 

首先是esxi8不支持intel 13代cpu的大小核心。需要在启动esxi安装程序的时候按shift+o,添加参数:cpuUniformityHardCheckPanic=FALSE

然后又遇到问题是esxi不认识板载网卡(Realtek RTL8125 2.5GbE)。解决办法是买一张intel i226的pcie网卡。(点这里可以查看esxi8的硬件支持情况

然后就能顺利安装esxi8了。 然后在esxi里面安装ubuntu22, 遇到了4090显卡无法直通的问题。  试了很多办法都不行。 后来我又装了一个windows 11虚拟机, 尝试把网卡直通给win11。  最后通过调整bios的显卡设置(本来是auto, 改成pcie才可以),成功把4090显卡直通给了win11。 

最后又通过一些尝试才成功把显卡直通给ubuntu22。以下是一些关键步骤:

 

  • 首先在esxi后台的 主机->管理->硬件->PCI设备   里面,找到显卡设备选中,然后点击切换直通来打开直通开关。
  • ubuntu虚拟机设置里面,添加高级参数:
    hypervisor.cpuid.v0=FALSE         
    pciPassthru.use64bitMMIO=TRUE   
    pciPassthru.64bitMMIOSizeGB=64
  • ubuntu虚拟机预留全部内存
  • /etc/modprobe.d/blacklist-nvidia-nouveau.conf 文件添加:
    blacklist nouveau
    options nouveau modeset=0
  • /etc/modprobe.d/nvidia.conf 文件添加:
    options nvidia NVreg_OpenRmEnableUnsupportedGpus=1
  • sudo update-initramfs -u
  • 下载对应的nvidia驱动
  • sudo chmod u+x NVIDIA-Linux-x86_64-525.89.02.run
  • sudo apt install build-essential
  • sudo apt install pkg-config libglvnd-dev
  • sudo ./NVIDIA-Linux-x86_64-525.89.02.run -m=kernel-open
  • 然后运行nvidia-smi就能看到显卡信息了

 

一些参考资料:


3条评论     到PHP.JS.CN上围观原文 ]]>
2023-03-08 23:52:28
<![CDATA[iOS Web APP的滚动部分]]> http://php.js.cn/blog/ios-safari-overflow-scroll/ 在iOS系统里面,任意webview在可滚动状态下,都是可以拖超出边界然后反弹回来的。这个效果非常的好看和实用。但是如果我要做一个web app,我就不希望我的整个app界面也被用户拖动。

在很久以前,iOS的浏览器是不支持overflow scroll的,也就是说除了整个网页可以滚动以外,其他部分是不能局部滚动的。要实现局部滚动,一般都是用iScroll等插件,用javascript来模拟滚动。这技术说起来容易做起来难,我看了无数个类似的东西,没有任何人能做到原生一样的滚动反弹效果。最接近原生效果的是我从某牛逼网站上8下来的代码:https://github.com/longbill/ScrollPane

后来iOS退出了iOS5,其中的浏览器支持了overflow scroll。在配合  -webkit-overflow-scrolling: touch; 的情况下滚动起来是比较理想的。但是唯一有一个弊端就是当局部滚动区域处于滚动边缘的时候(比如处于最上面),此时继续网下滚动手指,滚动操作不会体现在局部滚动区域,而是会作用于整个网页。这个在做web app的时候,是完全无法忍受的。做出来的效果跟把web app界面的头部和底部用position fixed固定是一样的。

所以,即使overflow scroll从iOS5起就被支持,但是用javascript模拟滚动的需求还是十分旺盛。其中很重要的一点就是滚动会传递到外面的网页。另外也很重要的一点就是原生的滚动很难实现类似pull to refresh的操作。

后来我打算将我的精选文章做成web app的形式。尝试了无数的scroll插件,都让人失望。被逼无奈仔细研究了一下原生的overflow scroll。再后来被我找到了一个奇怪的方法,来阻止滚动操作传递到整个网页。

就是。

在手指放在屏幕上的时候,判断里面的滚动部分的 scrollTop 是不是 0 或者 最底下。如果是,那么将 scrollTop 轻轻位移1个像素。就可以了。

另外,我还实现了一个pull to refresh,虽然效果跟原生的不太一样,但是看起来也还不错。

代码我空了会整理写文档然后放到github上。大家可以先看这个 demo。 暂时只支持iOS系统。安卓请忽略。

http://jszen.com/public/demo/ptr/index.html


11条评论     到PHP.JS.CN上围观原文 ]]>
2014-08-08 01:58:31
<![CDATA[最近做了个海拔高度查询网站]]> http://php.js.cn/blog/how-to-look-up-elevation/         最近经常出去自驾游,往川西的高原跑。经常会遇到一个问题就是不知道当前的海拔高度。正好我最近又在学习做站。索性就弄了一个专业查询海拔的网站:海拔高度查询工具  利用Google的API来获取相关信息。不过由于最近天杀的GFW把google全部服务给墙掉了。只能用ditu.google.cn的服务。但是仍然有一些请求走的是maps.googleapis.com,于是搞了个hack,把所有maps.googleapis.com的域名换成ditu.google.cn。还好,大部分都能用。

        最近又做了英文版本的海拔高度查询日出日落时间查询

还是上两张图吧。在红原县附近拍的。


3条评论     到PHP.JS.CN上围观原文 ]]>
2014-08-08 01:19:09
<![CDATA[怎样设计密码重设功能]]> http://php.js.cn/blog/how-to-design-password-reset/ 当我们设计一个带有用户注册/登录功能的网站的时候,一个必须的功能就是重设密码。 重设密码功能有很多种设计方式,比如发送一个新密码到用户邮箱等。不过今天我要介绍一个我经常用实现方式。

用户流程:

  1. 用户忘记密码,来到密码重设界面
  2. 用户输入Email地址,点击重设密码按钮
  3. 用户收到一封密码重设邮件,里面有重设密码的链接,此链接有过期时间
  4. 用户点击链接,来到密码重设页面,输入新密码,完成

这个流程并没有什么创新,很多网站都是用这套流程

后端实现方式:

  1. 当用户输入Email地址后,验证这个Email,如果存在于数据库,那么取得用户的user_id
  2. 将user_id和当前时间戳编码成HASH,需要提前准备好一个KEY,并且这个KEY只存在服务器上。  HASH = md5 ( user_id + timestamp + KEY )
  3. 生成一个URL,并且附带刚刚生成的HASH和用户id以及timestamp,比如 http://domain.com/reset-password.php?hash=HASH&user_id=123&timestamp=1392121211
  4. 当用户访问这个URL, 检查HASH是否合法: HASH == MD5 ( user_id + timestamp + KEY)
  5. 检查 timestamp 是不是过期了
  6. 如果所有检查通过,那么显示一个新密码表单给用户

这种方式的好处:

  1. 不需要额外的数据表
  2. 不用担心参数被用户恶意修改,因为要检查hash是不是等于那几个参数的md5
  3. 密码重设URL自带时间戳
  4. 只要KEY设置的足够长足够复杂,那么可以认为HASH是绝对安全的

更详细的样例代码可以参考这里:http://jszen.com/reset-password-system.6.html


5条评论     到PHP.JS.CN上围观原文 ]]>
2013-10-01 14:50:32
<![CDATA[最方便的纯文本编辑器Mac Only]]> http://php.js.cn/blog/plain-text-widget-mac/     Mac操作系统里面有个好用的东西叫做Dashboard,Windows的桌面小工具就是抄的Dashboard。   Dashboard里面的Widget都是用网页技术做的(HTML, Javascript 等),Dashboard仅仅是提供一个透明的window来显示widget的网页而已。

    Mac操作系统自带的Widgets里面就有一个叫做“便签”的东西,可以实现类似记事本的功能,但是记录的文本有限,不能超过便签窗口的大小,实际使用起来十分蛋疼。

    我这个小东西的特点是这样的:

  • 提供一个白底黑字的文本框显示在dashboard界面
  • 文本框使用textarea控件,里面的文字保证没有任何格式
  • 理论上可以在里面输入无限制长度的字符
  • 关闭dashboard界面的时候,文本框里面的文字内容自动保存到硬盘
  • 窗口大小可以自由调节
  • 支持添加多个窗口到dashboard

 

    下载: here    源代码:Github page


3条评论     到PHP.JS.CN上围观原文 ]]>
2013-07-25 17:40:35
<![CDATA[原创jQuery插件: Date Range Picker]]> http://php.js.cn/blog/jquery-date-range-picker-plugin/ 某些时候,我们需要用户输入一个日期范围,比较直观的想法是用两个date picker控件。但是两个date picker给用户带来的体验并不好。于是我搞了个jQuery插件,可以实现在一个界面里面选择日期范围,并且将选择的值输出到一个input框中。

  • 依赖 jQuery 1.3+, Moment 2.0.0+
  • 支持 IE6+, Firefox, Chrome, Safari 等浏览器
  • 支持多语言
  • 界面完全CSS可控

文档以及代码见我的英文博客:http://jszen.com/jquery-date-range-picker-plugin.4.html

下载:https://github.com/longbill/jquery-date-range-picker


4条评论     到PHP.JS.CN上围观原文 ]]>
2013-07-23 23:29:48
<![CDATA[关于电池容量你应该知道的]]> http://php.js.cn/blog/battery-capacity-in-mah-whr/     直到今天才发现一个惊人的事情:iPad3的电池容量是11666mAh,而macbook pro的电池容量才5000多mAh。为什么iPad3那么小的体积内可以装下比mbp更多的电池容量呢?难道采用了什么新的科技?

    于是google了下,又发现一个惊人的事情:一般电池上标的容量单位是mAh,但是学过物理的都知道,电流乘以时间不是一个能量单位,还少了一个电压。相信跟我一样到现在才发现这个问题的同学还有很多,那么我就普及下高中物理知识:

  • 电流单位A(安培),  1000mA = 1A
  • 电压单位V(福特)
  • 功率单位W(瓦特)  
  • 能量单位J(焦耳),但是在电子产品的电池上很少用这个单位。一般用Whr(瓦时)表示能量。

 

  • 能量=功率x时间
  • 功率=电压x电流
  • 能量=电压x电流x时间

    综上,mAh并不是一个准确的表示电池容量的单位,它的出现应该同时标明电压(大部分手机等电子设备是固定的3.7V)。Whr是能量单位,可以表示电池的容量。

    所以,在比较电池容量的时候,请先确定电压是否一样。如果不一样,就要乘以各自的电压转换成Whr再比较。

    所以,mbp的电池上标明容量是60Whr,电压大约10.95V(算得mAh表示法大约5480mAh)。而iPad3的11666mAh大约工作在3.7V的电压下,算得大约43Whr。所以iPad3的电池是没有比mbp电池容量大的。


5条评论     到PHP.JS.CN上围观原文 ]]>
2013-01-29 01:44:07
<![CDATA[记一次海淘经历]]> http://php.js.cn/blog/hollister/ 很喜欢hollister这个牌子,但是国内貌似只有深圳上海北京有店。这马上就要回成都了,买不到了。于是就去他们官方网站看看。

国内IP访问他们网站会被强制跳转到香港站。衣服的价格是港币,标价跟深圳的店差不多。对比起来网购没什么优势啊,就一个港币汇率8折。于是放大招,通过IP位于日本的代理再次访问他们网站。哇,出来了。美元标价换算成人民币相当于只要六七折啊,而且这圣诞新年打折更便宜啊。在深圳店里面1600不打折的羽绒服,美元只要139刀啊。接近5折了!而且美国版网站跟香港版网站同样支持送货到国内地址的。 

于是选购了两百多刀的各种东西,给了20刀的邮费,感觉就算完事了,坐等收货。看来还是想太简单了。没过几天,fedex给我电话说让我报税。还非得按invoice上的价格来报,20%的税率。折腾了几次打印扫描后总算也把入关手续弄好了。交了310人民币的税。 从美国发货到我收到货大概七八天吧。现在算来,加上邮费加上缴税,还是比实体店便宜不少,甚至比香港人通过网站买还便宜不少。。。

衣服貌似有些是越南产的,有些是中国产的。自己地方产的东西到美国去走一圈,价值就翻了那么多。更可恶的是他们还歧视中国人啊,默认访问的香港版网站卖的价格还更贵。

PS. 喜欢这个牌子是因为无意间逛到了深圳的实体店,店内很有风格,服务员都是帅哥美女尤其是那个收银的小妹。。。。服务员还满口英语,感觉很洋盘的样子。还有店的味道很不错。总的说来就是一次很愉快的经历。让我第一次觉得逛街其实也可以很享受嘛。 

另外,不知道有没有什么办法可以免去这个关税。知道的同学支个招呗。


2条评论     到PHP.JS.CN上围观原文 ]]>
2013-01-09 03:59:23
<![CDATA[前端开发必备神器]]> http://php.js.cn/blog/front-end-developing-tools/     记得很久很久以前,主流还是IE6。开发前端页面的时候,修改一行CSS或者JS,就要回到浏览器刷新看下效果。调试Javascript更是只能用alert来判断是哪行代码出问题了。那个时候,Javascript还有个竞争对手叫VBScript,声明script标签的时候还建议声明language="javascript"。那个时候网页脚本还被认为是仅仅能给网页增加一些跑马灯等的特效而存在的。

    那都是05年的事了。现在前端的各种环境各种工具都迈入了一个崭新的时代。感谢Google推动了浏览器的发展,感谢W3C制定各种有用没用的标准,鄙视微软万恶的IE6。现在我们开发前端页面已经逐渐变得优雅/文艺了起来。这让我这个经历过当年艰苦岁月的前端er不禁感叹终于熬出头了。。。

    这里我像各位同学介绍下我长期使用的各种前端开发工具,主要是提升效率。欢迎补充留言。

Chrome developer tools

    不知道什么时候,Chrome developer tools强大到超过了Firebug,成为了我主要的debug工具。查看浏览器发起的所有请求、查看页面引用的js/css代码、查看/修改页面DOM结构、在页面上修改css/js然后直接看到效果、Javascript Console等等各种基本功能都做到非常好用。强烈建议各位找找深入介绍Chrome developer tools的文章,相信有很多高级的功能很多同学都还没用过。

Sublime Text 2

    这是一个文本编辑器。也是不知道什么时候就强大到超过Textmate,成为我主要的编辑器。更重要的是,它居然是跨平台的。用Windows的同学有福了。

Zen Coding

    这是一个编辑器插件,支持各种编辑器。这里有篇介绍文章。这个插件的牛逼之处在于可以大大提高写HTML的效率。比如我要写一个html table。输入 table#list-table.table>tr.row*3>td.cell*3 然后按定义的Zen Cod ing快捷键,就会马上生成:

	<table id="list-table" class="table">
		<tr class="row">
			<td class="cell"></td>
			<td class="cell"></td>
			<td class="cell"></td>
		</tr>
		<tr class="row">
			<td class="cell"></td>
			<td class="cell"></td>
			<td class="cell"></td>
		</tr>
		<tr class="row">
			<td class="cell"></td>
			<td class="cell"></td>
			<td class="cell"></td>
		</tr>
	</table>

Twitter Bootstrap

    这是twitter发布的一套前端整体框架。也就是预先定义了很多css和一些Js代码。写页面的时候,按照规范写class,就可以实现用户体验很好的页面。这里是项目主页。现在很多很多网站都基于bootstrap来开发。的确可以为开发者节省很多宝贵的时间,更重要的是,这些页面元素都是twitter经过研究后,觉得是用户体验最好的设计。而且,基于bootstrap,页面还可以很轻松的做到mobile friendly。我的一个小项目就是基于bootstrap,实现了使用同一个页面,支持各种尺寸的浏览器。尤其在iOS浏览器上表现非常好。精选文章

Devtools Autosave

    这才是最牛逼的神器。项目地址在这里。这个东西实现了可以在Chrome developer tools里面修改css属性或者js代码,然后直接同步保存到本地或者服务器。比如以前我们先大概写好css,然后用firebug进行微调,调整好后,复制css代码,进入编辑器粘贴代码然后保存,然后刷新浏览器看效果。而现在,在Chrome devtools里面,修改的css可以自动保存了。而且不仅仅是css属性,还可以直接修改css源文件、javascript源文件。现在的开发方式可以简化到,先写好HTML骨架,定义好各个class名字,然后打开chrome devtools,在css源文件里面直接添加新的class。边写边可以看到效果哦。牛逼指数10颗星啊。

Markman

    马克鳗是一个Design to HTML神器。很多时候我们需要根据设计图片文件来开发成网页代码。这时需要精确测量各种距离、各种宽度、各种颜色。马克鳗可以优雅的完成这个任务。项目地址在这里。下面是我截的图:

Markman截图

    先写这么多吧。


11条评论     到PHP.JS.CN上围观原文 ]]>
2012-11-25 03:20:46
<![CDATA[Mac下为应用程序更换图标最简单的方法]]> http://php.js.cn/blog/how-to-change-application-icon-in-mac/     Mac OS系统里面的应用程序都是文件夹形式。只不过是内部有一定规则的文件夹而已。在应用程序上右键,选择查看包内容就可以查看应用程序里面的东西了。应用程序的图标文件也在里面。一般是一个.icns文件。替换这个文件,就可以更换app的图标。不过这个方法跟我要讲的方法闭起来弱爆了。首先不说找到那个.icns文件很麻烦,光是把图片转换成.icns格式就够折腾。

    其实Mac OS操作系统是很简单的。不就是换个图标么。复制粘贴就可以了!请看:

  1. 找到目标APP,比如迅雷:


     
  2. 到网上随便找个png图片,当然,要足够大。然后右键,复制图片。比如这只黑猫:


     
  3. 转到Finder,选中迅雷APP,然后按Command+I或者右键菜单里面选择“显示简介”也可以。 然后选中左上角红色按钮和黄色按钮下面的那个图标。选中之后图标边缘会变成蓝色:


     
  4. 点击Command+V粘贴。搞定!



     
  5. 如果想使用本地的图片文件来当icon。那可以先使用系统自带的“预览”工具打开该图片。然后全选(或者选择一部分也可以)。然后按Command+C复制。


     
  6. 然后就跟第四步一样Command+V粘贴:


     
  7. 其实不用复制粘贴,直接拖动网页上的图片到简介上的那个图标上也可以。不过要先组织下窗口位置:

 

    其实就是这么简单。


3条评论     到PHP.JS.CN上围观原文 ]]>
2012-10-20 01:10:07
<![CDATA[DSG顿挫抖动问题的解决办法]]> http://php.js.cn/blog/dsg/     我去年9月份入手了一台一汽大众高尔夫6 1.4TSI+DSG车子。今年3月份大众公司说可以升级DSG控制程序,于是我就去升级了。后来越开越觉得换挡不平顺,于是又去升级了一次DSG程序,但是问题更严重了。后来在网上看了好多人都遇到这个问题。 再后来我把车开到了深圳,在深圳这边的4s店问了下,告诉我需要重置DSG参数,然后用手动模式在高速上跑一下,让DSG程序重新学习车子的发动机性能。我这才明白原来我之前升级过DSG程序之后,都没有这么做过,DSG程序没学习好,所以出现了顿挫感。这也解释了为什么网上关于升级DSG程序后的各种不同评价,有的人说升级了感觉很好,有的人则觉得不如以前了。

    按4s技师说的,重置了DSG参数后,应该立即上高速,用手动模式在5档、6档让发动机在2000-4000转每隔500转停留至少10秒以上。也就是说挂5档,6档,让发动机转速在2000-2500,2500-3000,3000-3500,3500-4000这四个区间分别停留10秒以上。我的DSG经过这样的重新学习之后,顿挫抖动问题都得到了很大的缓解,驾驶起来平顺多了。不过还是比不上新车时候的感觉。网上说这很可能是因为离合片磨损造成的。

    不过7速DSG的问题确实很多人都遇到了。我成都一个朋友甚至还更换了DSG总成,还是问题依旧,最后不得不自己掏钱换了个6速湿式DSG。因为很多人投诉大众的DSG有设计缺陷,国家质监总局采取了一些行动:《国家质检总局缺陷产品管理中心向社会公开征集大众汽车DSG变速器相关故障信息》 希望遇到DSG问题的朋友都去投诉一下,好让大众公司尽快解决DSG问题。

 

2012年11月29日更新

    前不久去做保养,顺便跟客服提了下二档抖动的问题,故意夸大了一下。没想到过几天客服打电话给我说索赔成功,更换离合片。然后11月十几号的时候我去换了,搞了五六个小时。 换的时候我大概看了下,新离合片貌似是德国货。论坛里有同学说是新的离合片用新的材料制造,避免了高温变形的问题。现在开了半个月,感觉跟新车差不多,换挡很平顺。

    在去换离合片的当天,有个同学在这篇日志留言说抖动的解决办法:

DSG低速抖动有效处理方法:怠速时,首先右脚踩住刹车,挂D档,左脚加油门到三分之二处,保持1分钟;然后松开油门挂倒档,同样加油门三分之二处保持1分钟,同样方法,操作2一3次即可解决低速抖动问题;此方法让两个离合器重新磨合到最新控制状态,有效解决低速抖动问题。

    我在去换离合片之前特意试了下。果然有效唉!不过我估计开不了多久,还是会抖动,还需要这样做。所以,还是换离合片感觉好些。


11条评论     到PHP.JS.CN上围观原文 ]]>
2012-05-14 13:36:25
<![CDATA[苹果电脑升级操作系统教程]]> http://php.js.cn/blog/mac-os-x-upgrade-reinstall/  

首先要讲一下Mac操作系统跟windows操作系统的不同,以及一些基本知识:

引导程序

苹果电脑采用EFI来引导系统,而不是BIOS。EFI比BIOS简单好用的多。EFI支持从U盘、外置硬盘、光盘、硬盘的某个分区启动。选择用那种方式启动只需开机的时候按住alt(option)键不放就可以了。

安装盘

Mac系统的安装盘可以在网上下载,一般是dmg格式。dmg是mac的压缩打包格式,类似于iso格式。下载回来之后,可以用Mac系统自带的“磁盘工具”软件将dmg文件恢复到某个硬盘分区,或者刻录到某DVD光盘中。不过建议恢复到硬盘里面,这样安装系统的时候速度会快很多。

序列号

Mac系统只能装在苹果电脑上(经过破解之后也能装在PC上),所以操作系统的价格在你买苹果电脑的时候就算交过了。之后只要你能得到dmg格式的系统镜像,就可以随便在电脑上安装而不需要任何激活码或者序列号。

Timemachine

时间机器是Mac自带的系统备份恢复软件。通过差量备份将系统不同时候的状态全部记录下来,可以随时找回之前的文件。也可以将资料从一台电脑恢复到另外一台。 我们将会使用Timemachine来备份当前电脑的所有资料(超大的文件貌似不会被备份,例如虚拟机文件),然后等新系统装好后,再从Timemachine里面把资料还原回来。这里说的“资料”不仅仅包含个人文档,而是计算机的所有人为改变,包括你下载的程序,你的浏览器看过的网站记录,甚至你桌面上图标的位置。

备份磁盘分区

系统自带的“磁盘工具”的功能十分强大。它支持在开机状态下把系统盘完整拷贝到另外的分区或者外置磁盘分区。同样,新系统装好后,也可以从这个拷贝恢复个人数据。而且备份整个系统分区貌似要比使用Timemachine备份要快一些(如果你是第一次使用Timemachine的话)。

迁移助理

“迁移助理”是Mac系统自带的系统恢复软件。支持网络迁移、从Timemachine或者磁盘恢复。在新系统刚刚装好的时候,建立任何用户之前,系统会提示是否需要迁移。如果错过了这次机会也没关系,任何时候都可以启动“迁移助理”来进行迁移。

系统分区

一般情况下,苹果电脑的内置硬盘只需要1个分区。并且请保证磁盘的分区图方案是GUID分区表。否则会影响启动速度。格式化在苹果系统里面叫做“抹掉”。苹果的分区抹掉的时候要选则格式为“Mac OS 扩展(日志式)”。

修复权限

Mac系统是基于BSD的,跟Linux很像。系统对文件权限的控制非常严格,这点跟windows很不像。想像一下windows下面,你不小心双击了一个病毒文件,然后。。。然后就没有然后了。。。而Mac下面就算你运行了一个病毒文件,在你输入密码之前,它是没有权限修改系统文件的,顶多就是把你的个人文件删了。  而且很多系统问题都是由于权限错误造成的。所以一般在完成迁移之后都会做一次“修复磁盘权限”操作,以保证系统的稳定运行。这个功能可以在“磁盘工具”的“急救”选项卡里面找到。

 

步骤:

好了,现在来说说怎样升级或者重装Mac系统。

首先,从网上找到需要的系统镜像文件。下载下来。 

找一个usb硬盘,分一个10GB左右的分区。(或者使用本机的硬盘,新增加一个分区)。

打开磁盘工具软件,将这个分区抹掉(注意选择格式)。

点击“恢复”选项卡点击“源磁盘”后面的“映像”按钮,找到刚刚下载的dmg系统文件。将左侧刚刚抹掉的10GB分区拖入“目的磁盘”的空白框内。然后点击“恢复”按钮。

坐等完成。

如果你想保留你的个人文件的话,在安装新系统之前请用Timemachine备份一次或者用磁盘工具把系统盘备份到外置硬盘(外置硬盘的分区需要比系统盘稍大)。

完成了之后你就可以重启,“当”一声之前按住alt不放,进入启动选择界面,选择安装盘分区启动。

进入安装盘系统之后,最好不要着急安装。先打开磁盘工具(对,安装盘里面也自带了磁盘工具软件),然后抹掉系统分区。如果是用外置磁盘安装,甚至可以抹掉整个系统磁盘。

抹掉之后就可以继续系统安装步骤了。没什么特别的,一直点“继续”就是了。完了之后建议先建立一个临时账号(不要跟老系统的用户名一样),进入系统看看。看看新系统满不满意,运行起来卡不卡。

如果没问题就启动“迁移助理”,把之前备份的个人资料迁移到新系统中来。

迁移完成之后注销或者重启,进入之前的用户,再进入“系统偏好设置”把刚刚的临时账号删除。然后再进行“修复权限”操作。完成之后重启。

 

好了,现在你的系统已经升级,并且保留了你所有的文件(注意Timemachine不会备份超大文件,.hosts文件,请自行备份)。 

 

另外,貌似Lion系统支持直接升级安装,直接从App Store下载Lion系统,然后直接运行就可以了。不过我还是建议在安装之前先备份一下,否则万一。。。就一切都完了。


4条评论     到PHP.JS.CN上围观原文 ]]>
2012-05-11 15:05:26
<![CDATA[更新iTunes同步歌词显示小工具]]> http://php.js.cn/blog/itunes-geci/     之前的版本:http://php.js.cn/blog/itunes-geci-lrc-widget-for-mac-os-dashboard/

    这次在此基础上修改了下界面。修复了一些bug。 去掉了歌名和歌手一直显示的功能。只在歌曲开始的时候显示歌名。

    看截图:

    点击这里下载。解压后直接双击就可以了。

    注:这是个Mac OS 操作系统的Dashboard小工具!Windows用户请无视之。


2条评论     到PHP.JS.CN上围观原文 ]]>
2012-04-20 23:55:52
<![CDATA[Titanium开发iOS应用使用中文appname]]> http://php.js.cn/blog/titanium-ios-app-chinese-appname-i18n/     用Titanium做iOS的APP挺简单的。完全不需要Object-C的知识,看官方的API文档基本就可以了。我最近做了个应用准备发布。不过遇到了个问题,就是app name不能设置成中文。 想了下,貌似App Name也有语言问题,不同语言环境下应该显示不同的名字才对。 后来网上找了一大圈,终于搞定。 下面是步骤:

    环境: Titanium Studio, build: 1.0.9, Titanium Mobile SDK 2.0.1 , Mac OS Snow Leopard

  1. 首先在你的项目根目录下新建一个文件夹,i18n,这个是国际化文件夹,下面应该放各种语言的语言文件
  2. i18n下面新建en文件夹用于英文,zh_CN文件夹用于中文,ja 日文 ... 
  3. 在每个语言文件夹下面新建app.xml文件
  4. app.xml文件里面写:

    <?xml version="1.0" encoding="UTF-8"?>
    <resources>
        <string name="appname">APP NAME</string>
    </resources>

  5. 不同语言文件夹下的app.xml写不同的APP NAME就可以了。
  6. 如果没效果可以试试先clean再run

搞定。

另外,推荐一个可以下载免费icon素材的网站,http://www.softicons.com/ 里面好多开源免费的icon!!


2条评论     到PHP.JS.CN上围观原文 ]]>
2012-04-20 19:22:04
<![CDATA[让Javascript函数支持事件绑定/触发]]> http://php.js.cn/blog/javascript-event-bind-trigger/     JQuery支持事件绑定,触发等操作。不仅仅对DOM元素有效,对普通的函数或者对象一样可以。比如

var a = {};
$(a).bind('msg',function(){ alert(1); });
$(a).trigger('msg');

    我刚做了个函数,可以为自己写的普通函数增加类似上面这种事件监听、绑定功能。并且支持跟JQuery一样的事件命名空间。例如:

function ClasssA() {} //某个函数
EventMachine.call(ClassA); //为此函数的prototype增加几个方法(bind,unbind,trigger,unbindAll),此函数源代码见后面的链接

var a = new ClassA(); //实例化ClassA
a.bind('msg',callback1);  //click的时候执行callback1
a.bind('msg.a',callback2); //click的时候执行callback2
a.bind('msg.b',callback3); //click的时候执行callback3
a.bind('logout.a',callback4); //mouseover的时候执行callback4

a.unbind('msg'); //干掉 callback1,2,3
a.unbind('msg.a'); //干掉 callback2
a.unbind('.a'); //干掉callback2,4
a.unbind('msg',callback2); //干掉callback2
a.unbind('.b'); //干掉callback3
a.unbindAll(); //干掉所有

a.trigger('msg','abc'); //触发callback1,2,3 并传递'abc'参数

    源代码及demo看这里

    因为目前采用的方案是往this的prototype上写方法,所以暂时只支持函数。 不过可以经过很简单的修改来支持普通的对象(貌似没什么必要。。。)

    因为没有用到任何平台相关的东西,所以EventMachine函数可以运行在几乎所有支持Javascript的地方。比如NodeJS, Web, Titanium等


2条评论     到PHP.JS.CN上围观原文 ]]>
2012-03-28 01:14:49
<![CDATA[Javascript程序员也可以开发iOS原生应用]]> http://php.js.cn/blog/javascript-develop-ios-native-apps-with-titanium/     主要方向是前端的我曾经也想过学学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! 欢迎补充。


8条评论     到PHP.JS.CN上围观原文 ]]>
2012-03-19 02:32:33
<![CDATA[译:怎样在Elance上赢得任何项目]]> http://php.js.cn/blog/how-to-win-any-job-on-elance-odesk-or-gurucom/  

作为在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


3条评论     到PHP.JS.CN上围观原文 ]]>
2012-03-19 01:44:37
<![CDATA[电信ADSL宽带对路由器人为限速]]> http://php.js.cn/blog/dianxin-adsl-kuandai/     最近住朋友家,他们家是电信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


24条评论     到PHP.JS.CN上围观原文 ]]>
2011-10-01 21:43:52
<![CDATA[我才知道的几个Javascript小知识点]]> http://php.js.cn/blog/javascript-slice-splice-substr-substring/     因为我学习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等常用方法就不说了。


10条评论     到PHP.JS.CN上围观原文 ]]>
2011-09-02 01:49:23
<![CDATA[Elance新手入门]]> http://php.js.cn/blog/elance-freelancer-abc/     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


26条评论     到PHP.JS.CN上围观原文 ]]>
2011-07-14 13:33:34