医疗固定资产管理——源代码

应某医院副院长要求,开发一个数据库类程序,方便管理单位的医疗设备。需求如下:

  • 添加、修改和删除条目;
  • 搜索条目;
  • 数据库移动储存;
  • 数据库需要加密;
  • 运行于Windows平台;
  • 不允许云同步。

规划阶段决定采用WPF技术来开发程序,即:用XAML实现表层UI,用C#实现程序功能。WPF的优点是UI设计和核心设计可以分离,并且WPF窗口完美支持Windows的DPI缩放,传统的Windows Forms窗口会在高分辨率屏幕上变得模糊,不方便日后升级设备。

数据库核心决定采用轻量级SQLite数据库,避免SQL Server动辄GB级的安装体积,并且支持数据级加密。(我见过一个国营企业,使用SQL Server来实现一个很简单的数据库操作。应用入口设置了口令验证,但是数据库明文储存,因此只要用SQL Server提供的数据库浏览器打开数据库文件即可浏览所有条目——里面条目的命名居然是用汉语拼音)。

开发时采用 .Net Framework 4.5 框架,该框架在Windows 8及以上系统被系统内置,Windows Vista及以上可以通过独立安装实现,不支持Windows XP以及更低版本操作系统。应用程序为32位,保证最大兼容性,日后可开发64位版本。

由于该程序的性质更像是“企业应用”,简单明晰即可,不需要花哨的动画和过度,因此UI设计以简单清晰为原则,字体足够大,,保证远距离操作依然有足够的可见性。至于美观度……再好的东西看多了也会腻,所以为什么要在这上面费心思?

UI概览
UI概览,请无视上面文字。

UI设计原则:

WPF架构允许用XAML先行设计程序UI,并且对UI的布局、控件的属性和控件事件进行声明。这种思路后来也被Android所借鉴(用XML先行设计UI,再通过Java类来实现功能)

由于“添加”功能是最常用的功能,“添加”按钮一定要能非常容易点到——处理方法简单粗暴,右侧一个长长的竖条就是“添加”按钮。在程序全屏运行时,将鼠标指针甩到右侧边缘即可点按,甚至不需要看到鼠标指针在哪。

因为电脑放在办公桌上,经常需要离电脑很远来查看信息,所以字体必须保证够大,以保证远距离可见性。

搜索功能被简化为一个又长又大又宽的文本框(TextBox),借鉴Google的Instant Search理念,不需要提前选择匹配项,随着文字的输入,下方的列表视图(ListBox)会自动更新搜索到的条目。

Parallels 图片 3
搜索:What You See Is What You Get.

底层设计原则:

采用SQLite轻量级数据库核心,安装文件仅10MB左右。相比SQL Server动辄GB级的体量轻巧很多。

数据库文件本身必须加密,不能留下“程序入口需要验证,而数据库本身明文存储”这种低级错误。数据库的密码以HardCode写进程序本身(将来会加入验证入口),密码格式为GUID,无法猜测,暴力破解的难度极高。

数据库中每一个条目都对应一个GUID,这也是程序内部识别条目的唯一方式。.Net Frameworks提供了一行代码生成GUID的方法,可谓“前人栽树、后人乘凉”:

System.Guid guid = new System.Guid();

将Guid显式转换为字符串便可以直接使用。

由于客户希望数据库文件移动储存(放在U盘或者移动硬盘内),而这种储存介质又极易因为外部环境而损坏,客户又要求不要云同步,因此,数据库的备份工作要尽量完善。每一次对数据库进行修改之后,在关闭程序时,都会保存一份数据库的副本备份。

private void Backup(object sender, System.ComponentModel.CancelEventArgs e)
 {
    if (dataProcessed != 0)
    {
       File.Copy("mspr.db", "mspr.backup", true);
    }
 }

未来改进方向:

  • 多项搜索
  • 程序入口的口令验证
  • 范围搜索
  • UI进一步优化
  • 64位支持
  • 性能优化

源代码:

Medical Static Property Registration

浅谈Dirac HD Sound技术

大概是一年多以前,我第一次在OPPO Find 5上接触了Dirac HD Sound(以下简称DHDS),因为OPPO把Dirac和杜比放到了一起,让我以为DHDS是一种“音效”,类似Beats Audio。当时不知道DHDS里面那些古怪的选项是什么意思,只记得打开之后声音变得惨不忍睹,就这样DHDS被我归到“破坏性音效”的行列,抵制了好久。后来多方考证之后才发现那是对应耳机的型号,而DHDS针对不同的耳机有不同的配置,所以选择对应的耳机才能出来最佳效果。

Dirac HD Sound说简单很简单,说复杂很复杂。它针对前端和对应耳机进行技术分析,通过软件来补偿耳机的不足,说起来很容易,其实就是对一条耳机进行“软件再调音”,而且我保证Dirac也不是第一个想到这么做的,只是或许别的人都太懒了吧。但是如何分析取样, 如何针对样本进行补偿,补偿范围和程度都是很考究的问题。而且根据DHDS的原理,需要一对一分析采样,根据魅族高管的说法,“Dirac一条耳机的适配费用在百万级”,注定不是什么人什么前端什么设备都可以用上DHDS。

DHDS补偿的方面主要有两个:频率响应和动态响应。

横轴频率,纵轴响度

频率响应的补偿十分暴力,对前端和耳机进行频响曲线分析,高的拉低,低的拉高,非常类似一个图形均衡器,只不过DHDS的采样点在千位数。这其实完全就是那些低音补偿技术的完全体进化版,只不过DHDS不会一股脑不分青红皂白一律把低频拉高,对于很多低频重但是浅的耳机,DHDS有效拉深了它的下潜,而这只是一个例子。但是从原理中也能看出来,素质实在太差的耳机,及时DHDS把响度拉到无穷大还是无力回天,因此DHDS究竟能优化到什么程度是取决于耳机本身的。

横轴时间,纵轴响度

动态响应说起来则有些复杂。由于动圈单元的特性(尤其是低端动圈),在面对瞬间起伏的信号时往往不能做到干净利落,会存在分割震动和残响,这样就导致声音拖沓不清。抒情乐还好,一旦遇到激流金属,个中痛苦真是一言难尽。DHDS在这里的做法非常类似于Lumia 920上的第二代PureView,通过对信号进行更加极端的处理来让耳机拥有更加完美的瞬间响应。瞬间响应对于音乐的影响非常大,瞬态上去了,甚至会给用户以“低音更重了”的错觉。


原则上来说,通过软件来对耳机进行重新调音这个技术不是可行,而是太TM可行了,而且理论上成本更低,效果更好,只要扬声器单元素质没什么问题,通过Dirac都能调出一身好声音。那么实际听感呢?

我们必须面对一个事实:到目前为止,DHDS所适配的耳机还都是低端耳机,因为高端的耳机往往已经有了不错的调音。但是低端耳机基本都是素质上残废的,所以Dirac也回天乏术。所以必须要摆好心态,端正态度,告诉自己:烂耳机适配之后只能变成“不那么烂的烂耳机”,绝不可能成为“好耳机”,离Hi-Fi肯定也依然有十万八千里。

体验的对象:iPad Air + EarPods + Dirac HD Player

体验曲目:Nightwish后期(Olzon)专辑、Michael Jackson、Rammstein


心态正绝对是正确的,开启DHDS之后,EarPods的低频下潜有了明显改善,高频上不去的问题也得到一些修正(尖锐了不少,但是上不去的地方还是上不去),分力度也有一定提升,但是素质所限,EarPods并没有表现出惊艳的性能。仔细听发现瞬态和解析力有很大的提升,但我不知道是不是Dirac HD Player对于iPad没有调音(这是一个iPhone应用,目测优化对象为iPhone 5),开启DHDS之后,EarPods的声场会有变化:前方的元素会被拉到眼前,横向声场明显扩展。我为什么一开始会认为DHDS是“破坏性音效”?因为DHDS的手腕实在是太硬了,完全没有索尼DESS那种温和和细微的作风。再木的耳朵也能一下子听出来DHDS究竟对声音做了什么。说脱胎换骨不至于,但是提升幅度真的是不小。

这个音效让我想起了索尼Walkman MP3中所内置的一项叫做ClearStereo的技术,通过软件来解决耳机立体声串扰的问题,增强立体声分离度,效果很不错。事实证明,用软件来对设备进行“再调音”是完全可行的,而且其调音的角度肯定不会一直局限于“频响、瞬态和分离度”。如果你有一条低端耳机,而这条耳机凑巧被你的设备适配了,那么Dirac HD Sound可以让这条耳机发挥出任何均衡器都调不出来的水平,但是谨记,一条200块的耳机,无论怎么努力都不可能成为600块的货,这是人与人之间最基本的信任。

思源黑体:开源无衬线中文字体

2014年7月15号,Adobe联合Google发布针对亚洲文字开发的新一代无衬线开源字体:思源黑体。该字体被Adobe归到Source Sans字体家族免费提供给所有Typekit用户,并在其官方博客上给出了GitHub源代码和独立下载源;Google将思源黑体归到Noto pan-Unicode字体家族中,取名为Noto Sans CJK,这一套字体也强有力地扩充了Noto的宽容度,让“No Tofu”的愿景向前迈了一大步。

思源黑体 这一字体家族有七种字体粗细,完全支持日文、韩文、繁体中文和简体中文,这些全部都包含在一种字体中。它还包括来自我们颇受欢迎的 Source Sans字体家族的拉丁文、希腊文和西里尔文字形。总的来说,字体家族里的每种字体粗细总共有 65,535个字形(OpenType 格式支持的最大上限),而整个字体家族的字形个数接近50万。这个字体家族是通过开源方式提供的,数量、开发规模和价值之大堪称史上之最,这使它成为需要支持多种语言的字体的设计人员、开发人员和普通用户的零成本解决方案。

该字体设计之初的原则便是兼容以中文为源的亚洲文字,兼顾印刷效果和点阵屏幕显示效果。该字体史无前例地为各国字体提供了7个级别的字重(参考标题图),不但让纸质印刷品有了更细腻的排版选择,也让网页设计有了更丰富的效果。因此我强烈推荐用户安装该字体,也希望该字体被纳入下一代主流操作系统作为候选。

字体测试

思源黑体包括四个语言:简体中文、繁体中文、日文和韩文。这四个语言的共同根源为繁体中文,拥有大量共通字符。但是随着时间的推进和文化的演进,同一字符在各国的书写方式中产生了不同的变体。思源黑体很好地解决了变体问题,在提供最大兼容的同时,显示各国文字时都能显得舒服。

如何获得思源黑体

Adobe

Adobe Typekit任何级别的订户(包括免费的“Trial”级别)都可以将思源黑体添加到自己的字体库中并与所有的PC/Mac进行同步。

Source Han Sans字体单独下载链接(via SourceForge):简体中文|繁体中文|日文|韩文|全语言OTC|全语言OTF

Google

Noto字体官方网站:Google Noto Fonts(墙外)

Noto Sans CJK字体单独下载链接(Google Project Hosting):全语言(墙外)

Noto完整字体家族下载链接(百度云):全语言

注:如果仅需要一种语言的思源黑体则建议单独下载;OTC包含四种独立字体,需要各自独立安装;OTF将所有字体集成在一个文件内,但是需要软件来声明具体所用到的语言,若未声明,则默认使用日文字形。个人并不推荐下载OTF格式字体,实测在Windows 8.1 Update 2和OS X 10.9上都出现了兼容性问题。

注2:Noto Sans CJK版本或Source Han Sans版本的两中思源黑体没有任何区别,包括其英文部分。二者在系统中显示的名称为各自的英文名称,而不是“思源黑体”,这会造成一定兼容性问题。例如一方在Word文件中定义字体为“Noto Sans CJK”的思源黑体,而在另一方的电脑里只安装了“Source Han Sans”的版本,那么程序依然会以找不到字体为由回滚对应内容到宋体。

如何评价这个字体?

思源黑体和苹果苹方极其相似,比微软雅黑字面更小,分辨率高时更好看。要说包容性,微软雅黑也支持中日韩三国文字,只是没有7种级别的粗细。在非Retina屏幕上,微软雅黑的观感最好;在Retina屏幕上,微软雅黑会过于厚重,苹果丽黑效果会更清秀美观。

不过既然免费了,也就不要要求太多了。

DirectX修复工具

该工具能检测Windows系统中缺失或者损坏的DirectX动态链接库文件,并且如果系统中的VC++运行库存在问题,该工具可一并修复。对于喜欢重装系统的游戏玩家尤其好用,建议U盘内常备一份。

说你呢 Symorrgan。

工具开发者:Zhang Yue(VBcom)

下载地址:百度云

Adding Windows 8.1 Live Tiles to Your Website

This website now contain full support of Windows 8.1 / Internet Explorer 11 Live Tiles.

Live Tiles feature was firstly introduced when Microsoft announced Windows Phone 7, and later this feature was brought to Windows desktop and tablet platform with Windows 8. When developers are developing Windows Store Apps, they can choose to add Live Tiles to their Apps, which bring immersive and active feeling to the whole system. With Live Tiles pinned to user’s Start Screen, new content is showed right on the tiles and the user won’t even have to open the App. This feature, in many ways, acts like the Notification Center in other mobile systems (i.e. iOS and Android).

After upgrading to Windows 8.1, web developers like me can add Live Tiles to their websites as well. When the website has new content, it will automatically appear on user’s screen if they’ve pinned your tile. And the progress of adding a Live Tile is extremely easy. Notice that this feature is only available on Windows 8.1.

(更多…)

为网站添加 Windows 8.1 / IE 11 动态磁贴

本网站已正式支持Windows 8.1 / IE 11的动态磁贴功能

在Windows 8中微软将Windows Phone平台的动态磁贴(Live Tiles)功能移植到桌面/平板电脑平台,开发者在开发Windows Store应用的时候可以选择性地开发动态磁贴功能。动态磁贴功能可以让用户在不打开应用的情况下看到应用的内容,一定程度上取代了在其他移动平台上风行的“通知中心”功能。

在Windows 8.1中,这个功能被带到了网页上。现在,网页开发者也可以为自己的网站添加动态磁贴的功能,当网站有更新的时候,所用已经订阅动态磁贴的用户都将看到更新,并且实现方法非常简单。注意,由于Windows 8自身缺陷,并不支持网站的动态磁贴功能,该功能只能在Windows 8.1上实现。 (更多…)

“青” 患者管理系统 - 源代码

该项目以Android Studio创建。以此为模版可以创建任何信息管理系统。

版本1.0:

  • 为手术大夫管理病人的需求而设计
  • 添加、显示或修改住院病人的信息
  • 检查患者信息和状态
  • 跟踪已出院患者的复查情况

下载链接: 源代码(ZIP) (29.7MB) ;    程序(APK)(7MB)

“Qing” Patient Information Management System – Source Code

This project is created using Android Studio. With this model you can create any kind of Information Management System.

Version 1.0:

  • For doctors and surgeons who have to manage dozens of patients;
  • Add, Show or Edit patients that are hospitalized;
  • Check patients’ information and status;
  • Trace patients that are discharged and manage there review status;

Download Link: Source Code (29.7MB);     App(7MB)