<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>射手科技官方博客</title>
	<atom:link href="http://blog.splayer.org/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.splayer.org</link>
	<description>KISS user experience</description>
	<lastBuildDate>Thu, 02 Jun 2011 17:54:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>射手的 XenServer&#160;虚拟化琐事</title>
		<link>http://blog.splayer.org/index.php/2011/06/xenserver-checklist/</link>
		<comments>http://blog.splayer.org/index.php/2011/06/xenserver-checklist/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 04:39:48 +0000</pubDate>
		<dc:creator>Tomasen</dc:creator>
				<category><![CDATA[技术分享]]></category>
		<category><![CDATA[射手科技]]></category>
		<category><![CDATA[虚拟化]]></category>

		<guid isPermaLink="false">http://blog.splayer.org/?p=2920</guid>
		<description><![CDATA[射手科技从第一天开始，就非常依赖虚拟化技术。 在一组免费XenServer基础上，非常环保的运行着我们的域控制服务、项目和版本管理、文件共享等等，另有多台沙箱供开发人员使用或进行各种测试。 可是最近我们的XenServer上开始出现不稳定的状况。在灾难中，我们积累下一些经验，在此整理一下，以资借鉴： × 文件系统的性能是最大的瓶颈。如果性能不佳很有可能成为故障的根源 我们的虚拟池(Pool)使用NFS文件系统，架设在一台基于SATA硬盘组装的RAID上。在为多台虚拟进程提供服务时，iops捉襟见肘。甚至逐渐发展到了一些虚拟机Guest误认为文件系统超时而导致了各种故障。而对于Host来说，我们遭遇到的最大灾难就是虚拟机Guest的硬盘掉落，如果没有之前的配置备份或“记忆”，几乎无法找回。 × 对硬盘池的剩余空间保持高度关注 当一个Storage Repository的没有剩余空间时，在其上的虚拟机并不会立刻停止工作或者即刻报警。这样表面上保证了高可用性，但是却会让人大意，进而造成数据大量丢失而导致不可逆的数据灾难。况且在规划虚拟机Guest时，我们通常会习惯性的超量划分硬盘分区，这种情况下，一旦一个虚拟机Guest突然产生大量数据写入时，很有可能导致硬盘池分区满溢的情况。因此对硬盘池保持高度警惕是非常重要的。 × snapshot的极限是30个 在使用XenServer虚拟池的过程中，我们曾对使用snapshot进行断点备份寄以希望。甚至撰写了一个每天自动对所有正在运行的虚拟机Guest制作Snapshot的脚本，停止了手动备份工作。完全没有注意到XenServer中，每个虚拟机Guest至多只能有不超过30个snapshot的限制。直到发生灾难那一天，我们才发现snapshot已经停止多日，回滚中便丢失了大量数据。 × 虚拟池中的Master的数据安全需要全力保证 在多台XenServer组建的虚拟池中，物理主机之间是有Master/Slave之分的。其中Master的数据安全和稳定性尤其重要，容灾能力也会比较差。当Master遭遇不可逆的故障和灾难时，尽管其他Slave上运行的虚拟机Guest进程仍然还能正常工作一段时间，但是此时重启就变成了危险行为。Master的硬件稳定性是如此重要，现在我甚至会推荐Master上不运行任何Guest虚拟进程。 × 留心网卡兼容性问题 我的虚拟池物理主机是使用家用主板自己组装。板载RealTek RTL81xx系列的千兆网卡。幸运的是，XenServer可以识别和使用该系列芯片的千兆网卡，初期大大降低了硬件成本。但是不幸的是，我们发现RealTek 系列网卡至少在最新的Xen 5.6+上无法保证无故障运行，严重是还会导致虚拟机Host主机死锁。最终我们又另外购买了一组TP-LINK TG-3269C 千兆网卡来保证稳定性。 × 升级XenServer版本要谨慎 不只限于前述网卡兼容问题，XenServer生产版本升级会带来诸多不稳定问题。在Citrix论坛上也有大量的抱怨，有人几乎为此丢了工作。而且对于一组虚拟池来说，必须整组升级到相同版本，所以回退的成本也很高。面对这些问题，升级XenServer前务必要谨慎的考察。 × Guest是有可能Crash宿主机的 通常我们认为虚拟机Guest是处于隔离状态的，因此认为Guest进程中无论发生什么不会影响物理主机Host的稳定的。但是实际运行中我们发现，运行的一些Guest操作系统是有可能导致宿主主机死锁或者崩溃的。我们是在安装运行一些FreeBSD的虚拟进程时发现这一现象的，其结果是最终会导致所有同一物理主机下的虚拟进程死锁。而这也是我们现在不再推荐在Master上运行Guest进程的一个原因。因为一旦Master锁死会导致更大的灾难。 × 忘记密码后跳过fsck的方法 在Linux Guest中发生严重的文件系统损坏时，会在启动时要求输入完整的root密码并进行全面的fsck。如果这时候忘记了root密码（特别是全面推进证书登录后）是很尴尬的。碰到这种处境时，可以通过XenCenter设置该虚拟机Guest的属性 &#8211; General &#8211; Boot Options &#8211; OS boot parameters ， 改为 fastboot（跳过fsck阶段）或 single （进入单用户模式）来进入系统并进一步修复文件系统。 × 切换Master的正确方法是在线状态中，登录Master并任命虚拟池中的另一台Slave担任新的Master 正因为Master在虚拟池中的主要性，当需要对Master进行软、硬件升级或调整时，必须要在Master上执行切换操作，将另一台物理主机制定为新的Master再进行维护。否则一旦Master在维护中出现故障，将会成为新的灾难。 from master: xe pool-ha-disable [...]]]></description>
			<content:encoded><![CDATA[<p>射手科技从第一天开始，就非常<a href="http://blog.splayer.org/index.php/2010/07/%E5%B0%84%E6%89%8B%E7%A7%91%E6%8A%80%E7%9A%84-xenserverxendesktop-%E8%99%9A%E6%8B%9F%E5%8C%96%E5%BA%94%E7%94%A8%E6%96%B9%E6%A1%88/">依赖虚拟化技术</a>。 在一组免费XenServer基础上，非常环保的运行着我们的域控制服务、项目和版本管理、文件共享等等，另有多台沙箱供开发人员使用或进行各种测试。</p>
<p>可是最近我们的XenServer上开始出现不稳定的状况。在灾难中，我们积累下一些经验，在此整理一下，以资借鉴：<span id="more-2920"></span></p>
<p><strong>× 文件系统的性能是最大的瓶颈。如果性能不佳很有可能成为故障的根源</strong><br />
  我们的虚拟池(Pool)使用NFS文件系统，架设在一台基于SATA硬盘组装的RAID上。在为多台虚拟进程提供服务时，iops捉襟见肘。甚至逐渐发展到了一些虚拟机Guest误认为文件系统超时而导致了各种故障。而对于Host来说，我们遭遇到的最大灾难就是虚拟机Guest的硬盘掉落，如果没有之前的配置备份或“记忆”，几乎无法找回。</p>
<p><strong>× 对硬盘池的剩余空间保持高度关注</strong><br />
当一个Storage Repository的没有剩余空间时，在其上的虚拟机并不会立刻停止工作或者即刻报警。这样表面上保证了高可用性，但是却会让人大意，进而造成数据大量丢失而导致不可逆的数据灾难。况且在规划虚拟机Guest时，我们通常会习惯性的超量划分硬盘分区，这种情况下，一旦一个虚拟机Guest突然产生大量数据写入时，很有可能导致硬盘池分区满溢的情况。因此对硬盘池保持高度警惕是非常重要的。</p>
<p><strong>× snapshot的极限是30个</strong><br />
  在使用XenServer虚拟池的过程中，我们曾对使用snapshot进行断点备份寄以希望。甚至撰写了一个每天自动对所有正在运行的虚拟机Guest制作Snapshot的脚本，停止了手动备份工作。完全没有注意到XenServer中，每个虚拟机Guest至多只能有不超过30个snapshot的限制。直到发生灾难那一天，我们才发现snapshot已经停止多日，回滚中便丢失了大量数据。</p>
<p><strong>× 虚拟池中的Master的数据安全需要全力保证</strong><br />
  在多台XenServer组建的虚拟池中，物理主机之间是有Master/Slave之分的。其中Master的数据安全和稳定性尤其重要，容灾能力也会比较差。当Master遭遇不可逆的故障和灾难时，尽管其他Slave上运行的虚拟机Guest进程仍然还能正常工作一段时间，但是此时重启就变成了危险行为。Master的硬件稳定性是如此重要，现在我甚至会推荐Master上不运行任何Guest虚拟进程。</p>
<p><strong>× 留心网卡兼容性问题</strong><br />
  我的虚拟池物理主机是使用家用主板自己组装。板载RealTek RTL81xx系列的千兆网卡。幸运的是，XenServer可以识别和使用该系列芯片的千兆网卡，初期大大降低了硬件成本。但是不幸的是，我们发现<a href="http://forums.citrix.com/thread.jspa?threadID=278942">RealTek 系列网卡至少在最新的Xen 5.6+上无法保证无故障运行</a>，严重是还会导致虚拟机Host主机死锁。最终我们又另外购买了一组TP-LINK TG-3269C 千兆网卡来保证稳定性。</p>
<p><strong>× 升级XenServer版本要谨慎</strong><br />
  不只限于前述网卡兼容问题，XenServer生产版本升级会带来诸多<a href="http://forums.citrix.com/message.jspa?messageID=1545554">不稳定问题</a>。在Citrix论坛上也有大量的抱怨，有人几乎为此丢了工作。而且对于一组虚拟池来说，必须整组升级到相同版本，所以回退的成本也很高。面对这些问题，升级XenServer前务必要谨慎的考察。</p>
<p><strong>× Guest是有可能Crash宿主机的</strong><br />
通常我们认为虚拟机Guest是处于隔离状态的，因此认为Guest进程中无论发生什么不会影响物理主机Host的稳定的。但是实际运行中我们发现，运行的一些Guest操作系统是有可能导致宿主主机死锁或者崩溃的。我们是在安装运行一些FreeBSD的虚拟进程时发现这一现象的，其结果是最终会导致所有同一物理主机下的虚拟进程死锁。而这也是我们现在不再推荐在Master上运行Guest进程的一个原因。因为一旦Master锁死会导致更大的灾难。</p>
<p><strong>× 忘记密码后跳过fsck的方法</strong><br />
在Linux Guest中发生严重的文件系统损坏时，会在启动时要求输入完整的root密码并进行全面的fsck。如果这时候忘记了root密码（特别是全面推进证书登录后）是很尴尬的。碰到这种处境时，可以通过XenCenter设置该虚拟机Guest的属性 &#8211; General &#8211; Boot Options &#8211; OS boot parameters ， 改为 fastboot（跳过fsck阶段）或 single （进入单用户模式）来进入系统并进一步修复文件系统。</p>
<p><strong>× 切换Master的正确方法是在线状态中，登录Master并任命虚拟池中的另一台Slave担任新的Master</strong><br />
正因为Master在虚拟池中的主要性，当需要对Master进行软、硬件升级或调整时，必须要在Master上执行切换操作，将另一台物理主机制定为新的Master再进行维护。否则一旦Master在维护中出现故障，将会成为新的灾难。</p>
<blockquote><pre>from master:
xe pool-ha-disable
xe host-list
xe pool-designate-new-master host-uuid=

From XenCenter

1) Disable HA
2) Enter maintenance mode on Pool Master, will migrate all VMs to anohter host. During the Enter Maintenance mode dialog you will be asked to elect a new Pool Master.
3) Exit maintenance mode on old master
4) Enable HA</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.splayer.org/index.php/2011/06/xenserver-checklist/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>首个支持中文字幕匹配的硬件高清播放器</title>
		<link>http://blog.splayer.org/index.php/2011/05/splayer-eagetm60/</link>
		<comments>http://blog.splayer.org/index.php/2011/05/splayer-eagetm60/#comments</comments>
		<pubDate>Tue, 24 May 2011 07:46:05 +0000</pubDate>
		<dc:creator>Tomasen</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[焦点资讯]]></category>

		<guid isPermaLink="false">http://blog.splayer.org/?p=2869</guid>
		<description><![CDATA[自从射手影音软件发布以来，我们一直在倾听用户的声音。其中，希望在硬件高清播放机上实现优质智能字幕匹配功能服务的呼声，显得尤其强烈。 今年上半年，在与多家硬件厂商的洽谈中，我们看到了忆捷。忆捷是国内少有的关注品质并精于设计的硬件厂商。旗下的硬件高清播放器系列从功能、质量到易用设计，均在市场上首屈一指。射手将优质中文字幕平台服务，与忆捷的生产工艺结合，推出首个搭载优质中文字幕匹配服务的硬件播放器──射手忆捷M60特别版，将是一个具有划时代意义的产品。 射手忆捷M60特别版不仅全面支持所有的高清、标清格式，不论是高清的mkv/ts或是rm/rmvb一概通吃。而且当遇到没有中文字幕的影片时，就会启动射手智能字幕匹配进程，在画面中显示字幕。再也不用到网上下载。且采用射手的SubRank算法，将尽可能显示出当前最新也是最高质量的字幕。 目前，这款预计在5月底进入市场的硬件播放器，已经在开始射手的官方淘宝店（shop.shooter.cn）中展开预售活动。而且参与就有机会成为射手影音2周年纪念幸运用户并获得1TB硬盘特别奖。（活动细则详见店铺公告） 影音生活，射手相伴]]></description>
			<content:encoded><![CDATA[<p>自从射手影音软件发布以来，我们一直在倾听用户的声音。其中，希望在硬件高清播放机上实现优质智能字幕匹配功能服务的呼声，显得尤其强烈。<a href="http://shop.shooter.cn/"><img src="http://blog.splayer.org/wp-content/uploads/2011/05/4-300x210.png" alt="" title="splayer hardware" width="300" height="210" class="alignright size-medium wp-image-2912" /></a></p>
<p>今年上半年，在与多家硬件厂商的洽谈中，我们看到了忆捷。忆捷是国内少有的关注品质并精于设计的硬件厂商。旗下的硬件高清播放器系列从功能、质量到易用设计，均在市场上首屈一指。射手将优质中文字幕平台服务，与忆捷的生产工艺结合，推出首个搭载优质中文字幕匹配服务的硬件播放器──射手忆捷M60特别版，将是一个具有划时代意义的产品。</p>
<p>射手忆捷M60特别版不仅全面支持所有的高清、标清格式，不论是高清的mkv/ts或是rm/rmvb一概通吃。而且当遇到没有中文字幕的影片时，就会启动射手智能字幕匹配进程，在画面中显示字幕。再也不用到网上下载。且采用射手的SubRank算法，将尽可能显示出当前最新也是最高质量的字幕。</p>
<p>目前，这款预计在5月底进入市场的硬件播放器，已经在开始射手的官方淘宝店（<a href="http://shop.shooter.cn">shop.shooter.cn</a>）中展开预售活动。而且参与就有机会成为射手影音2周年纪念幸运用户并获得1TB硬盘特别奖。（活动细则详见店铺公告）</p>
<p>影音生活，射手相伴</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.splayer.org/index.php/2011/05/splayer-eagetm60/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>射手影音皮肤设计制作说明</title>
		<link>http://blog.splayer.org/index.php/2011/04/splayer-skin-manual/</link>
		<comments>http://blog.splayer.org/index.php/2011/04/splayer-skin-manual/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 17:22:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[日志]]></category>
		<category><![CDATA[skin]]></category>
		<category><![CDATA[SPlayer]]></category>
		<category><![CDATA[射手影音]]></category>
		<category><![CDATA[皮肤]]></category>

		<guid isPermaLink="false">http://blog.splayer.org/?p=2719</guid>
		<description><![CDATA[&#160; 一、了解影音皮肤设计框架 OK！同学们，现在开始给影音进行解剖，看看它的构造和我们人类有什么不同，解剖到任何区域我都由左往右一个个器官进行介绍，同学们要坚持住哦！ 区域1： 影音的顶部，由顶部背景图片、LOGO文字图片、缩进系统按钮、缩小按钮、延展按钮（原始大小）、关闭按钮组成。 区域2： 影音的tips，先由tips背景图片，左边由放大1倍、放大2倍、标准画面（去上下黑边、去左右黑边）、音轨选择、画质增益，右边由正常播放（单曲循环、列表循环）、亮度对比度、截图、全屏切换（原始缩进）、窗口置前（窗口正常）、关闭按钮（全屏时才出现）组成。 区域3： 影音的控制栏，先是控制栏背景图片，剩下的先分为左、中、右三个部分来观察它吧 左边由LOGO、分享按钮、字幕左箭头、字幕按钮、字幕右箭头 中边由上一段、快退、停止、播放（暂停）、步进、快进、下一段 右边由打开文件、播放列表、设置面板、声音开启（静音）、声音大小调节按钮、声音调整背景图组成 区域4： 影音的边框由影音边框组成组成 区域5： 影音的打开文件部分，由影音打开文件按钮组成 这个打开文件与区域3右边的打开文件功能一样但视觉大小有区别 &#160; 二、影音皮肤设计制作要点 上一节我们对影音进行了全面解剖，额~大家小心点不要踩到，不然影响后期拼装，配合一下，谢谢 …… OK，知道了影音的组成元素，要记住他们哦，麻雀虽小，五脏还是要全的！ 背景图片制作方法： (在skins文件甲下创建一个FrameCfg.dat) 区域1： 顶部背景图片 分为ABC三个部分组成一张图，A与C同等宽度与高度，B则横向无限延展 编辑FrameCfg.dat //标题栏 CAPTIONHEIGHT:31;  //标题栏框横向延展图高度B区域 LCAPTIONTHICKWIDTH:3;//标题栏框左边图宽度A区域 RCAPTIONTHICKWIDTH:3;//标题栏框右边图宽度C区域 &#160; 区域2： tips背景图片，为一个颜色块来做横向无限延展背景图 区域3： 控制栏背景图片 切掉两边取中间A部分1px图横向无限延展 声音调整背景图 作为贴图背景 区域4： 影音边框 取4个角，4个1px边做为无限延展 编辑FrameCfg.dat //框架 FRAMECORNERWIDTH:3;//圆角的宽度 FRAMECORNERHEIGHT:3;//圆角的高度 LFRAMETHICKHEIGHT:1;//左边框纵向延展高度 TFRAMETHICKWIDTH:1;//顶部框横向延展宽度 RFRAMETHICKHEIGHT:1;//左边框纵向延展高度 BFRAMETHICKWIDTH:1;//底部框横向延展宽度 按钮图片制作方法： 所有的可操作按钮只需要做一张显示图即可，操作的状态效果系统会自动实现，减轻了很大的工作量，还不错吧 制作规范： [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<div>
<p style="font-size: large;font-weight: bold">一、了解影音皮肤设计框架</p>
</div>
<p>OK！同学们，现在开始给影音进行解剖，看看它的构造和我们人类有什么不同，解剖到任何区域我都由左往右一个个器官进行介绍，同学们要坚持住哦！ <br /><span id="more-2719"></span><br />
    <img width="688" height="404" src="http://blog.splayer.org/wp-content/uploads/2011/04/untitled_clip_image001.jpg" alt="C:\暂存\工作——播放器\播放器UI\2011版播放器\皮肤设计说明文档\jieshuo.jpg"><br />
    <strong>区域1：</strong> <br />
  影音的顶部，由顶部背景图片、LOGO文字图片、缩进系统按钮、缩小按钮、延展按钮（原始大小）、关闭按钮组成。 </p>
<p><strong>区域2：</strong> <br />
影音的tips，先由tips背景图片，左边由放大1倍、放大2倍、标准画面（去上下黑边、去左右黑边）、音轨选择、画质增益，右边由正常播放（单曲循环、列表循环）、亮度对比度、截图、全屏切换（原始缩进）、窗口置前（窗口正常）、关闭按钮（全屏时才出现）组成。 </p>
<p><strong>区域3：</strong> <br />
  影音的控制栏，先是控制栏背景图片，剩下的先分为左、中、右三个部分来观察它吧 <br />
  左边由LOGO、分享按钮、字幕左箭头、字幕按钮、字幕右箭头 <br />
  中边由上一段、快退、停止、播放（暂停）、步进、快进、下一段 <br />
右边由打开文件、播放列表、设置面板、声音开启（静音）、声音大小调节按钮、声音调整背景图组成 </p>
<p><strong>区域4：</strong> <br />
影音的边框由影音边框组成组成 </p>
<p><strong>区域5： </strong><br />
  影音的打开文件部分，由影音打开文件按钮组成 <br />
这个打开文件与区域3右边的打开文件功能一样但视觉大小有区别 </p>
<p>&nbsp;</p>
<div>
<p style="font-size: large;font-weight: bold">二、影音皮肤设计制作要点</p>
</div>
<p>上一节我们对影音进行了全面解剖，额~大家小心点不要踩到，不然影响后期拼装，配合一下，谢谢 ……<br />
  OK，知道了影音的组成元素，要记住他们哦，麻雀虽小，五脏还是要全的！</p>
<p>背景图片制作方法：<br />
(在skins文件甲下创建一个FrameCfg.dat)</p>
<p><strong>区域1： </strong><br />
顶部背景图片<br />
<img width="720" height="66" src="http://blog.splayer.org/wp-content/uploads/2011/04/untitled_clip_image003.jpg" alt="C:\暂存\工作——播放器\播放器UI\2011版播放器\皮肤设计说明文档\Untitled-1.jpg"><br />
分为ABC三个部分组成一张图，A与C同等宽度与高度，B则横向无限延展 </p>
<p>编辑FrameCfg.dat<br />
  //标题栏 <br />
  CAPTIONHEIGHT:31;  //标题栏框横向延展图高度B区域 <br />
  LCAPTIONTHICKWIDTH:3;//标题栏框左边图宽度A区域 <br />
  RCAPTIONTHICKWIDTH:3;//标题栏框右边图宽度C区域 </p>
<p>&nbsp;</p>
<p><strong>区域2：</strong> <br />
tips背景图片<img width="11" height="20" src="http://blog.splayer.org/wp-content/uploads/2011/04/untitled_clip_image004.jpg" alt="C:\暂存\工作——播放器\播放器UI\2011版播放器\Untitled-2.jpg">，为一个颜色块来做横向无限延展背景图 </p>
<p><strong>区域3：</strong> <br />
控制栏背景图片<br />
<img width="720" height="119" src="http://blog.splayer.org/wp-content/uploads/2011/04/untitled_clip_image006.jpg" alt="C:\暂存\工作——播放器\播放器UI\2011版播放器\皮肤设计说明文档\Untitled-3.jpg"><br />
切掉两边取中间A部分1px图横向无限延展 </p>
<p>声音调整背景图<br />
<img width="154" height="27" src="http://blog.splayer.org/wp-content/uploads/2011/04/untitled_clip_image008.jpg"><br />
作为贴图背景 </p>
<p><strong>区域4： </strong><br />
影音边框</p>
<p><img width="719" height="244" src="http://blog.splayer.org/wp-content/uploads/2011/04/untitled_clip_image009.jpg" alt="C:\暂存\工作——播放器\播放器UI\2011版播放器\皮肤设计说明文档\Untitled-4.jpg"></p>
<p>取4个角，4个1px边做为无限延展 <br />
  编辑FrameCfg.dat<br />
  //框架 <br />
  FRAMECORNERWIDTH:3;//圆角的宽度 <br />
  FRAMECORNERHEIGHT:3;//圆角的高度 <br />
  LFRAMETHICKHEIGHT:1;//左边框纵向延展高度 <br />
  TFRAMETHICKWIDTH:1;//顶部框横向延展宽度 <br />
  RFRAMETHICKHEIGHT:1;//左边框纵向延展高度 <br />
BFRAMETHICKWIDTH:1;//底部框横向延展宽度 </p>
<p><em><strong>按钮图片制作方法：</strong></em></p>
<p><img width="682" height="30" src="http://blog.splayer.org/wp-content/uploads/2011/04/untitled_clip_image011.jpg"><br />
  所有的可操作按钮只需要做一张显示图即可，操作的状态效果系统会自动实现，减轻了很大的工作量，还不错吧 </p>
<p><em><strong>制作规范：</strong></em></p>
<p>图片格式：bmp<br />
  图片尺寸：无 <br />
  图片命名：需与原始文件名对应上，见影音元素命名表 </p>
<p><em><strong>&nbsp;<br />
图片元素命名表：</strong></em> </p>
<p><strong>区域1： </strong><br />
  顶部背景图片           CAPTION<br />
  LOGO文字图片        CAPTIONTEXT<br />
  缩进系统按钮          BTN_MINTOTRAY_SINGLE<br />
  缩小按钮                   MINIMIZE_SINGLE<br />
  延展按钮                    MAXIMIZE_SINGLE               原始大小        RESTORE_SINGLE<br />
关闭按钮                   CLOSE_SINGLE     </p>
<p><strong>区域2： </strong><br />
  tips背景图片              TOPBACKGROUND<br />
  放大1倍                     TOP_1X_SINGLE<br />
  放大2倍                     TOP_2X_SINGLE<br />
  标准画面        TOP_NORMAL_WIDER_SINGLE<br />
  （去上下黑边TOP_NORMAL_SINGLE                、            去左右黑边TOP_LETTERBOX_WIDER_SINGLE） <br />
  音轨选择       TOP_AUDIO_SINGLE<br />
  画质增益        TOP_VIDEO_SINGLE<br />
  正常播放        TOP_NOCYCLE_SINGLE<br />
  （单曲循环TOP_SINGLECYCLE_SINGLE          、        列表循环TOP_ALLCYCLE_SINGLE） <br />
  亮度对比度             TOP_GAMMA_SINGLE<br />
  截图                   TOP_CAPTURE_SINGLE<br />
  全屏切换      TOP_FULLSCREEN_SINGLE               （原始缩进TOP_RESTORE_SINGLE） <br />
  窗口置前      pinail2_SINGLE （窗口正常pinail_SINGLE）   <br />
  关闭按钮      TOP_CLOSE_SINGLE </p>
<p>
  <strong>区域3：</strong> <br />
  控制栏背景图片      BOTTOMBACKGROUND <br />
  左边由 <br />
  LOGO                        SPLAYER<br />
  分享按钮                BTN_SHARE_SINGLE<br />
  字幕左箭头           BTN_SUB_DELAY_REDUCE_SINGLE<br />
  字幕按钮               BTN_SUB_SINGLE<br />
  字幕右箭头          BTN_SUB_DELAY_INCREASE_SINGLE<br />
  中边由 <br />
  上一段                  BTN_PREV_SINGLE<br />
  快退                      FAST_BACKWORD_SINGLE<br />
  停止                     BTN_STOP_SINGLE<br />
  播放         BTN_PLAY_SINGLE           （暂停          BTN_PAUSE_SINGLE） <br />
  步进             BTN_STEP_SINGLE<br />
  快进              FAST_FORWORD_SINGLE<br />
  下一段          BTN_NEXT_SINGLE<br />
  右边由 <br />
  打开文件              BTN_OPENFILE_SMALL_SINGLE<br />
  播放列表              BTN_PLAYLIST_SINGLE<br />
  设置面板              BTN_SETTING_SINGLE<br />
  声音开启     VOLUME_SINGLE      （静音    MUTED_SINGLE）            <br />
  声音大小调节按钮      VOLUME_TM_SINGLE<br />
  声音调整背景图      VOLUME_BG </p>
<p><strong>区域4： </strong><br />
  <strong>影音的边框由影音边框组成    FRAMECORNER </strong></p>
<p><strong>区域5：</strong> <br />
  影音打开文件按钮       BTN_BIGOPEN_SINGLE</p>
<p><strong>其他元素： </strong><br />
  预览图      皮肤名称 single <br />
  影音标示       watermark2</p>
<div>
  <span style="font-size: large;font-weight: bold">三、上传 </span></div>
<p>步骤： <br />
  1：整理好图片元素，对应好图片名 <br />
  2：在SPlayer\skins下自建文件夹命名为xxxx<br />
  3：再将整理好的图片元素放入xxxx中 <br />
  4：打开射手影音播放器右键   界面==》选择xxxx皮肤 <br />
  5：恭喜您已经成功的做了一套符合自己的皮肤了 </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.splayer.org/index.php/2011/04/splayer-skin-manual/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>射手影音发布3.7&#160;开始提供自定义皮肤</title>
		<link>http://blog.splayer.org/index.php/2011/04/splayer-3-7/</link>
		<comments>http://blog.splayer.org/index.php/2011/04/splayer-3-7/#comments</comments>
		<pubDate>Fri, 08 Apr 2011 02:01:32 +0000</pubDate>
		<dc:creator>skybook888</dc:creator>
				<category><![CDATA[焦点资讯]]></category>
		<category><![CDATA[SPlayer]]></category>
		<category><![CDATA[射手影音]]></category>
		<category><![CDATA[射手播放器]]></category>

		<guid isPermaLink="false">http://blog.splayer.org/index.php/2011/04/%e5%b0%84%e6%89%8b%e5%bd%b1%e9%9f%b33-7/</guid>
		<description><![CDATA[射手影音播放器自诞生以来，一直秉持着绿色、小巧、开源、安全、免打扰的特色，并致力于提供最高质量最精准的字幕匹配服务。感谢所有用户和开发者对射手的支持和肯定，射手影音又迎来了3.7版。而这个版本中，我们最主要的改进是开始提供一个新的自定义皮肤系统。这也意味着射手影音的界面将会进入一个更加个性化的新时代。 与3.7版同时发布的，还有我们的设计者提供的3款基本皮肤包来抛砖引玉 只要在菜单-界面中关闭玻璃界面，即可看到皮肤选项。在后续版本中我们还会逐步加入更多绚丽的皮肤，娱乐之余可以让您有更加个性化的体验。 当然，我们也开放了皮肤的DIY功能，并提供了设计文档「射手影音皮肤制作方法」。只要按图索骥，你也可以打造属于自己的专属播放器。当然，你如果有好的皮肤设计方案，我们很欢迎你通过各种方式（skins@splayer.org）提交给我们，并发布到官方皮肤列表中，让你设计的皮肤可以与全世界用户分享。 注：因为Win7玻璃效果与传统界面设计上有巨大的不同，因此自定义皮肤功能初期仅在未开启玻璃效果时可见。 3.7版的更多更新内容还包括： 显著提高了打开文件的速度 大幅改善播放ts类文件的兼容性 更好的支持了蓝光高清等多种格式 支持显示蓝光原盘中的字幕 自动记忆蓝光的音轨和字幕使用习惯 改善播放网络文件的缓存机制和回放性能 用户界面： 播放时间和剩余时间显示在时间栏两侧 当播放器不处于播放状态时，不再保持前端显示的状态，不会在屏幕前打扰您 调整菜单布局，将“删除当前文件/文件夹”的功能移动至帮助菜单尾部 右上角增加控制循环/随机播放的按钮 视频兼容性： 解决安装QIYI影音后导致冲突不能正常播放文件的问题 支持 FRAPS 录制的MPEG编码的 avi 文件 支持多视频轨道的mkv著 字幕相关： 支持m4v（apple）文件中的字幕 增加更多字幕字体侯选项（楷体） 射手影音一直坚持用户体验至上的原则来改进我们的产品，我们希望新版本能让你更好的观看视频。我们也希望用户能多多给我们意见与建议到 http://feedback.splayer.org。你的支持是我们不断完善产品的原动力。 下载：最新标准版安装包 主页：http://splayer.org 微博：@沈晟 微群：@射手影音 Twitter：@ShooterPlayer]]></description>
			<content:encoded><![CDATA[<p><a href="http://splayer.org"><img src="/wp-content/uploads/2010/09/splayer_icon_128.png" alt="" title="splayer_icon_128" width="128" height="128" class="alignright size-full wp-image-2302" /></a>射手影音播放器自诞生以来，一直秉持着绿色、小巧、开源、安全、免打扰的特色，并致力于提供最高质量最精准的字幕匹配服务。感谢所有用户和开发者对射手的支持和肯定，射手影音又迎来了3.7版。而这个版本中，我们最主要的改进是开始提供一个新的自定义皮肤系统。这也意味着射手影音的界面将会进入一个更加个性化的新时代。</p>
<p>与3.7版同时发布的，还有我们的设计者提供的3款基本皮肤包来抛砖引玉<br />
<img class="alignnone size-medium wp-image-2739" src="http://blog.splayer.org/wp-content/uploads/2011/04/预览——蓝色经典-300x203.png" alt="" width="300" height="203" /> <img class="alignnone size-medium wp-image-2739" src="http://blog.splayer.org/wp-content/uploads/2011/04/预览——时尚炫黑-300x203.png" alt="" width="300" height="203" /><br />
只要在菜单-界面中关闭玻璃界面，即可看到皮肤选项。在后续版本中我们还会逐步加入更多绚丽的皮肤，娱乐之余可以让您有更加个性化的体验。<img src="http://blog.splayer.org/wp-content/uploads/2011/04/4-16-2011-11-13-26-PM.png" alt="" title="4-16-2011 11-13-26 PM" width="421" height="263" class="alignright size-full wp-image-2789" /></p>
<p>当然，我们也开放了皮肤的DIY功能，并提供了设计文档<a title="点这里查看皮肤制作方法" href="/index.php/2011/04/splayer-skin-manual/">「射手影音皮肤制作方法」</a>。只要按图索骥，你也可以打造属于自己的专属播放器。当然，你如果有好的皮肤设计方案，我们很欢迎你通过各种方式（skins@splayer.org）提交给我们，并发布到官方皮肤列表中，让你设计的皮肤可以与全世界用户分享。</p>
<p><em>注：因为Win7玻璃效果与传统界面设计上有巨大的不同，因此自定义皮肤功能初期仅在未开启玻璃效果时可见。</em></p>
<p>3.7版的更多更新内容还包括：<br />
显著提高了打开文件的速度<br />
大幅改善播放ts类文件的兼容性<br />
更好的支持了蓝光高清等多种格式<br />
支持显示蓝光原盘中的字幕<br />
自动记忆蓝光的音轨和字幕使用习惯<br />
改善播放网络文件的缓存机制和回放性能</p>
<p>用户界面：<br />
播放时间和剩余时间显示在时间栏两侧<br />
当播放器不处于播放状态时，不再保持前端显示的状态，不会在屏幕前打扰您<br />
调整菜单布局，将“删除当前文件/文件夹”的功能移动至帮助菜单尾部<br />
右上角增加控制循环/随机播放的按钮</p>
<p>视频兼容性：<br />
解决安装QIYI影音后导致冲突不能正常播放文件的问题<br />
支持 FRAPS 录制的MPEG编码的 avi 文件<br />
支持多视频轨道的mkv著</p>
<p>字幕相关：<br />
支持m4v（apple）文件中的字幕<br />
增加更多字幕字体侯选项（楷体）</p>
<p>射手影音一直坚持用户体验至上的原则来改进我们的产品，我们希望新版本能让你更好的观看视频。我们也希望用户能多多给我们意见与建议到 http://feedback.splayer.org。你的支持是我们不断完善产品的原动力。</p>
<p>下载：<a href="http://file.splayer.org/SPlayerSetup.exe">最新标准版安装包</a>   主页：<a href="http://splayer.org">http://splayer.org</a><br />
微博：<a href="http://weibo.com/tomasen">@沈晟</a> 微群：<a href="http://q.weibo.com/289630">@射手影音</a> Twitter：<a href="http://twitter.com/ShooterPlayer">@ShooterPlayer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.splayer.org/index.php/2011/04/splayer-3-7/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
		<item>
		<title>{如何加入开源项目的小手册}</title>
		<link>http://blog.splayer.org/index.php/2011/03/how-to-join-open-source-project/</link>
		<comments>http://blog.splayer.org/index.php/2011/03/how-to-join-open-source-project/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 05:27:55 +0000</pubDate>
		<dc:creator>Tomasen</dc:creator>
				<category><![CDATA[日志]]></category>
		<category><![CDATA[patch]]></category>
		<category><![CDATA[开源]]></category>

		<guid isPermaLink="false">http://blog.splayer.org/?p=2573</guid>
		<description><![CDATA[参与开源项目，可以快速提高自己的技术水平，学到很多学校中学不到但在工作中会非常有帮助的技巧。一份参与过开源项目的履历，也越来越受到用人单位的重视。所以最近几年，我们技术爱好者对开源项目投入的关注是越来越多了。可仍会看到很多对开源项目充满兴趣和热情的同学，用了错误的方式方法以至于不得其门而入。这段时间我特意将自己的心得整理了一下，供爱好者参考。 第一阶段：看和学 在和一些开源爱好者的接触过程中，我发现很多人都对自己关注的项目缺乏技术层面的理解。不论是对功能、代码或者项目的设计方向都很模糊，甚至大部分连代码都没有下载编译过。我想提醒爱好者的是，参与开源项目并不是靠一个简单的意愿就可以驱动的进程。阅读项目代码和了解设计脉络是必须的！ 从小处着手：尝试修正bug/issue 绝大部分面向公众开放的开源项目都有issue区或者bug tracker。所谓issue区，也就是问题汇总。对项目有兴趣的爱好者，与其漫无目的开始，不如在issue/bug中先找到一个自己感兴趣的小问题，作为第一个目标并尝试解决它。 制作patch patch又叫做补丁。是用来修补代码的文本文件。一个典型的patch文件例如: --- clinkcc.orig/configure.in 2005-11-14 18:08:07.000000000 +0100 +++ clinkcc/configure.in 2005-11-14 18:08:13.000000000 +0100 @@ -150,6 +150,7 @@ AC_CHECK_FUNCS([iconv]) +AM_ICONV 可以看到patch文件是对修改前和修改后文件进行了比较，并将有差异的部分记录在文件中。例如使用命令行工具diff来制作的patch： diff -u oldFile newFile &#62; mods.diff 很多可视化版本管理工具本身也自带制作patch的功能。 通过小巧的patch，项目管理者可以快速的看到修订内容并进行评估。如果没有patch，项目管理者就很难对修改做出是否可用的判断。所以为了不浪费双方的时间，掌握制作patch的专业技巧也是必须的。 熟悉版本管理系统 开源项目中使用的版本管理系统的种类越来越多。除了被淘汰的cvs、传统主流的svn，新的版本管理体系例如Git和Mercutial(Hg)越来越流行。系统越来越多，确实增加了开发者的学习成本。但也只有掌握版本管理系统，才有可能和其他项目开发者并行开发并进行友好的协作。因此在完成第一个issue的阶段，也是摸熟版本管理工具的好时机，要好好把握。 代码规范 现代的各大开源项目对代码规范的要求越来越严格。在几十人以上和近百万行代码的项目中，必须依赖代码规范来保证代码的可读性。所以在撰写代码时，一定要注意是否符合该项目中对代码规范的要求，以免被退票。 遵守规则 一些大型项目中，可能还有除了代码规范之外的项目规则。一定要仔细阅读清楚主页或开发者社区的相关说明，以避免不必要口舌。 更进一步 联系项目管理者 当有一些可能带来重大改变的想法时，务必要先和项目管理者保持良好的沟通。通过email或邮件列表或irc将你的想法描述清楚。获得项目管理者和项目中其他开发者的认同和帮助是一个关键。附带提一句，初次联络时，务必不要忘记自我介绍，这并不仅仅是礼貌，更是建立信任的主要基础。 成为固定成员 通过积累patch和建立信任的阶段之后，通常管理者都会主动邀请你成为固定的开发成员。对于这个问题，我的建议是保持良好的心态，该来的自然会来。 建立新的分支或Fork Fork是我认为很难翻译的词。Fork的原意就是餐具中的叉子，没有任何褒贬的倾向。在开发者的世界，可以将它理解为师出同源的几个叉子尖。当你对项目有一个“狂野”的想法时，项目管理者可能并不愿意在项目中看到这样的实验性分支。这时就可以fork一个分支项目，来实现自己的想法。尤其是git和hg大流行的背景下，fork后再merge back变得很容易，所以fork对项目的维护负担也减小变得更容易被接受。 时间管理 绝大部分参与开源项目的开发者都是利用业余时间来撰写代码的。所以良好的时间管理，才能帮助你有效的达成目标。近年来开源项目的技术规格越来越高，有一个预先制定的时间表，更能帮助你准备好一个良好的心态而不至半途而废。只要用心和持之以恒，你就会受到关注和尊重，甚至是雇主的重新评估乃至嘉许。 希望这篇小手册可以帮更多开发者轻松的参与到更多国际化的开源项目中。也欢迎随时关注射手的开源项目 http://hg.splayer.org/splayer/]]></description>
			<content:encoded><![CDATA[<p>参与开源项目，可以快速提高自己的技术水平，学到很多学校中学不到但在工作中会非常有帮助的技巧。一份参与过开源项目的履历，也越来越受到用人单位的重视。所以最近几年，我们技术爱好者对开源项目投入的关注是越来越多了。可仍会看到很多对开源项目充满兴趣和热情的同学，用了错误的方式方法以至于不得其门而入。这段时间我特意将自己的心得整理了一下，供爱好者参考。</p>
<h2>第一阶段：看和学</h2>
<p>在和一些开源爱好者的接触过程中，我发现很多人都对自己关注的项目缺乏技术层面的理解。不论是对功能、代码或者项目的设计方向都很模糊，甚至大部分连代码都没有下载编译过。我想提醒爱好者的是，参与开源项目并不是靠一个简单的意愿就可以驱动的进程。阅读项目代码和了解设计脉络是必须的！</p>
<h3>从小处着手：尝试修正bug/issue</h3>
<p>绝大部分面向公众开放的开源项目都有issue区或者bug tracker。所谓issue区，也就是问题汇总。对项目有兴趣的爱好者，与其漫无目的开始，不如在issue/bug中先找到一个自己感兴趣的小问题，作为第一个目标并尝试解决它。<span id="more-2573"></span></p>
<h3>制作patch</h3>
<p>patch又叫做补丁。是用来修补代码的文本文件。一个典型的patch文件例如:</p>
<blockquote><p><code>--- clinkcc.orig/configure.in	2005-11-14 18:08:07.000000000 +0100<br />
+++ clinkcc/configure.in	2005-11-14 18:08:13.000000000 +0100<br />
@@ -150,6 +150,7 @@<br />
AC_CHECK_FUNCS([iconv])<br />
+AM_ICONV</code></p></blockquote>
<p>可以看到patch文件是对修改前和修改后文件进行了比较，并将有差异的部分记录在文件中。例如使用命令行工具diff来制作的patch：</p>
<blockquote><p><code>diff -u oldFile newFile &gt; mods.diff</code></p></blockquote>
<p>很多可视化版本管理工具本身也自带制作patch的功能。<br />
通过小巧的patch，项目管理者可以快速的看到修订内容并进行评估。如果没有patch，项目管理者就很难对修改做出是否可用的判断。所以为了不浪费双方的时间，掌握制作patch的专业技巧也是必须的。</p>
<h3>熟悉版本管理系统</h3>
<p>开源项目中使用的版本管理系统的种类越来越多。除了被淘汰的cvs、传统主流的svn，新的版本管理体系例如Git和Mercutial(Hg)越来越流行。系统越来越多，确实增加了开发者的学习成本。但也只有掌握版本管理系统，才有可能和其他项目开发者并行开发并进行友好的协作。因此在完成第一个issue的阶段，也是摸熟版本管理工具的好时机，要好好把握。</p>
<h3>代码规范</h3>
<p>现代的各大开源项目对代码规范的要求越来越严格。在几十人以上和近百万行代码的项目中，必须依赖代码规范来保证代码的可读性。所以在撰写代码时，一定要注意是否符合该项目中对代码规范的要求，以免被退票。</p>
<h3>遵守规则</h3>
<p>一些大型项目中，可能还有除了代码规范之外的项目规则。一定要仔细阅读清楚主页或开发者社区的相关说明，以避免不必要口舌。</p>
<h2>更进一步</h2>
<h3>联系项目管理者</h3>
<p>当有一些可能带来重大改变的想法时，务必要先和项目管理者保持良好的沟通。通过email或邮件列表或irc将你的想法描述清楚。获得项目管理者和项目中其他开发者的认同和帮助是一个关键。附带提一句，初次联络时，务必不要忘记自我介绍，这并不仅仅是礼貌，更是建立信任的主要基础。</p>
<h3>成为固定成员</h3>
<p>通过积累patch和建立信任的阶段之后，通常管理者都会主动邀请你成为固定的开发成员。对于这个问题，我的建议是保持良好的心态，该来的自然会来。</p>
<h3>建立新的分支或Fork</h3>
<p>Fork是我认为很难翻译的词。Fork的原意就是餐具中的叉子，没有任何褒贬的倾向。在开发者的世界，可以将它理解为师出同源的几个叉子尖。当你对项目有一个“狂野”的想法时，项目管理者可能并不愿意在项目中看到这样的实验性分支。这时就可以fork一个分支项目，来实现自己的想法。尤其是git和hg大流行的背景下，fork后再merge back变得很容易，所以fork对项目的维护负担也减小变得更容易被接受。</p>
<h2>时间管理</h2>
<p>绝大部分参与开源项目的开发者都是利用业余时间来撰写代码的。所以良好的时间管理，才能帮助你有效的达成目标。近年来开源项目的技术规格越来越高，有一个预先制定的时间表，更能帮助你准备好一个良好的心态而不至半途而废。只要用心和持之以恒，你就会受到关注和尊重，甚至是雇主的重新评估乃至嘉许。</p>
<p>希望这篇小手册可以帮更多开发者轻松的参与到更多国际化的开源项目中。也欢迎随时关注射手的开源项目 <a href="http://hg.splayer.org/splayer/">http://hg.splayer.org/splayer/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.splayer.org/index.php/2011/03/how-to-join-open-source-project/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>随笔：“开源谈的其实是言论自由，不是免费啤酒”</title>
		<link>http://blog.splayer.org/index.php/2011/02/four-freedoms-of-gpl-free-speech-not-free-beer/</link>
		<comments>http://blog.splayer.org/index.php/2011/02/four-freedoms-of-gpl-free-speech-not-free-beer/#comments</comments>
		<pubDate>Tue, 08 Feb 2011 12:44:20 +0000</pubDate>
		<dc:creator>Tomasen</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[日志]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[fsf]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[开源]]></category>

		<guid isPermaLink="false">http://blog.splayer.org/?p=2601</guid>
		<description><![CDATA[开源来自自由软件运动。以下内容引自 www.gnu.org。GNU就是自由软件基金会（FSF）旗下GPL(GNU Public License)中的G。中文部分是我的学习笔记： Free software中的“Free”是指“自由”。换句话说，我们指的是言论自由，而不是免费啤酒。“Free software” is a matter of liberty, not price. To understand the concept, you should think of “free” as in “free speech”, not as in “free beer”. 自由软件关乎用户运行、复制、分发、改进软件的基本自由。更精确地，我们可以将之列为四大基本自由。Free software is a matter of the users&#8217; freedom to run, copy, distribute, study, change and improve the software. More precisely, it means [...]]]></description>
			<content:encoded><![CDATA[<p>开源来自自由软件运动。以下内容引自 <a href="http://www.gnu.org/">www.gnu.org</a>。GNU就是自由软件基金会（FSF）旗下GPL(GNU Public License)中的<strong>G</strong>。中文部分是我的学习笔记：</p>
<p>Free software中的“Free”是指“自由”。换句话说，我们指的是言论自由，而不是免费啤酒。<span style="font-size: 0.75em;">“<a href="http://www.gnu.org/philosophy/free-sw.html">Free software</a>” is a matter of liberty, not price. To understand the concept, you should think of “free” as in “free speech”, not as in “free beer”.</span></p>
<p>自由软件关乎用户运行、复制、分发、改进软件的基本自由。更精确地，我们可以将之列为四大基本自由。<span style="font-size: 0.75em;">Free software is a matter of the users&#8217; freedom to run, copy, distribute, study, change and improve the software. More precisely, it means that the program&#8217;s users have the four essential freedoms</span>：</p>
<p>* 运行的自由。<span style="font-size: 0.75em;">The freedom to run the program, for any purpose (freedom 0).</span><br />
* 学习和修改的自由。开源是保证这个自由的前提。<span style="font-size: 0.75em;">The freedom to study how the program works, and adapt it to your needs (freedom 1). Access to the source code is a precondition for this.</span><br />
* 复制分发的自由。<span style="font-size: 0.75em;">The freedom to redistribute copies so you can help your neighbor (freedom 2).</span><br />
* 对软件进行改进的自由。开源是保证这个自由的前提。<span style="font-size: 0.75em;">The freedom to improve the program, and release your improvements to the public, so that the whole community benefits (freedom 3). Access to the source code is a precondition for this.</span></p>
<p>射手影音（SPlayer）作为开源运动的支持者和受益者，一直信仰这种自由理念。而我个人，也是因对软件进行改进的这项自由而开始爱上开源。我们希望所有开源爱好者都不要忘记开源运动诞生自这种自由。</p>
<p><!-- 射手影音基于开源社区的产品，作出了自己的改进，这是我们的自由。我们也希望所有开源爱好者都不要忘记这种自由，利用我们的源码，作出自己的改进。 --></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.splayer.org/index.php/2011/02/four-freedoms-of-gpl-free-speech-not-free-beer/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
		<item>
		<title>射手影音登陆苹果应用商店(Mac App&#160;Store)</title>
		<link>http://blog.splayer.org/index.php/2011/02/splayerx-landing-on-mac-app-store/</link>
		<comments>http://blog.splayer.org/index.php/2011/02/splayerx-landing-on-mac-app-store/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 15:46:55 +0000</pubDate>
		<dc:creator>Tomasen</dc:creator>
				<category><![CDATA[日志]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[SPlayerX]]></category>
		<category><![CDATA[射手影音]]></category>

		<guid isPermaLink="false">http://blog.splayer.org/?p=2587</guid>
		<description><![CDATA[经过苹果1个月的审核，射手影音Mac版登上了苹果应用商店(Mac App Store)。很意外很意外的，竟然一度被放在了Top Paid栏目榜首。这令我受宠若惊，因为这是我第一次使用App Store，对漫长的审核期和规则都不够了解，甚至连软件名称和描述都还没来得及做本地化的处理。这实在是令我很不好意思。如果有可能的话，我心底里反而希望用户等到下一个更好的版本之后再下载和使用。 射手影音Mac版没有以免费的形式发布，而是以$1.99作为一个开始，也是射手对消费模式的一次尝试。我们希望用户是因为射手提供的字幕匹配服务和稳定的后续开发而决定购买。如果发现有任何不足，欢迎来我们的反馈区发表意见。如果还想继续试用免费版本或者检视源码，也可以随时到 http://splayer.org/splayerx/ 下载。 另外，SPlayerX的排名提升引起了一些MPlayerX老用户的注意。让我们发现一些用户对射手与MPlayerX的关系存在误解。我想借此机会澄清一下： * 首先，SPlayerX销售额的30%会以捐赠的形式支持相关开源项目 [*注]。 * 从去年开始，我们就和MPlayerX的作者niltsh保持着积极而友好的沟通。 * 从第一天开始，SPlayerX的首页、安装包和关于中都不讳言，且非常明确的说明了与MPlayerX的关系。 * 我衷心希望射手能够借力App Store，返回来支持niltsh，并与MPlayerX一起成长。 * 射手科技一直在尝试为开源项目带来健康发展的模式。Mac版作为我们的一个实验项目，以此种形式作为起点也是模式上的一次探索。希望能在开源这条路上走的更健康更顺利。 注：MPlayerX的作者婉言谢绝了我们的捐助，所以我们会以其他方式回馈给开源社区]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://a11.phobos.apple.com/us/r1000/007/Purple/e2/9e/ce/mzi.mzaubamk.175x175-75.png" title="SPlayerX" class="alignright" width="175" height="175" /><br />
经过苹果1个月的审核，射手影音Mac版<a href="http://itunes.apple.com/app/id414675434?mt=12">登上了苹果应用商店(Mac App Store)</a>。很意外很意外的，竟然一度被放在了Top Paid栏目榜首。这令我受宠若惊，因为这是我第一次使用App Store，对漫长的审核期和规则都不够了解，甚至连软件名称和描述都还没来得及做本地化的处理。这实在是令我很不好意思。如果有可能的话，我心底里反而希望用户等到下一个更好的版本之后再下载和使用。<br />
射手影音Mac版没有以免费的形式发布，而是以$1.99作为一个开始，也是射手对消费模式的一次尝试。我们希望用户是因为射手提供的字幕匹配服务和稳定的后续开发而决定购买。如果发现有任何不足，欢迎来我们的<a href="http://feedback.splayer.org/forums/100639-mac-splayerx">反馈区</a>发表意见。如果还想继续试用免费版本<ins datetime="2011-02-10T13:43:42+00:00">或者检视源码</ins>，也可以随时到 http://splayer.org/splayerx/ 下载。<br />
<span id="more-2587"></span><br />
另外，SPlayerX的排名提升引起了一些MPlayerX老用户的注意。让我们发现一些用户对射手与MPlayerX的关系存在误解。我想借此机会澄清一下：<br />
* 首先，SPlayerX销售额的30%会以捐赠的形式支持相关开源项目 <a href='#remark1'>[*注]</a>。<br />
* 从去年开始，我们就和MPlayerX的作者<a href="https://bitbucket.org/niltsh">niltsh</a>保持着积极而友好的沟通。<br />
* 从第一天开始，SPlayerX的首页、安装包和关于中都不讳言，且非常明确的说明了与MPlayerX的关系。<br />
* 我衷心希望射手能够借力App Store，返回来支持niltsh，并与MPlayerX一起成长。<br />
* 射手科技一直在尝试为开源项目带来健康发展的模式。Mac版作为我们的一个实验项目，以此种形式作为起点也是模式上的一次探索。希望能在开源这条路上走的更健康更顺利。</p>
<p><ins datetime="2011-02-08T15:35:48+00:00"><span id='remark1' style='font-size:0.65em;'>注：MPlayerX的作者婉言谢绝了我们的捐助，所以我们会以其他方式回馈给开源社区</span></ins></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.splayer.org/index.php/2011/02/splayerx-landing-on-mac-app-store/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>射手科技公开课第九辑&#160;『MVC桌面应用开发-4』</title>
		<link>http://blog.splayer.org/index.php/2011/01/mvc-desktop-development-part-4-windows/</link>
		<comments>http://blog.splayer.org/index.php/2011/01/mvc-desktop-development-part-4-windows/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 12:36:12 +0000</pubDate>
		<dc:creator>Tomasen</dc:creator>
				<category><![CDATA[公开课]]></category>
		<category><![CDATA[技术分享]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[win32]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://blog.splayer.org/?p=2578</guid>
		<description><![CDATA[这一辑的MVC桌面应用开发集中在Windows部分。Windows开发中的MFC框架历史悠久。可是时间越久往往也会积弊难返。那么如何在Windows开发中理解和应用MVC架构，就是需要发挥想象力的过程。本篇提出了一个Windows下在用户交互应用中实现MVC框架的思路，并结合上一辑同样使用了Notepad设计来作为案例样本来设计并分析。 MVC for Desktop Application &#8211; Part 4 View more presentations from Tomasen.]]></description>
			<content:encoded><![CDATA[<p>这一辑的MVC桌面应用开发集中在Windows部分。Windows开发中的MFC框架历史悠久。可是时间越久往往也会积弊难返。那么如何在Windows开发中理解和应用MVC架构，就是需要发挥想象力的过程。本篇提出了一个Windows下在用户交互应用中实现MVC框架的思路，并结合上一辑同样使用了Notepad设计来作为案例样本来设计并分析。<br />
<span id="more-2578"></span></p>
<div style="width:625px" id="__ss_6623945"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/Tomasen/mvc-for-desktop-application-part-4" title="MVC for Desktop Application - Part 4">MVC for Desktop Application &#8211; Part 4</a></strong><object id="__sse6623945" width="625" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=c1001-introductiontomvcfordesktopapplication-part4-110119035028-phpapp01&#038;stripped_title=mvc-for-desktop-application-part-4&#038;userName=Tomasen" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6623945" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=c1001-introductiontomvcfordesktopapplication-part4-110119035028-phpapp01&#038;stripped_title=mvc-for-desktop-application-part-4&#038;userName=Tomasen" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="625" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/Tomasen">Tomasen</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.splayer.org/index.php/2011/01/mvc-desktop-development-part-4-windows/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>射手科技公开课第八辑 『MVC桌面应用开发-3』</title>
		<link>http://blog.splayer.org/index.php/2010/12/mvc-desktop-development-part-3/</link>
		<comments>http://blog.splayer.org/index.php/2010/12/mvc-desktop-development-part-3/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 04:53:13 +0000</pubDate>
		<dc:creator>Tomasen</dc:creator>
				<category><![CDATA[公开课]]></category>
		<category><![CDATA[技术分享]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://blog.splayer.org/?p=2568</guid>
		<description><![CDATA[这一辑从一个Mac OSX范例出发，展示了一个Cocoa框架下的MVC开发模型。我们可以看到Mac下的开发框架Cocoa本身已经具有基本MVC的结构，但是在Controller与View之间仍然有一定程度的耦合。 MVC for Desktop Application &#8211; Part 3 View more webinars from Tomasen.]]></description>
			<content:encoded><![CDATA[<p>这一辑从一个Mac OSX范例出发，展示了一个Cocoa框架下的MVC开发模型。我们可以看到Mac下的开发框架Cocoa本身已经具有基本MVC的结构，但是在Controller与View之间仍然有一定程度的耦合。</p>
<p><span id="more-2568"></span></p>
<div style="width:625px" id="__ss_6269500"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/Tomasen/mvc-for-desktop-application-part-3" title="MVC for Desktop Application - Part 3">MVC for Desktop Application &#8211; Part 3</a></strong><object id="__sse6269500" width="625" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=c1001-introductiontomvcfordesktopapplication-part3-101221010914-phpapp02&#038;stripped_title=mvc-for-desktop-application-part-3&#038;userName=Tomasen" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6269500" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=c1001-introductiontomvcfordesktopapplication-part3-101221010914-phpapp02&#038;stripped_title=mvc-for-desktop-application-part-3&#038;userName=Tomasen" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="625" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">webinars</a> from <a href="http://www.slideshare.net/Tomasen">Tomasen</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.splayer.org/index.php/2010/12/mvc-desktop-development-part-3/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>射手分支项目-基于MongoDB的开源短网址服务</title>
		<link>http://blog.splayer.org/index.php/2010/12/seso-me-shorten-url/</link>
		<comments>http://blog.splayer.org/index.php/2010/12/seso-me-shorten-url/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 06:15:34 +0000</pubDate>
		<dc:creator>Tomasen</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[seso.me]]></category>
		<category><![CDATA[shorten url]]></category>

		<guid isPermaLink="false">http://blog.splayer.org/?p=2561</guid>
		<description><![CDATA[自从短网址服务出现的那一天开始，我就把短网址服务的最佳架构作为一个趣味题来看待——简单的应用与海量请求的组合，怎样才是最低开销的实现。最后我的结论认为，采用基于Key-Value的数据存储层搭配nginx module的应用前端实现，是在性能、稳定与负载之间最佳的平衡。选择 MongoDB 作为数据端，其性能是内存级别，而分片部署和数据安全性又非常适合大规模应用。nginx module 作为应用端使用消息驱动来完成应用处理，可以将系统开销压缩到最低。不过现有的短网址开源项目中，却还没有发现使用这种架构。所以seso这个基于MongoDB的射手短网址分支项目也就应运而生了。 所有项目源代码开放在： http://hg.splayer.org/seso-shorten-url/ 。 目前处于第一阶段，完成了MongoDB的数据端，但仍然使用 php 作为应用端。 有需要的朋友也可以直接开始使用 http://seso.me/ 所提供的服务。]]></description>
			<content:encoded><![CDATA[<p>自从短网址服务出现的那一天开始，我就把短网址服务的最佳架构作为一个趣味题来看待——简单的应用与海量请求的组合，怎样才是最低开销的实现。最后我的结论认为，采用基于Key-Value的数据存储层搭配nginx module的应用前端实现，是在性能、稳定与负载之间最佳的平衡。选择 MongoDB 作为数据端，其性能是内存级别，而分片部署和数据安全性又非常适合大规模应用。nginx module 作为应用端使用消息驱动来完成应用处理，可以将系统开销压缩到最低。不过现有的短网址开源项目中，却还没有发现使用这种架构。所以seso这个基于MongoDB的射手短网址分支项目也就应运而生了。</p>
<p>所有项目源代码开放在： <a href="http://hg.splayer.org/seso-shorten-url/">http://hg.splayer.org/seso-shorten-url/</a> 。 目前处于第一阶段，完成了MongoDB的数据端，但仍然使用 php 作为应用端。</p>
<p>有需要的朋友也可以直接开始使用 <a href="http://seso.me/">http://seso.me/</a>  所提供的服务。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.splayer.org/index.php/2010/12/seso-me-shorten-url/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

