脑残安卓:状态栏

这是一系列介绍 Android 脑残特性的文章。Android 是一个满载先进科技的系统,同时也是一个充满碎片化、设计缺陷和执行缺陷的缺陷系统。

本篇文章针对 Android 对于状态栏的处理。 继续阅读脑残安卓:状态栏

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

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

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.

继续阅读Adding Windows 8.1 Live Tiles to Your Website

为网站添加 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上实现。 继续阅读为网站添加 Windows 8.1 / IE 11 动态磁贴

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

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

版本1.0:

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

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