题目应该是普通用户Windows下如何不写脚本、程序,批量地更改文件名。借助了excel,但是尽量不要写VBA,因为VBA对于普通用户还是有一定的难度。
尽量不使用Excel的VBA函数,如何能把一个目录的所有文件的文件名写到Excel里面?
首先,打开目录。
按Ctrl-C或者右键菜单复制:
打开浏览器,将复制的路径粘贴到地址栏并打回车:
出现文件夹内容:
按CTRL-A全选,再CTRL-C或者右键菜单复制。
再打开Excel,按CTRL-V粘贴进去。
删除第一、二行,再调整好宽度,顺序等。
至此,文件名导入EXCEL的工作完成
一般这种批量更改的情况下,目标文件名都有规律的,无非就是对原来的文件名进行某种更改,比如在这个例子中,可以将DSC替换成PIC等,或者按照一定的排序,用序号方式对文件进行命名,例如:PIC001,PIC002等。这些都需要使用到一点EXCEL的公式。
在这里,将用到EXCEL公式里面的SUBSTITUE这个函数。具体用法是:
=SUBSTITUTE(单元格, "旧文本", "新文本")
我们选中,D2单元格,在里面打入:
=SUBSTITUTE(A2, "DSC_", "PIC")
回车:
然后选中D2单元格,把光标移到右下角,光标变成实心十字时,双击,这样整列到最后一行都会应用这个公式。
这个是替换原文件字符的做法。
在这里会用到EXCEL的几个公式的函数:
ROW()
RIGHT(单元格,长度)
REPLACE(单元格, 开始位置, 结束位置, "字符串")
text(数值, 格式)
CONCATENATE(文本1, 文本2, ... )
测试一下这个工具。
博客已经没有以前那么热门了,但是博客这种形式还是有存在的价值,确实像它原来的名字Web Logger所表示那样,它带有一种类似日记的功能,多年后回去翻看的时候,可以回想起自己当年在做什么。
Blogger的服务一直被屏蔽,当年选择它的原因是因为它支持生成全静态的网页,并可以FTP到一部服务上,这样可以把服务放在墙内,但后来Google宣布不支持这个功能了。所以一直没找到好的发布blog的方式。直到发现了GitHub pages,也是通过生成全静态的方式发布,比Blogger更好的地方是还有版本管理功能。暂时没有被墙。
找了个还不算丑的模板后,终于设置好了自己的GitHub Pages了,剩下的问题就如何把Blogger上的内容迁移过来了。研究了一下,发现Google takeout有包括Blogger的内容,试了一下,发现导出的是一个atom文件,内容和标签都保留了,但是图片没有,希望Google能改进一下把图片也导出就好多了。因为之前是全静态发布的,所以图片的目录我有备份,而且是和正文的链接对应的。
迁移的过程主要解决以下三个问题:
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/blogger/2008/kind#template'/>
配置部分的category是这样的:
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/blogger/2008/kind#settings'/>
帖子部分的category是这样的:
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/blogger/2008/kind#post'/>
<category scheme='http://www.blogger.com/atom/ns#' term='STL'/>
<category scheme='http://www.blogger.com/atom/ns#' term='VC'/>
好吧代码在这里:
用到的jar的列表:
rome-1.0.jar
jdom-1.1.3.jar
remark-0.9.3.jar
jsoup-1.6.1.jar
commons-cli-1.2.jar
commons-lang3-3.1.jar
这篇文章的标题想了很久,实际上也可以是《如何快速地向远端部署新版本的大应用》,《如何快速地发布新版本的大文件供下载》等等。
起因是因为在阿里云申请了一个服务器,因为在公网,而且有BGP,所以就想把原来提供客户下载版本的服务器从公司移到那边去。原来只有一条ADSL,所以客户下载时,相对于我们是上传,也就只有ADSL上传的512k的速度,而且部分客户用的是非电信的线路,下载时断时续,非常麻烦。公网服务器至少上下行都是2M,效果会好一点。一直以来为了体现我们的高端大气国际化,我们为每个客户都会保留从他们系统上线开始的全部的应用版本,主要也是为了吵架时方便,比如他们说,你们很早以前的版本就有什么什么的功能,为什么现在没有,我们可以拿早期的版本给他们看,说当初你们就没提过这种需求。
这样一来,我们就需要把全部客户,几年迭代更新下来的所有版本的应用,全部都从公司服务器上传到阿里云的服务器,依靠的是一条512k的ADSL线路,全部文件大约有20G,计算了一下,连续不断的传,全速传,至少也需要5天时间吧。对于急性子的处女座,这是不能接受的。
我们这些版本的打包文件都有一个重要的特点,版本与版本之间的变化是很小的,所以想到了之前帮客户做远程数据库备份文件拷贝时用到的一个工具:Xdelta。它利用了压缩算法中经常用到的delta encoding 方法,用于计算两个二进制的内容(可以是文件、视频的帧等)的不同。在我们这个例子中,只需要拿着最初的文件作为蓝本,逐步按时间顺序计算两个两个文件的差异,再把差异文件和最初文件传送到服务器端,再在服务器端恢复出来。所以写了这样一个脚本:
根据某个目录下的所有文件,生成两个脚本文件,一个before.sh,一个after.sh,before.sh用于在原来服务器上,生成所有相邻文件的差异文件,after.sh用于在目标服务器上,以第一个文件为基础,根据差异文件,按顺序把所有文件恢复出来。
这样一来,需要传输的文件的大小,缩小到十分之一左右。一天之内就把所有文件都传输到公网服务器上了。
这个方法其实可以应用到很多场景。例如:做Java互联网应用最头疼的事情,应该是新版本的部署,Java应用,通常支撑的jar包的大小,都有几十到上百兆,要么就要把这些支持包做成应用服务器的公共包,但这样一来如果版本升级,或者有多个不同应用使用了不同版本的jar包就非常麻烦。要么每次升级,就要把一个几十到上百兆的war包传到公网上面,对于经常需要升级的应用来说就会非常耗时。使用xdelta,每次就只需传送差异部分,可以节省很多时间。
同样,做ROM、ISO或者游戏类apk发行的厂商,也可以使用这个方法,除了把各个版本的文件放上去,最好也放多一个和上个版本的diff文件,这样大家下载一个很小的diff文件,再patch到原来版本的文件上,就可以得到一个新版本的文件了。对于动辄上百兆的ROM、几百兆apk或者上G的ISO文件来说,可以节省很多带宽和时间。
我们的路由是一部FreeBSD的机器,用PPPoE拨号,虽然在ppp.linkdown里面,加入了delete MYADDR的语句,但是似乎不起作用,每次经过长时间运行后,ifconfig tun0总会返回下列的结果: tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492 inet 183.5.143.228 –> 183.5.142.1 netmask 0xffffffff inet 183.5.131.132 –> 183.5.128.1 netmask 0xffffffff inet 118.129.216.62 –> 118.129.216.1 netmask 0xffffffff Opened by PID 245
这个似乎会影响MLDonkey判断外网地址,估计因为不知道哪个是真正的外网地址,就选了第一个,但往往第一个其实不是真正的IP。如何判断哪个才是真正的IP呢,很简单,用默认网关,打入netstat -n -r|grep default,显示: default 118.129.216.1 UGS 0 16058987 tun0
所以最后的那条记录才是真正的外网IP。按照这个原理,写了下面的脚本并用crontab定期判断并删除那些不是真正IP的条目:
关于树莓派的背景介绍在网上已经很多了,在树莓派的官方网站上也有一个长篇大论。这里只是简单的列一下:
1、厄普顿(Eben Epton)在2006年已经意识到要为儿童提供一种廉价的计算机,因为他觉得从2000年之后,报读计算机系的优等生无论从数量上还是技术水平上都一年不如一年(the year-on-year decline in the numbers and skills levels of the A Level students applying to read Computer Science in each academic year,貌似这段是请中国人写的,因为除了中国人之外,想不出哪里的人会用read Computer Science来写报读计算机专业)。而90年代的学生大部分都是有经验的编程爱好者(experienced hobbyist programmers)。
2、厄普顿觉得这样的原因在于:家庭PC机过于昂贵,所以父母不肯给小孩在上面进行一些实验。所以他想做一个廉价的,可以和老式计算机一样,一启动就进入编程环境的计算机。(其实我觉得不是过于昂贵,当年的Apple II和中华学习机也是要几千块一台的,真正原因是PC从极客用品变成了一种日常消费品,父母同样不会让你拿家里的冰箱微波炉拆开做实验的)
后来的故事大家也知道了,由于他成立了树莓派基金运作这个事情,宣称要做一个只有25美金的家用电脑,而且体积和信用卡一样大,可以接电视,可以播高清视频,所以一下子吸引了眼球,以至于订购的人刷爆了他的网站。
淘宝上很早就有了,但是有点贵,我也不想断了人家的财路,也不想在这里帮别人做广告,反正最后我是以35美金加中国的17%的增值税加较高的运费(从上海到广州要40块钱)买到的,到手的价格还算合理。订购后2个星期内到货。
整块板卡的做工不错,拿在手上确实觉得很小,SD卡的插槽有点粗糙,见照片。
可能为了节省体积,电路板上没有任何可以用来固定的螺丝孔,所以一定要等有人做出专门的外壳或者专门的架子才能固定,树莓派基金承诺今年夏天会推出外壳。电源接口是microUSB而不是miniUSB,和我的C8500的接口一样,个人感觉如果是miniUSB会通用一点。由于只有两个USB口,但是正常使用除了接键盘鼠标外,大部分人还是需要接多一个USB硬盘的,所以需要配合一个USB HUB来使用,而且这种板卡的USB口的驱动能力不会很强的,所以还必须是有源的USB HUB才能接大点的硬盘。
没有插SD卡,加电时除了电源灯之外,不会有任何的反应,HDMI没有任何输出,树莓派的说明书中提到可以通过串口输入命令,但是它的串口是通过那两排GPIO的脚的其中三个脚印引出的,而且是TTL电平的,必须通过驱动芯片才能和PC机的串口连接。
树莓派的官网提供了三个版本的镜像文件,还有无数第三方的镜像,由于是初次接触,还是用官网的Raspbian版本,因为是基于Debian的,所以Debian的一些命令和配置方法可以用得上。还要下载Win32DiskImager工具,用于在Windows下将下载的IMG文件写入到SD卡中。至于为什么把镜像文件直接拷贝到SD卡中是无效的,一言难尽,就和刻录光碟的ISO镜像要用专门刻录镜像的功能,而不能直接把ISO文件刻录到光碟上的道理是一样的。在这里下载文件,然后把读卡器和SD卡插入计算机,运行Win32DiskImager,选择镜像文件和合适的盘符,如果原来机器上插有其他的USB硬盘或者SD卡,建议在做这件事之前全部拔掉,避免发生选错盘符,把整个USB硬盘资料全部洗掉的情况。
写入完成后,就可以把SD卡插到树莓派上,把HDMI线、鼠标、键盘、网线全部插上。
加电后,如果电源灯旁边的绿色的灯(OK)会闪动,就说明SD卡是可用的。这时如果HDMI连接好电视了,电视上就会开始出现启动画面了。
接着是熟悉的Linux启动界面,企鹅被替换成了树莓:
首次启动将出现系统初始配置的界面,这个界面在也可以在之后的终端窗口中通过sudo raspi-config激活。
由于在初始配置的界面上没有看到有网络配置的选项,所以建议在网络环境中一定要有DHCP,也就是能自动获取IP的网络环境。因为Raspbian的各种软件的安装是需要网络连接支持的。需要用到的功能说明如下:
expand_rootfs - 将根分区扩展到整张SD卡,因为整个Image才400多兆,但是现在的SD卡基本都是几个G的,除非SD卡有其他用途,一般建议选择这项,这样可以有足够多的空间来安装各种程序。
overscan - 可以扩充或者缩小屏幕的设置,除非一启动就发现显示的内容能刚好填满整个电视的画面。大部分情况下是不能填满或者超过,如果这样就要enable这个,然后在系统启动之后,更改config.txt中的overscan_left、overscan_right、overscan_top和overscan_bottom的内容,如果显示内容超出屏幕的范围(显示不全),就要设置这些值为正值,如果是1080p,一般设置为48。如果显示的内容不能填满屏幕,则设置这些值为负值,如果是1080p,一般设置为-48。具体可以更加显示的结果,以16为步长进行调整。
configure_keyboard - 这个很重要,前面的屏幕选默认值:Generic 105-key (Intl) PC,但在Keyboard layout:时,显示出来的都是English(UK)的,要选择Other,然后在里面选择English(US),否则会出现键盘的一些符号不对或者对调,比如引号”和@符号对调,#号变成英镑符号等等。之后的两个屏幕都选择默认值就可以了,到了:Use Control+Alt+Backspace to terminate the X server? 时,选择Yes,表示用这个可以终止X Server,当整个X-Window死掉的时候可以用。
change_pass - 默认的用户名是pi,密码是raspberry,一般登录时不需要输入,但是用ssh远程连接时要用到这个用户名和密码,这里可以更改密码。
change_locale - 更改语言设置。在Locales to be generated: 中,选择en_US.UTF-8和zh_CN.UTF-8。在Default locale for the system environment:中,选择en_US.UTF-8(等启动完机器,装完中文字体,再改回zh_CN.UTF-8,否则第一次启动会出现方块)。
change_timezone - 更改时区,这个很重要,因为树莓派没有内部时钟,是通过网络获取的时间,如果设错时区,那么时间就不正确了,选择Asia - Shanghai,没错是Shanghai,木有
Beijing,这是Unix的传统。缩写是CST,不知道是China Shanghai Time还是China Standard Time。
memory_split - 按照网上的说法,这个功能有Bug,会导致/boot/start.elf损坏使系统无法启动,所以__不要使用这个功能__。可以通过拷贝/boot/下的arm128_start.elf、arm192_start.elf、arm224_start.elf覆盖start.elf来实现显存和内存的划分。为了能播放高清1080p的视频,至少要分配64M显存给GPU。所以arm224就不能播放1080p高清视频。
ssh - 是否激活sshd服务,应该选择激活,这是当界面死掉后唯一进入机器的通道(如果Kernel没死的话),可以找另外一部机器,用putty或者其他ssh的工具连接到这部机器上,用pi这个用户登录,至少可以实现安全重启。
boot_behaviour - 设置启动时启动图形界面,正常肯定是Yes。
设置完成后,选择Finish,会提示是否重启,选择Yes。
重启后,将进入LXDE的X-Window环境,反正都是有桌面图标和开始菜单,应该比较容易掌握使用。
一直令我很奇怪的是,即使你用Debian的安装光碟安装系统,如果你把Locale改成了中文的话,系统是不会自动安装中文字体的,直接的效果是系统的很多信息都用中文显示,但是由于没有安装字体,所以全部变成了方块,所以完全不知道信息的内容是什么, 这个作为系统安装工具我认为是有问题的,因为这样会直接造成系统不可用,基于Debian的Raspbian也有同样的问题。所以如果你在初始设置时,不小心把系统的Locale设置成了zh_CN.UTF-8,当你进入Raspbian的图像界面时,会马上傻眼了,不知道图标、菜单的内容是什么,因为全部是方块。所以建议初始设置时,locale尽量用en_US.UTF-8或者en_GB.UTF-8。启动后,双击桌面那个计算机显示器图标,出现提示符时打入: sudo apt-get install ttf-wqy-zenhei。
将安装文泉驿的开源中文字体,在这里向文泉驿表示致敬,貌似它是唯一一个开源的中文字体库。郭嘉有钱建孔子学院,但是从来不会有钱搞一套比较完整的开源中文字库出来的。
中文是可以显示啦,输入呢?Linux下早就有啦,叫SCIM(Smart Common Input Method),所以只要输入: sudo apt-get install scim-pinyin
就会安装拼音输入法,安装完成后,可以直接打入scim激活,下次启动是会自动启动的。快捷键也是Ctrl+空格。或者直接点击右下角图标选择。
接着运行: sudo raspi-config
然后选择change_locale,在Default locale for the system environment:中选择zh_CN.UTF-8。然后重启机器,就发现整个环境变成中文的了。
标准Raspbian版本中支持树莓派的GPU的播放器好像只有omxplayer,是个命令行程序,没有界面的,也不能拖动。它有很多参数,最常用的是-o,选项有local和hdmi,表示声音输出到audio out还是hdmi,omxplayer后面跟着要播放的文件名称,不支持wmv,不支持外置字幕。打开终端窗口,出现提示符后输入: omxplayer -o hdmi 文件名
也可以先用cd命令,将当前路径改变到文件所在的目录,文件名就不需要绝对路径了。其实大家会觉得命令行输入非常麻烦,但只要用Tab键进行命令补齐,用ls列出当前目录的文件,再配合鼠标选择文字,然后按中键(就是按下滚轮)进行连动的复制粘贴,即使没有资源管理器也会发现目录操作可以很快速的。
由于一般媒体文件都是放置在外置的硬盘中,所以这时需要将硬盘接入到USB口上,系统默认会在/media目录下创建和硬盘卷标一样的目录,并将USB硬盘挂接上去,之后就可以访问了。
测试的结果大部分用X.264编码的1080p视频都可以正常流畅播放。唯一一部无法播放的是:[魔术师和兔子].Pixar.Short.Presto.1080p.BluRay.x264.mkv。
这是《变形金刚3》的播放效果:
omxplayer的快捷键如下:
Key | Action |
1 | 加速 |
2 | 减速 |
j | 上一条音轨 |
k | 下一条音轨 |
i | 上一节 |
o | 下一节 |
n | 上一条字幕轨 |
m | 下一条字幕轨 |
s | 显示/不显示字幕 |
q | 退出 |
空格或 p | 暂停/继续 |
- | 减小音量 |
+ | 增加音量 |
左 | 后退30 |
右 | 前进30 |
上 | 后退600 |
下 | 前进600 |
鬼佬在测试他们的浏览器时,经常都是打开几个英文网站,然后就观察一下载入网页的速度、内存占用情况,然后马上就宣称他们的浏览器在什么平台上运行非常平滑,内存占用有特别少,等等,我们先来看一下几个浏览器是怎么说他们自己的:
他们没有想到在神秘的东方,有一些不可思议的网站在等着他们。如:新浪新闻的首页。我曾经拿iPhone4和高端的安卓机去访问,基本都是会卡死在那里。实际测试流量的结果,打开整个新浪首页耗费的流量大约在1MByte到2Mbyte,这还是当年Flash视频没那么流行的时候。反正上面的这几个浏览器,在树莓派上,打开新浪新闻首页,肯定整个界面就会卡死一段时间,等全部页面下完了,拉动起来也非常吃力。
我突然想到了Chrome,搜索了一下,发现Chrome的开源版本Chromium也给port到了Raspbian上了,安装的方法如下:
打开终端窗口,出现提示符后,打入: wget http://goo.gl/go5yx -O install.sh
成功后,打入: chmod a+x install.sh
然后,输入(注意一定要加上前面的”点斜杆”): ./install.sh
就开始下载和安装一些必要的包,还有下载整个Chrome并安装,整个过程速度飞快,难道功夫网对Linux格外开恩?安装完成后,直接打入(&让它在背景运行): chrome -disable-ipv6 &
就可以看到熟悉的Chrome界面了:
在进行魔鬼测试前,我先做了一点点优化,不像其他浏览器,Chrome是一定要有磁盘缓存的,不能关闭的,在正常情况下,这不是什么大问题,因为磁盘的速度远高于网速,但是现在我们用的是SD卡,例如我的class 6的卡,读取速度就是6Mbps,比很多ADSL都慢,所以缓存在这种情况下成为瓶颈,但是它的内部设计有是必须有缓存的,网上有些说法是把缓存的size改成1K,相当于disable掉它。但是缓存对提升速度还是有帮助的,我的做法是用USB硬盘做缓存,启动时打入下列的命令:
chrome -disable-ipv6 --disk-cache-dir=USB硬盘的某个目录 &
好,魔鬼测试开始,开新浪新闻:
整个载入时间花了可能接近一分钟,但是载入的过程中是可以拉动网页的,载入后也可以上下拉动,其他浏览器是几乎死掉了。网页下载的过程中,CPU的占用一直是满的,但是下载完后,CPU的占用就基本很小了。
我还是太傻太天真了,以为新浪新闻就是魔鬼测试了,哪知道还有个更大的魔鬼在后面,那就是新浪微博:
注意右下角的CPU占有率,微博在下载完页面后,还是保持基满的CPU占用率。这时整个浏览器拉动起来很费劲了,而且任何一个操作,比如点开图片都要等很久。用224的内存分配,情况好一点,但是基本没办法做到可用。原因应该是新浪微博用了大量的Javascript。
但是整体上来说,Chrome还是表现最佳。如果有人能用专业的测试工具测一下这几个浏览器的表现,看看瓶颈在哪里就好了。
玩家型的CPU都是支持超频的,通过更改/boog/config.txt中的下列参数可以实现超频:
Option | Description |
arm_freq | frequency of ARM in MHz. Default 700. |
gpu_freq | Sets core_freq, h264_freq, isp_freq, v3d_freq together. |
core_freq | frequency of GPU processor core in MHz. It have an impact on ARM performance since it drives L2 cache. Default 250. |
h264_freq | frequency of hardware video block in MHz. Default 250. |
isp_freq | frequency of image sensor pipeline block in MHz. Default 250. |
v3d_freq | frequency of 3D block in MHz. Default 250. |
sdram_freq | frequency of SDRAM in MHz. Default 400. |
over_voltage | ARM/GPU core voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V) [1] |
over_voltage_sdram | Sets over_voltage_sdram_c, over_voltage_sdram_i, over_voltage_sdram_p together |
over_voltage_sdram_c | SDRAM controller voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V) [1] |
over_voltage_sdram_i | SDRAM I/O voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V)[1] |
over_voltage_sdram_p | SDRAM phy voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V)[1] |
如何组合参照下表(注意:如果设置了over_voltage,质保就会失效,但是SD卡在你手上它怎么知道你设了?)
arm_freq | gpu_freq | core_freq | h264_freq | isp_freq | v3d_freq | sdram_freq | over_voltage | over_voltage_sdram |
750 | 255 | 450 | ||||||
900 | 250 | 500 | ||||||
900 | 275 | 500 | ||||||
900 | 450 | 450 | ||||||
930 | 350 | 500 | ||||||
1000 | 500 | 450 | 6 | |||||
1000 | 500 | 500 | 6 |
但是本人没有玩过,会不会发生冒烟、地震、火山爆发或61年一遇的洪水等情况,就不得而知了。
实际上就是 Android 4.0 (Ice Cream Sandwich) for Raspberry Pi。根据这个帖子,安卓4.0已经在树莓派上跑起来了,很快就会发布了。这是我非常期待的一个东西,之后就有大量的应用程序可以用了,但是我还是对性能上的表现十分担心,毕竟现在很多手机都是1G以上的CPU和1G内存了。
XBMC是Linux的媒体中心版,XBian就是XBMC和Raspbian结合的产物,作为播放器应用,这个也应该更加方便,支持的文件格式应该更多,尤其是能支持外置字幕。等我新买的SD卡到货后,就会马上刷这个试试。
现在网上已经有很多外壳的3D模型,用3D打印应该就可以打出来了,但是价格会非常昂贵,我询问了一下大概一个外壳要300块左右,如果有人能开模做出个低价的外壳出来就好了。
很好玩的一块板,作为家庭的播放器和下载机应该是没什么问题的,普通的上网浏览也是可以胜任的,如果opera能port到上面来,用服务器端进行渲染,应该访问复杂的页面也是可以的。由于所有的系统文件和虚拟内存(SWAP)全部都是在SD卡上,所以SD卡的速度对性能可能会有很大影响,等换一块高速卡对比一下再看。我觉得在上面做应用应该采用专门系统的方式,很难一个系统解决所有问题,比如做一个系统是专门打游戏的、一个专门优化后进行上网的、一个进行视频播放的,一个专门拿来做编程学习的,然后通过换不同SD卡的方式实现不同的功能,和以前的红白机一样。
可以在新浪微博上关注我@googol4u二世,我会不定期发布一些其他的测试结果。