Java 代码中的 }); 是什么鬼?

前几天舍友问到我这个问题,说从网上也搜索过,很多人在问但是没人有人回答,我就来简单地回答一下。其实原理很简单,看完应该都会笑的。

}); 这种东西应该出现在类似这种场景中:

Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("Whatever");
        }
    });

这里最后一行就出现了 }); 字样。 继续阅读“Java 代码中的 }); 是什么鬼?”

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

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

  • 添加、修改和删除条目;
  • 搜索条目;
  • 数据库移动储存;
  • 数据库需要加密;
  • 运行于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

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

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屏幕上,微软雅黑会过于厚重,苹果丽黑效果会更清秀美观。

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