Day 3066 从硬盘安装Ubuntu

先说点看起来无关紧要的题外话:

办公室里有一台多年前的Canon LBP3200打印机、2台32位Windows的机器和2台64位系统的Windows机器。由于打印机已停产多年,其Windows驱动只有32位版本,且经多方搜索及向客服咨询,官方并无推出64位驱动的计划,导致其中主任使用的一台64位系统的机器要打印东西,只能将文件传给32位机器后打开打印,很不方便,于是想办法架设打印服务器。

搜索后,发现USB口打印服务器基本为¥200元起,而本单位一向比较抠门,能将就的事情从不舍得花钱,况且经过搜索支持这款打印机的打印服务器价格更是高于¥300元。思前想后突然想到办公室有一台弃置多年的富士通LifeBook S6010,考虑将其改装成打印服务器,其主要配置为:Pentium III M 1.0Ghz、512MB内存、30GB硬盘、集成显卡(显存48MB)。

由于Windows Server安装打印服务器进行集中共享其实与单机共享并无二致,仍然需要准备各种版本的驱动,外加上述该机配置跑Windows Server明显带不动,最后决定装Ubuntu安装CUPS打印服务器进行实验。

但一开始就出现了问题:这台机器由于型号过老,不仅不支持USB-HDD、USB-CDROM等现代机器上常用的USB启动方式,连仅有的USB软驱模拟也无法适配手头的U盘,所以从U盘启动直接安装这条路算是堵死了。好不容易翻出一张深度XP那个年代的PE启动盘,但Linux和Windows 7以上的系统不同,并没有全自动的工具将镜像释放到磁盘后再进行安装,怎么办好呢?

最后的解决方案来自这篇文章,将Ubuntu的ISO释放到硬盘上的一个小分区,然后用Grub4DOS进行引导,将ISO挂载后模拟光驱启动,具体步骤如下(假定磁盘上的数据全都不要了):

1、使用任何分区工具将磁盘清空,并创建一个1.5GB左右的小FAT32分区,用于存放Ubuntu安装镜像(记得将这个分区设置为活动分区),剩余空间暂时留空。

2、下载Grub4DOSbootice,将Grub4DOS中的grldr和menu.lst放在刚刚创建的分区的根目录下。

3、启动bootice,在「目标磁盘」中选择好本机的硬盘,然后点击「主引导记录」,将Grub4DOS安装到硬盘中。

4、编辑menu.lst(需要使用支持UNIX换行符的文本编辑器,Windows下例如Notepad++、EditPlus等),在末尾另起一行加入以下内容(其中Ubuntu的ISO文件名请对照实际情况自行修改):

title Install Ubuntu
find –set-root /ubuntu-11.04-desktop-i386.iso
map /ubuntu-11.04-desktop-i386.iso (0xff) || map –mem /ubuntu-11.04-desktop-i386.iso (0xff)
map –hook
root (0xff)
kernel /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed noprompt boot=casper only-ubiquity iso-scan/filename=/ubuntu-11.04-desktop-i386.iso quiet splash —
initrd /casper/initrd.lz

5、重新启动,在Grub4DOS引导选单选择最后一项Install Ubuntu即可。

6、当Ubuntu环境启动完成后,先不要急着安装系统,先按Ctrl+Alt+F1进入终端,输入以下命令:

sudo umount -l /isodevice

7、按正常步骤安装Ubuntu即可。

2014-07-05后记:由于室内陈设的问题,加之CUPS方案同样无法解决客户机需要安装Native driver的问题,故最后没有做成任何事情。

Day 3038 虚拟网呼叫转移

家里的电话在集团虚拟网下,最近因临时有事需要设置无条件呼叫转移,但按以往的*57*目标号码#总是忙音,#57#又只会冒一个「置」字的声音(这个仍然不知道怎么回事),一头雾水。

仔细上网搜了一下才发现忘了一个细节:既然虚拟网拨号需要先拨0转外线,那么设置呼叫转移时对于外线号码也要加上这个0,例如:要无条件呼转至138001380000,需要键入的指令是*57*013800138000。

感谢此链接下的回答。

Day 3009 支付宝「手机支付网站」的坑

alipay_mobile_unsupported_dummy_payment

为适应业务发展需要,单位的网站要开手机版(话说这种形式好像已经是上世纪的东西了),其中有一个功能是在线购买产品。由于这个手机版要放在微信中,原本应该与微信支付对接,但微信现在好牛,2万元的保证金让领导觉得没挣钱先烧钱不值,于是转而采用没有预付金的支付宝手机支付功能。

因为有sample code,集成过程还算顺利,但尝试支付过几次后,发现采用手机网银支付时,最后跳回商户网站(即本单位的手机网站)时只会冒出一行「抱歉,网银充值失败」,而与此同时该交易却已经支付成功,虽然异步通知已经将订单状态修改为「已付款等待发货」,但客户会卡在出错页面上,以为没有支付成功。

经过与支付宝的在线技术客服与商家电话客服的沟通,最终弄明白了一个事实:「手机支付网站」这个产品根本不支持手机网银支付,虽然所有的后台流程一切正常,但前台会因为签名验证失败而出错。

——那你把手机网银支付的选项放在前台干啥!

Day 2986 PHPCMS v9 前台上传文件提示undefined

最近要给单位的网站增加一个前台上传的功能,原本PHPCMS v9没有单文件上传的字段,后来根据这个帖子中提供的资源成功添加,对字段作者表示感谢(同时直接在此进行备份:点击此处下载UTF8版本.,GBK版本用户手工转一下码就可以)。

由于上传功能使用了表单向导,于是将该字段移植到了module formguide的fields里,但是每次上传文件都出现一个alert,内容只有简单的「undefined」一行,虽然文件正常上传了,但上传的dialog里没有成功上传的项目,表单中也不能出现上传的文件路径,打开PHP错误日志也一无所获,经过一番查找,最后用这个帖子的14楼回复解决了问题:

确定网站设置里是否有你上传的文件格式。如果没有,请增加,就不会出现错误了。

将所需的格式添加到设置-站点管理-对应的站点设置中【附件设置】允许上传的文件格式里,确实可以上传了。

追根溯源,在phpcms\modules\attachment\attachments.php中大约47行起的function swfupload()中有这样一路判断:

$site_allowext = $site_setting[‘upload_allowext’];
$allowext_array = explode(‘|’,$site_allowext);
if(!in_array($attachment->uploadedfiles[0][‘fileext’],$allowext_array)) exit(‘0’);

由此可见站点允许上传的文件类型是受站点设置中的附件设置控制的。

关于出现undefined的alert这个问题还有另外一个解决方案,似乎出现的原因是只有IE可以正常上传,其它浏览器(包括以IE为核心的各类浏览器Shell)都出现undefined的问题,一并附上解决方案:

仍然是phpcms\modules\attachment\attachments.php中的function swfupload(),在//判断是否登录 下面,将:

if(empty($this->userid))

修改为

if(empty($_POST[‘userid’])

即可。

Day 2979 Solidot一键展开评论

Solidot于2012年12月改版后已经过去了一年的时间,刚开始还觉得以前这个站的新闻比较新奇、及时(我承认自己是从cnBeta找过去的),所以还曾经写信提交bug,但几封邮件均如泥牛入海不知踪迹,感觉很失望。

之后发觉Solidot的风格越来越五毛化,也就不怎么常去了,据说是嫁给ZDnet之后寄人篱下的缘故。

改版后有一个很别扭的地方:虽然Solidot一直没有本家的Karma系统,但以前想以层叠方式完整阅览某新闻下的评论,只需要将评分选择到-1或者-2即可,但改版后可选的最低分数会被限制在0分,如果此新闻下只有0分评论,那么永远无法通过操作select控件展开评论进行查看。

其实只需要手动加上threshold(评分阈值,或者叫门槛)以及mode(评论展开样式)参数就可以达到目的,但第一本人始终拼不对threshold这个单词(掩面),第二每次都手敲很麻烦,所以加个书签就OK:

javascript:window.location=window.location.href+’&threshold=0&mode=nested’;

注:threshold和mode缺一不可,threshold根据情况(取决于该篇新闻中评论的最低分值)可能需要修改为-1或-2(吐个槽:改版的Solidot正地方没用心,检查参数倒是很注意),可以多建两个书签。

赠品:yPool在Share位置显示Balance + Unconfirmed的和:

setInterval(function() {document.getElementById(‘shareval_display’).innerText = (parseFloat(document.getElementById(‘balance_display’).innerText) + parseFloat(document.getElementById(‘unconfirmed_display’).innerText)).toFixed(8);}, 500);

Day 2978 「我的电脑」双击打开设备管理器、「所有程序」空白

最近遇到的两个问题:

1、双击桌面上的「我的电脑」(或Windows Vista以上版本的「计算机」,下文不再另行说明)时,打开了设备管理器等非「我的电脑」的窗口,在图标上点击右键时发现「设备管理器」等项目变成粗体(即默认)选项

原因:「我的电脑」项的注册表信息被更改(该机使用过多种未知的「优化」软件),造成右键菜单项目混乱。
解决方法:控制「我的电脑」图标的注册表项为:
HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}
到「我的电脑」右键菜单正常的机器上将此项导出,在出问题的机器上首先对原项目进行导出备份,再导入正常的内容,如果没有效果,可以kill掉explorer.exe进程再重新启动之即可。

2、Windows 7系统点击开始菜单的「所有程序」后,列表一片空白

查找过程:度娘给出的结果都是「所有程序」一项消失,并非「所有程序」的列表为空白。当时由于当事人觉得处理起来太麻烦,未能完成诊断工作作罢,初步判定可能与该日志(需自备梯子)提到的原因有关:Windows 7 RC 7100版本的开始菜单有一个bug,当当前用户和所有用户的「程序」列表项多于70个时,「所有程序」会不高兴显示为空白,解决方案也只有对应的将部分项目移入单一文件夹,然后重启explorer.exe或整个系统,可能会有效果。
上述日志问题对应的版本是7100,而现今Windows 7已升级到7601版,如果还是这个老原因,那还真是不应该。

Day 2934 解决RDP远程桌面无法复制粘贴的问题

一直用3389作为主要的某Windows服务器管理方式,当然还有备用的。

最近突然发现在两台机器之间的复制粘贴不能用了,不管是普通文本还是文件,原本是好好的。

一番搜索的结果如下:

1、确认连接前mstsc的选项「本地资源」-「本地设备和资源」中的「剪贴板」已勾选。
2、在远端Kill掉rdpclip.exe,然后重新启动该进程即可。

Day 2931 解决因字体嵌入限制导致Indesign中PDF导出失败的问题

本人日常工作之一是将本社杂志转换成PDF格式以供对内分发。

年前将办公机抱回了家里进行清理维护,重装了系统,当然所有的字体也进行了重新安装。今天进行一如既往的工作时,却突然发现一向比QuarkXPress听话得多的InDesign也开始报「导出PDF文件失败」,尝试调整了很多选项均未果。后来注意到最后的「错误」之前有很多「警告」,大体意思都是「字体【字体名称】包含版权保护,无法进行嵌入操作」,才想到是不是所用的字体包含Copyright flag并且同类错误太多,导致PDF Distiller无法继续运行。

重点关注了【字体名称】所指的字体,全部属于某著名品牌,于是想到既然只是一个Flag能否直接去掉,一通搜索之后找到了这个工具:TTFPATCH原始地址)。

鉴于私自修改字体明显是侵犯版权的行为,就不在这里直接放出使用方法了,直接运行就有提示,稍作说明的一点是新TypeValue可以用加法来同时设置两种属性。

注:本日志的源代码中没有任何奇怪的东西。

Day 2888 U盘

aigoud_header

手里有一枚“爱国者精锐型II代2GB”的U盘,大概是09年的时候入手的,算下来用了4年了,前一阵子突然开始读取困难,复制文件卡很久最后还是会以I/O错误告终,胡乱尝试了几种方法最后却导致系统干脆不认了,就放了起来干脆准备买新的。

结果前两天手里的另一枚iSteed 16GB USB3.0也出了问题,虽然不及无法使用这么严重,只是插到USB 3.0的接口上却始终被识别为2.0,生怕一个U盘都没得用,还是回来看了看aigo的那只U盘,看能不能救活。

继续阅读 “Day 2888 U盘”

Day 2821 饭否OAuth 2 API黑箱摸索笔记

饭否的API上次更新已经比网页版还要古老了,传说中的2.0版API只出了一个草稿,后来因为各种原因中止了开发,从此杳无音讯。

OAuth 2.0比1.0减少了繁琐且容易出错(还很难找到原因)的签名过程,但前提是依赖https的加密传输,所以饭否允许在http协议下使用OAuth 2.0的做法其实是不对的,但已经没有人管了,反正证书都过期了。

以下为参考草稿及API Wiki中散落的2.0 API说明文档整理的黑箱笔记。

继续阅读 “Day 2821 饭否OAuth 2 API黑箱摸索笔记”