Submitted by on 2005, October 8, 2:55 AM
Submitted by on 2005, October 7, 4:28 PM
Submitted by on 2005, October 7, 3:53 PM
前段时间刚介绍了个国外的VOIP网络电话软件,今天才发现国内竟然也有。
全球首个(有点夸张哦)电信级面向网络通讯增值服务并支持语音、视频的宽带内容互动服务平台(由铁通和枫叶网络科技有限公司合作开发的VIP多媒体网络视频电话)正式开通!图象流畅,语音清晰。软件下载地址:http://update.redmaplenet.com/redmaple30030.msi
马上下载并注册(绝对免费,注册的时候需要提交手机号码,接收验证码,就此问题今天与网站负责人谈过,确定不收取任何费用。)即可获得5元话费奖励,您可以体验VIP为您提供的长话服务,短信服务以及其他的增值服务内容。9月30日之前注册的朋友均还有机会得到由邦克珠宝和周大生珠宝联合送出的钻石大奖,一等奖0.7克拉钻戒一枚;二等奖0.5克拉钻戒一枚。心动不如行动,马上下载,您的幸运钻石在等你(得不得奖是次要的,关键是使用安全方便,实惠质优才是重要的)。
VIP多媒体网络视频电话部分功能:
网内通话:不仅支持语音,而且支持视频
网间通话:可拨打普通固话、国内、国际或手机,资费低廉
来电显示:显示来电者名字或号码
呼叫转移:可转到网内号码或普通固定电话或手机
……
下载完后运行登陆会提示你有新版本。点是就可以。
软件登录界面
软件界面
拨号规则:
打134-xxx-xxxxx的手机号码,请打“区号+电话号码”,比如:02513412345678。
打本地、外地手机,拨打“0+手机号码”,比如:013999999999。
打本地、外地座机电话,拨打“区号+电话号码”,比如:02188888888。
打手机的时候,双方有那种嗤嗤的声音,类似收音机没有调好台的感觉。对于音质方面,可能与耳麦有关。不过总体感觉还可以。
优点:1、一次打通,连通率比较高 2、每次通话时间无限制(当然你的帐号余额得够) 3、可以发短信 4、可以设置呼叫转移 5、对拨叫用户关机,无信号,号码错误都有提示,和普通电话一样。
注册时介绍人vip号:91029201,您如果觉得输入手机号码不放心那请联系我,输入我的手机号码,我收到验证码后再发给你。(很可惜,同一手机只能注册一次)
如果在使用中遇到什么问题请拨打客服热线:02151295050或VIP号码91000000(免费电话)。
你只要稍动动手,经常推荐些朋友注册,你就可以免费得到足够的话费打电话了,这不是馅饼吗?还要犹豫吗?。。。。。。
Submitted by on 2005, October 7, 3:50 PM
绝对是一款会让Gmail用户100%惊奇和惊喜的软件.
这款只有100多k的软件会在你的硬盘上生成一个虚拟硬盘分区GMail Drive,文件系统为GMailFS(哈,好像微软在Longhorn里的是WinFS吧.)这样你的硬盘上就多出了1个G的空间了.
你可以在GMail Drive上进行任意的复制、粘贴、删除、创建新的文件夹,甚至拖曳操作,而所有的文件都是存储在Gmail的服务器上.这样你就可以充分利用Gmal的1G空间了.
当然这一切的前提是你必须有一个Gmail的帐户!
1.安装
a.将下载回来的文件解压
b.运行其中的Setup.exe
2.使用
a.安装完成后,你的系统中就会多出一个新的硬盘分区Gmail Drive
b.双击该分区,会要求你输入Gmail账户的用户名和密码
c.接着开始登录
d.进入之后,你会发现什么都没有.
e.不要怀疑,一切才刚刚开始. 找一个文件,试着拖进Gmail Driver.
f.接着GMail Drive shell extension就开始向Gmail的服务器传送文件了. 实际的运行过程是它向你的Gmail帐户发送一封以你刚刚拖曳的文件为附件的E-mail.
g.我在Gmail Drive内创建了一个文件夹,复制进一张图片.
h.现在打开你的Gmail,看看收件箱里是不是多了些东西.不过我无法对其进行阅读操作.
i.GMail Drive还会定期检测你的帐户,看文件是否已经传送完毕.当然这一切都不用你操心,你的操作之需要像硬盘与硬盘之间的平常操作.
3.不足
目前GMail Drive还处于测试阶段,在文件系统(Gmail FS)上还有很多不完善的地方,比如所传输的文件名长度不能超过40个字符,在传输文件的过程中也不能保证绝对的安全等.
下载页面
Submitted by on 2005, October 7, 3:06 PM
所有的程序开发手册都包含了各种规则。一些习惯自由程序人员可能对这些规则很不适应,但是在多个开发人员共同写作的情况下,这些规则是必需的。这不仅仅是为了开发效率来考虑,而且也是为了后期维护考虑。
命名规范
定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)
byte[] buffer; |
byte buffer[]; |
SetCounter(int size){
this.size = size;
}
|
Java 文件样式
所有的 Java(*.java) 文件都必须遵守如下的样式规则
/** * Copyright ® 2000 Shanghai XXX Co. Ltd. * All right reserved. */ |
package hotlava.net.stats; import java.io.*; import java.util.Observable; import hotlava.util.Application; |
/** * A class representing a set of packet and byte counters * It is observable to allow it to be watched, but only * reports changes when the current set is complete */ |
public class CounterSet extends Observable implements Cloneable |
/** * Packet counters */ protected int[] packets; |
/**
* Get the counters
* @return an array containing the statistical data. This array has been
* freshly allocated and can be modified by the caller.
*/
public int[] getPackets() { return copyArray(packets, offset); }
public int[] getBytes() { return copyArray(bytes, offset); }
public int[] getPackets() { return packets; }
public void setPackets(int[] packets) { this.packets = packets; }
|
public
CounterSet(int size){
this.size = size;
}
|
public
Object clone() {
try {
CounterSet obj = (CounterSet)super.clone();
obj.packets = (int[])packets.clone();
obj.size = size;
return obj;
}catch(CloneNotSupportedException e) {
throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());
}
}
|
/**
* Set the packet counters
* (such as when restoring from a database)
*/
protected final
void setArray(int[] r1, int[] r2, int[] r3, int[] r4)
throws IllegalArgumentException
{
//
// Ensure the arrays are of equal size
//
if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)
throw new IllegalArgumentException("Arrays must be of the same size");
System.arraycopy(r1, 0, r3, 0, r1.length);
System.arraycopy(r2, 0, r4, 0, r1.length);
}
|
public
String toString() {
String retval = "CounterSet: ";
for (int i = 0; i < data.length(); i++) {
retval += data.bytes.toString();
retval += data.packets.toString();
}
return retval;
}
}
|
代码编写格式
if (i>0) { i ++ }; // 错误, { 和 } 在同一行
if (i>0) {
i ++
}; // 正确, { 单独作为一行
} 语句永远单独作为一行.
|
程序编写规范
...
{
FileOutputStream fos = new FileOutputStream(projectFile);
project.save(fos, "IDE Project File");
}
...
|
FileOutputStream fos = new FileOutputStream(projectFile); project.save(fos, "IDE Project File"); fos.close(); |
implements Cloneable
public
Object clone()
{
try {
ThisClass obj = (ThisClass)super.clone();
obj.field1 = (int[])field1.clone();
obj.field2 = field2;
return obj;
} catch(CloneNotSupportedException e) {
throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());
}
}
|
public void setPackets(int[] packets) { this.packets = packets; }
CounterSet(int size)
{
this.size = size;
}
|
编程技巧
class Colour {
public static final Colour BLACK = new Colour(0, 0, 0);
public static final Colour RED = new Colour(0xFF, 0, 0);
public static final Colour GREEN = new Colour(0, 0xFF, 0);
public static final Colour BLUE = new Colour(0, 0, 0xFF);
public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);
}
|
Swing
调试
性能
可移植性
Borland Jbulider 不喜欢 synchronized 这个关键字,如果你的断点设在这些关键字的作用域内的话,调试的时候你会发现的断点会到处乱跳,让你不知所措。除非必须,尽量不要使用。
参考资料