Dannie from Shanghai

Tuesday, January 16, 2007

"Programming Windows with MFC" 2nd Ed.

虽然关于这本书的中文译本有不少非议,可我目前只找到这个“博彦”的中文电子版本。所以也只好先看了再说,如果可能将来买个英文版本的。

Friday, January 12, 2007

Serial Port Win32 API 编程

这三天终于在查了N多网络资料,甚至不得以买了本人民邮电的《VC++串口编程和工程实践》后,终于完成了我一直做的一个TM-U120的黑标设置程序。其实,并口部分很简单,我很早就有解决办法了。但串口部分,我不想用MSComm32.ocx,因为哪个控件需要制作安装程序,或者手动注册,有点麻烦。

直接使用Win32 API,进行串口编程是不很酷。虽然这不是什么了不起的技术,但我相信,实际能够做好的程序员其实并不多。

Wednesday, January 10, 2007

C# Serialport 输出多出2个字节"3F 80"

C# Serialport 输出多出2个字节"3F 80"

始终没能弄明白为什么C#用Serialport类,输出信息时;
第一次输出总是多出两个字节"3F 80",这个似乎就是串口1的地址啊。

Tuesday, January 09, 2007

"Learning the bash Shell" 笔记

第二章:
emacs编辑模式

emacs的命令太多,很多看来似乎并不那么直观和方便;
我只选了一些有用的行命令如下:
Ctrl-A 移动到行开头
Ctrl-E 移动到行结尾
Ctrl-K 想前删除到行尾

Ctrl-L 清屏,等于clear
ESC L 光标位置处单词所有字母变小写

FreeBSD 6.1 loopback bug!

FreeBSD 6.1 loopback确实有个BUG,现象之一就是发现无论如何配置Samba;
从WindowXP总是不能访问,然后报"没有权限之类"的错误,其实这个报告不准确.

你用smbclient -L 就会发现是request不到对应端口的服务,对于smbd的内部
机制,偶也不懂!不过,我找到一个老外的提示,freebsd.org上也有报告这个bug.
就是在:/etc/rc.conf中:

network_interface = "lo0 xl0"

注意!!"lo0"是必须手动添加上去的,否则FreeBSD就会有loopback找不到的问题!

确认方法是,ifconfig的时候应该看到:

lo0: flags=8049 mtu 16834
inet6 ........
等等内容!

FreeBSD 6.1 loopback确实有个BUG,现象之一就是发现无论如何配置Samba;
从WindowXP总是不能访问,然后报"没有权限之类"的错误,其实这个报告不准确.

你用smbclient -L 就会发现是request不到对应端口的服务,对于smbd的内部
机制,偶也不懂!不过,我找到一个老外的提示,freebsd.org上也有报告这个bug.
就是在:/etc/rc.conf中:

network_interface = "lo0 xl0"

注意!!"lo0"是必须手动添加上去的,否则FreeBSD就会有loopback找不到的问题!

确认方法是,ifconfig的时候应该看到:

lo0: flags=8049 mtu 16834
inet6 ........
等等内容!

FreeBSD 6.1 loopback确实有个BUG,现象之一就是发现无论如何配置Samba;
从WindowXP总是不能访问,然后报"没有权限之类"的错误,其实这个报告不准确.

你用smbclient -L 就会发现是request不到对应端口的服务,对于smbd的内部
机制,偶也不懂!不过,我找到一个老外的提示,freebsd.org上也有报告这个bug.
就是在:/etc/rc.conf中:

network_interface = "lo0 xl0"

注意!!"lo0"是必须手动添加上去的,否则FreeBSD就会有loopback找不到的问题!

确认方法是,ifconfig的时候应该看到:

lo0: flags=8049 mtu 16834
inet6 ........
等等内容!

JBuilder2006

看到天涯上有人在问这个,我猜想如下:

JBuilder2006的项目是不能直接在JBuilder2005中使用的,原因是JB2006是基于Eclipse的;
JB2006其实和以前的JB应该也没什么必然联系了。

Monday, January 08, 2007

Java打印发展历史

自从问世以来,Java 在多数方面都成长迅速。但一直以来,打印输出是Java 最弱的方面之一。事实上,Java1.0 根本不支持任何打印功能。Java1.1 在java.awt 包里包含了一个叫做PrintJob 的类,但是这个类提供的打印功能十分粗糙和不可靠。当 Java1.2 (或者说“Java2”)出现后,依据PrinterJob 以及在新的java.awt.print 包里定义的类和接口,它提供了一个彻底分离的打印设计机制(称为Java 2D printing API)。这些改进使得基于PrintJob的机制(即AWT printing)基本上被淘汰了,但是PrintJob 从未被真正废弃,而且至少在本文里仍然是一个技术上支持的类。

在J2SE 1.3 里又增加了一些变化,利用在java.awt 包里适合的JobAttributes 和PageAttributes 两个类,PrintJob 的功能扩展到设定任务和页面的属性。随着J2SE 1.3 的发布,打印能力变得足够强壮,但是在关联两个完全分离的打印机制时,仍然存在一些问题。比如,两种机制都使用java.awt.Graphics 类的一个实例,来展现打印内容,意味着所有要打印的东西都必须用一张图片表示。此外,更新后的PrintJob 工具变得更强壮,但仅提供了很有限的任务相关的属性设置。最终,两种机制都没有提供一种选择目标打印机的可编程的途径。

Java 打印最大的改变发生于J2SE 1.4 的发布,其带来的Java 打印服务API。第三代Java 打印支持的诞生,借助于javax.print 包的 PrintService 和DocPrintJob 接口的实现突破了上述限。因为新的API 代表了两种旧的打印机制功能定义的父集,是你应该通常使用的并是本文的焦点。

从较高层次上来看,使用Java 打印服务API 的步骤是很简单的:

1. 定位打印服务(打印机),可以限制返回的列表,只要那些符合您应用程序需要的打印机。打印服务由PrintService 的实例体现。

2. 通过调用PrintService 接口中定义的createPrintJob() 方法创建一个打印任务。打印任务由DocPrintJob 的一个实例代表。

3. 创建一个Doc 接口的实现,来描述你想要打印的数据。你也可以创建一个PrintRequestAttributeSet 的实例,来定义你想要的打印选项。

4. 通过DocPrintJob 接口定义的print() 方法来初始化打印,指定你先前创建的Doc,指定PrintRequestAttributeSet 或者空值。

POS for .NET的实现写入UPOS 1.10

POS fot .NET 实现在UPOS 1.9里只有一页的说明;
但是在UPOS 1.10中就已经有了比较完整的实现说明。

目前在.NET环境下,实现UPOS规范主要有两种方法:

1.OPOS Wrapper:
借助一个工具,可以为每个ActiveX/COM组件生成一个DLL库;
可以将应用程序的.NET方式请求,转为OPOS
CCO能接受的方式;然后再是CCO
调用SO;

2. .NET环境下,建立一个查询库,只实现SO对象,而SO让位给PosAPIExplorer
机制。

具体,还不是很懂,正在学习中。。。

Google Group -- "POS Developer"

Google Group -- "POS Developer"
昨天在Google Groups上新建立了一个Group,叫“POS Developer"

主要是想给国内的POS开发者一个交流的平台!

CUPS Notes <4>

13 CUPS编程概述
13.1.1 头文件
/usr/include/cups
cups.h file.h ppd.h http.h md5.h i18n.h language.h

13.2
cupsGetDefault()
cupsGetPrinters()

10

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。

CUPS Notes <2>

1.4.1 CUPS邮件列表
发送 subscribe cups 给majordomo@cups.org
取消 unsubscribe cups 给majordomo@easysw.com

1.4.3 Website
http://www.cups.org/
http://www.linuxprinting.org/
http://www.pwg.org/
http://www.adobe.com/products/printerdrivers/winppd.html PPD

3.1.1
获取可用设备列表 lpinfo -v

3.2.1
lpadmin -p name -E -v "URI device" -m "PPD file"
lpoption

http://localhost:631/printers

4
lp
lpr
lpstat
lpoptions

5.1 基础知识
CUPS调度程序由 IPP服务器(cupsd)+轮询守护程序(cups-polled)+逐行打印机守护程序网关(cups-lpd)

5.1.4 重启动CUPS服务
Ubuntu 6.06
/etc/init.d/cupsys restart

Sunday, January 07, 2007

MS也开WIKI了!

Welcome to the MSDN Wiki!
Wiki的开放公笔系统本来技术上就不复杂,问题是MS有足够的Wiki精神吗?

CUPS Notes <1>

1.2
CUPS以互联网打印协议IPP为基础,IPP是HTTP的上层协议。
IPP定义了打印、管理打印作业、打印机选项,还支持验证、访问控制和加密。
CUPS提供了完整的IPP/1.1打印系统,还支持BSD(lpr)和System V(lp)打印命令。

1.2.3
CUPS支持“类”的概念,特别地还有implicit(隐式)类。

1.2.4
过滤器有三种:1)将作业文件转换为打印机可以识别的格式;2)执行页面选择和排序任务;3)打印驱动程序。

1.2.5
打印机驱动程序包含打印机特有的一个或多个过滤器,负责将文件转换为打印机格式;此外还包括PS打印机说明文件(PPD)。

Easy Software Products
Linux printing

1.2.6
CUPS提供多种后台程序,支持并口、串口和USB;还有IPP,JetDirect(AppSocket)和LPD进行网络打印。此外,还有SAMBA中的SMB等。

Saturday, January 06, 2007

Blog迁移

因为过去GFW的原因,我将Blog建在了bloggerspaces.com上。但是现在发现blogspots开放了,所以还是想迁移到这里来。
而且不老歌的Blog,我也不想用了,哪个虽然方便,但是居然不让搜索的的,真是faint,我建立Blog的目的就是给人看的呀。

中科大少年班第一期的张方

张方的故事,我是今年早上无意中看电视知道的。内容大致是这样的,张在70年代初,也就是文革末期读的小学;那时候谁看不出读书有什么用,但他的父亲坚持一个简单的概念:总有一天,数理化会有用的,我们要先准备起来。78年,张被召入中科大第一期的少年班,18岁毕业后被分配到炼油厂,当时他想工作几年在考研究生。

可故事并不象一开始那么顺利,厂里要三年后才允许考研究生;8个月后他丢掉了工作跑回上海,觉得考上研究生是人生唯一的出路!可是那时他还有个弟弟在读书,父母微薄的工资实在支撑不起这个家。于是他跟着舅舅做装潢打杂,然后又南下深圳挣了点钱。

于是一晃快30了,张又重新拿起书本想跟上出国热,去美国念热物理。可是,第一次送签就已经30岁了,他们怀疑他动机不纯,于是被拒。然后又拒了两次。接着,钱花光了,到安家的年龄了,却连工作也没有;一度他干起了快递,一天几十块钱的熬着。。。。。

后面的采访,电视没有继续播下去。感慨之余,觉得自己其实也已经过了可以瞎想八想的年龄了。。

POS和JavaPOS的关系是什么?

What is the relationship between the OPOS and JavaPOS standards?
OPOS和JavaPOS的关系是什么?

The OLE Point of Sale (OPOS) standard architecture was used as the starting point for the JavaPOS effort. There were several reasons for this approach.

OLE/POS标准架构被用作JavaPOS努力的起点。这是有若干原因的。

  • OPOS was a good first step
    OPOS是良好的第一步

    The primary goal of OPOS is to permit retail application developers to be independent of the proprietary details (ex: special escape sequences) of the retail peripheral devices they accessed.

    OPOS的主要目标是允许零售应用开发者能够独立于,他们访问的零售周边设备的专有细节(例如:特殊的ESC序列)。

    This was the starting point for the larger goal facing the JavaPOS committee:to permit the retail application developer to be independent of the proprietary details of BOTH the peripheral devices they access AND the POS platform on which the application itself runs. For example, the JavaPOS standard eliminates the OPOS dependency on the NT Registry.

    这是JavaPOS协会所面对的巨大目标的起点: 允许零售应用开发者独立于专有细节,不仅包括他们访问的周边设备,而且其应用运行的POS平台。例如,JavaPOS标准去除了OPOS对NT注册表的依赖。

  • Reuse of Retail Peripheral Device Models
    零售周边设备模型的重用

    Over 90% of the voluminous OPOS documentation is devoted to specifying the properties, events, methods and error codes of the seventeen (as of OPOS v1.3) defined retail peripheral devices.

    超过90%比例的OPOS文档是定义关于17种 (根据OPOS v1.3)零售周边设备的属性、事件、方法和错误代码。

    These device models are both language AND platform independent, which allowed their direct incorporation into the JavaPOS standard.

    这些设备模型都是语言和平台无关的,从而允许他们被直接整合到JavaPOS标准中来。

  • Reduced Learning Curves
    降低学习曲线

    Many retail application developers already had experience using the OPOS APIs, and many retail hardware vendors had experience implementing the OPOS Control PIs.

    许多零售应用开发者已经熟悉了OPOS API的使用,并且许多零售硬件供应商也有实现OPOS控制API的经验。

    Adopting this approach therefore reduced the learning curve for the very audience JavaPOS was targeting.

    采用该方法从而降低了JavaPOS目标受终的学习曲线。

  • Two-Phase Deployment
    2相部署

    By sharing the same device models as OPOS, it becomes possible to use a generic OPOS bridge” to map existing OPOS Device Controls and Services into their JavaPOS equivalents. One example of such a bridge has long been made freely available by Wincor Nixdorf, and others have been created by NCR and Datafit Corporation.

    通过共享相同的OPOS设备模型,从而使用一个通用的"OPOS 桥"来影射目前存在的OPOS设备控制对象和服务对象,到它们JavaPOS的等价物早已存在这样的一个桥,已经由德利多富免费提供,其它已经由NCR和Datafit公司创建。

    This bridging capability provides a means of prototyping and testing JavaPOS-compliant retail applications on existing OPOS terminal configurations.

    这种桥能够提供一种原形,并在目前的OPOS终端设置下,测试JavaPOS兼容的零售应用。
  • What is JavaPOS?

    What is JavaPOS?

    It was recognized early on that the emergence of the Java language on the computing scene offered several major advantages to the developers of retail applications.

    在Java语言出现在计算机领域的早期,它在零售系统的开发中所能提供的若干主要优点就已经被注意到。

    The JavaPOS (Java for Point Of Sale) standard committee was formed by a collection of retail vendors and end users to examine the ways in which these Java advantages could best be exploited in the retail environment.

    JavaPOS (服务于零售点的Java) 标准协会由一群零售供应商和最终用户组成,其负责确定Java的优点能够被最佳地导入到零售环境中。

    The original JavaPOS programming standard (v1.2) was the end result of ten months of effort by this committee. It was followed by JavaPOS v1.3, which defined Java interfaces for three additional retail POS devices (Fiscal Printer, PIN Pad and Remote Order Display), and JavaPOS v1.4, which added the
    Credit Authorization Terminal (CAT) interface requested by Japanese retailers.

    最初的JavaPOS编程环境(v1.2)是该协会10月会议的努力结果。接着是JavaPOS v1.3,其定义了三个增加的零售POS设备的Java接口(税控打印机,PIN pad和远程指令显示器),然后是JavaPOS v1.4,其增加了由日本零售商提出的信用卡授权终端(CAT)接口。

    Serial Programming Guide for POSIX Operating System

    这是网络上最经典的关于在POSIX系统下串口编程的解说,非常精彩!
    可以广泛适用于各种Unix/Linux版本!

    Serial Programming Guide for POSIX Operating Systems
    5th Edition, 6th Revision
    Copyright 1994-2005 by Michael R. Sweet

    我曾经翻译过一个较早的版本,在这里也提供一个下载!
    pdf.zip

    学习如何使用"Java Print Service API"

    <学习如何使用打印服务API>

    Learn how to use the Print Service API
    From the book "Java Pro Programming: Printing"

    作者:Brett Spell
    翻译:ice_x
    修订:Cedar

    版权声明:

    可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
    英文原文 -- 中文原始翻译 -- 中文修订版本

    关键词: Java Programming print PrintJob

    摘要

    在这篇文章里,来自Pro Java Programming (Apress, June 2005)专家Brett Spell 解释了如何一步一步的定位打印设备,创建打印工程,创建一个Doc 接口的实例,以此来描述你想要打印的数据并且初始化打印。
    (4500 字,2005 年7 月25 日ice_x初稿;6900字,2006年5月19日Cedar修订!)