一般来说,批处理文件处理相对路径的时候,起始位置是bat文件所在的目录,比如在D:\XX目录下执行bat文件,所有相对目录的操作都会以D:\XX下执行。
但是有些命令需要管理员权限,右键选择以管理员身份运行时后,起始位置则为C:\Windows\system32,这时候往往不是我们所想要的,
一种解决解决办法是在批处理的行首加一句"cd D:\XX”进入该目录,以修改其当前位置,但这样需要在批处理文件中加入绝对路径,如果把bat文件移动到其它位置就无法使用了,此时一种更好的方式是用"cd /d %~dp0”代替"cd D:\XX”。
综上所述,在写bat文件的时候,不管是否需要用到管理员权限,最好在行首加一句"cd /d %~dp0",以统一文件的起始目录。
例如,Auto.bat处于文件夹d:\my_bat\下,以下为Auto.bat的内容
cd /d %~dp0
start MDF-API\FeedServer\FeedServerV1_3.exe
代表启动“d:\my_bat\MDF-API\FeedServer\FeedServerV1_3.exe”这个程序
一个Viewer管理多个view对象,一个view就是一个视图。它不与具体的窗口关联。
构造一个view需要两个对象: 一个是Aspect_WindowDriver的子类对象,一个是Viewer。
Aspect_WindowDriver的父类是Aspect_Driver,它有画直线段,多边形等纯虚函数。
可以把它看成是抽象的GDI,即用来画图。在windows平台下,可使用Aspect_WindowDriver
的子类WNT_WDriver。构造这个对象只需要一个WNT_Window对象。它是Aspect_Window的子类。
WNT_Window是一个被包装的窗口。传入父窗体句柄,然后调用CreateWindow的API,创建一个Windows OS
的窗口。New 一个WNT_Window需要父窗口句柄和WNT_GraphicDevice对象。它的父类是
Aspect_GraphicDevice,是一个颜色管理类。在Windows,X-Window ,及各种显卡,它们显
示颜色方式不统一,OCC为是可移植到其它系统上,创建了这个颜色管理类。
WNT_GraphicDevice是它的子类,针对Windows NT平台。只要new 一个
WNT_GraphicDevice就可以用了。
好了,我们用代码描述创建一个OCC窗口的过程。
device = new WNT_GraphicDevice;
win = new WNT_Window(device, 父窗口句柄);
Driver = new WNT_WDriver(win);
View = newV2d_View(driver,已先创建的Viewer对象);
创建Viewer对象,需要一个WNT_GraphicDevice对象。
下面的例子,显示了一个金黄色的窗口。
附加包含目录 $(CASROOT)\inc
附加依赖项 TKernel.lib TKService.lib TKV2d.lib
代码如下
//mfc.h #include <Handle_V2d_View.hxx> class CMFCApp : public CWinApp { public: virtual BOOL InitInstance(); }; class CMainWindow : public CFrameWnd { public: CMainWindow(); protected: Handle_V2d_View pV2dView; protected: afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); DECLARE_MESSAGE_MAP () }; //MFC.
1.初始化条件变量pthread_cond_init #include <pthread.h> int pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *cattr); 返回值:函数成功返回0;任何其他返回值都表示错误 初始化一个条件变量。当参数cattr为空指针时,函数创建的是一个缺省的条件变量。否则条件变量的属性将由cattr中的属性值来决定。调用pthread_cond_init函数时,参数cattr为空指针等价于cattr中的属性为缺省属性,只是前者不需要cattr所占用的内存开销。这个函数返回时,条件变量被存放在参数cv指向的内存中。
可以用宏PTHREAD_COND_INITIALIZER来初始化静态定义的条件变量,使其具有缺省属性。这和用pthread_cond_init函数动态分配的效果是一样的。初始化时不进行错误检查。如:
pthread_cond_t cv = PTHREAD_COND_INITIALIZER; 不能由多个线程同时初始化一个条件变量。当需要重新初始化或释放一个条件变量时,应用程序必须保证这个条件变量未被使用。
2.阻塞在条件变量上pthread_cond_wait #include <pthread.h> int pthread_cond_wait(pthread_cond_t *cv, pthread_mutex_t *mutex); 返回值:函数成功返回0;任何其他返回值都表示错误 函数将解锁mutex参数指向的互斥锁,并使当前线程阻塞在cv参数指向的条件变量上。
被阻塞的线程可以被pthread_cond_signal函数,pthread_cond_broadcast函数唤醒,也可能在被信号中断后被唤醒。
pthread_cond_wait函数的返回并不意味着条件的值一定发生了变化,必须重新检查条件的值。
pthread_cond_wait函数返回时,相应的互斥锁将被当前线程锁定,即使是函数出错返回。
一般一个条件表达式都是在一个互斥锁的保护下被检查。当条件表达式未被满足时,线程将仍然阻塞在这个条件变量上。当另一个线程改变了条件的值并向条件变量发出信号时,等待在这个条件变量上的一个线程或所有线程被唤醒,接着都试图再次占有相应的互斥锁。
阻塞在条件变量上的线程被唤醒以后,直到pthread_cond_wait()函数返回之前条件的值都有可能发生变化。所以函数返回以后,在锁定相应的互斥锁之前,必须重新测试条件值。最好的测试方法是循环调用pthread_cond_wait函数,并把满足条件的表达式置为循环的终止条件。如:
pthread_mutex_lock(); while (condition_is_false) pthread_cond_wait(); pthread_mutex_unlock(); 阻塞在同一个条件变量上的不同线程被释放的次序是不一定的。
注意:pthread_cond_wait()函数是退出点,如果在调用这个函数时,已有一个挂起的退出请求,且线程允许退出,这个线程将被终止并开始执行善后处理函数,而这时和条件变量相关的互斥锁仍将处在锁定状态。
3.解除在条件变量上的阻塞pthread_cond_signal #include <pthread.h> int pthread_cond_signal(pthread_cond_t *cv); 返回值:函数成功返回0;任何其他返回值都表示错误 函数被用来释放被阻塞在指定条件变量上的一个线程。
必须在互斥锁的保护下使用相应的条件变量。否则对条件变量的解锁有可能发生在锁定条件变量之前,从而造成死锁。
唤醒阻塞在条件变量上的所有线程的顺序由调度策略决定,如果线程的调度策略是SCHED_OTHER类型的,系统将根据线程的优先级唤醒线程。
如果没有线程被阻塞在条件变量上,那么调用pthread_cond_signal()将没有作用。
4.阻塞直到指定时间pthread_cond_timedwait #include <pthread.h> #include <time.h> int pthread_cond_timedwait(pthread_cond_t *cv, pthread_mutex_t *mp, const structtimespec * abstime); 返回值:函数成功返回0;任何其他返回值都表示错误 函数到了一定的时间,即使条件未发生也会解除阻塞。这个时间由参数abstime指定。函数返回时,相应的互斥锁往往是锁定的,即使是函数出错返回。
注意:pthread_cond_timedwait函数也是退出点。
超时时间参数是指一天中的某个时刻。使用举例:
pthread_timestruc_t to; to.
对开发中常见的内存泄露,GDI泄露进行检测
一、GDI泄露检测方法:
在软件测试阶段,可以通过procexp.exe 工具,或是通过任务管理器中选择GDI对象来查看软件GDI的对象是使用情况。
注意点:Create出来的GDI对象,都要用DeleteObject来释放;Create出来的DC,都要用DeleteDC来释放,GetDC得出的DC,要用ReleaseDC来释放。
以下是一些常用到的函数:
1、 检查GetWindowDC(), 后面是否有ReleaseDC();
2、 检测GetDC();后面是否有ReleaseDC();
3、 检测画刷CBrush:
CreateSolidBrush()-》 DeleteObject();
4、 检测画笔 CPen
CreatePen()->DeleteObject();
5、 检测创建字体CFont
CreateFont->DeleteObject();
CreatePointFont()->DeleteObject();
6、 检测 创建WIN32窗口
HWND hwnd = ::CreateWindow () -> DestroyWindow(hwnd);
7、 CBitmapbmp;
bmp.CreateCompatibleBitmap(&dc, rcClient.Width(), rcClient.Height()); 后面要有bmp.DeleteObject();
8、 CFont *pOldFont =pDC->SelectObject(&m_font);
是否有pDC->SelectObject(pOldFont);
9、 CRgn CreateRoundRectRgn() -> DeleteObject();
10、Graphics gc(pDC) -> gc.ReleaseDC(pDC);
11、CDialog对话框 Create() 出来的,需要有 DestroyWindow();
12、凡是通过函数得到句柄的都需要用CloseHandle(句柄)来释放;
如:HANDLE, HBRUSH ,HPEN HANDLE hFile = CreateFile(); -> CloseHandle(hFile);
二、内存的检测方法:
通过任务管理器中的“内存”列表,或是procexp.exe来观察是否出现内存泄露
//增减 (1) LONG InterlockedIncrement(IN OUT LONG volatile *lpAddend); lpAddend为长整型变量的地址,返回值为原始值。这个函数的主要作用是原子性自增(相当于++操作)。 (2) LONG InterlockedDecrement(IN OUT LONG volatile *lpAddend); lpAddend为长整型变量的地址,返回值为原始值。这个函数的主要作用是原子性自减(相当于--操作)。 (3) LONG InterlockedExchangeAdd ( LPLONG Addend, LONG Increment ); Addend为长整型变量的地址,Increment为想要在Addend指向的长整型变量上增加的数值(可以是负数)。这个函数的主要作用是保证这个加操作为一个原子访问。 //交换 (4) LONG InterlockedExchange( LPLONG Target, LONG Value ); 用第二个参数的值取代第一个参数指向的值。函数返回值为原始值。 (5) PVOID InterlockedExchangePointer( PVOID *Target, PVOID Value ); 用第二个参数的值取代第一个参数指向的值。函数返回值为原始值。 //比较交换 (6) LONG InterlockedCompareExchange( LPLONG Destination, LONG Exchange, LONG Comperand ); 如果第三个参数与第一个参数指向的值相同,那么用第二个参数取代第一个参数指向的值。函数返回值为原始值。 (7) PVOID InterlockedCompareExchangePointer ( PVOID *Destination, PVOID Exchange, PVOID Comperand ); 如果第三个参数与第一个参数指向的值相同,那么用第二个参数取代第一个参数指向的值。函数返回值为原始值。
调 整岗位,设计薪酬,定岗定编,管理改善……都少不了工作时间调查。如果问“每天工作时间多少?”大都回答的与上班时间相等。为了区别,找出岗位员工有价值 的工作时间,我特地加了二个字“有效”!心想,这下应该得到我想要的结果了吧。没想到调查表一收上来,我担心的情形还是出现了:90%的员工都把在企业的 所有时间算成了有效工作时间。在他们看来,只要到了企业,吃饭、喝水、上厕所都是有效工作时间。这样的结果真让我哭笑不得。看来调查又得重做了。 到底什么时间才能算有效工作时间呢?如果不作区分,管理就不能细化,改善就无从说起。因此,我们首先得下一个定义:称职员工完成一件工作的必须时间就是有效工作时间。 为 什么要加一个“称职”来限定呢?如果一个没有经验的员工做事,别人需要三分钟完成的工作,你半天才能完成,也算有效工作时间,那企业不就亏大了?举例来说 联系客户传递发货明细单,我们只能计算你打电话、发传真的时间为有效工作时间。如果你把客户的电话搞丢了,找电话号码的时间,或者电话打错了浪费的时间, 或者传真机坏了的等待时间,都不能算作有效工作时间。又如库管员,我们只能计算你发货或收货的时间,以及整理货物的时间为有效工作时间,当没有收发货时, 你如果坐在哪儿看天花板,或者上网聊天,是不能计算为有效工作时间的。 还有一种情况,应公司要求加班的时间,也不等于有效工作时间。也说库管员吧,主管告诉你晚上有车货到,请你加班收货。也许你七点钟就到岗等候了,但晚上九点钟货才到厂,十点钟货才卸完。加班时间可以算你三小时,而有效工作时间只有一小时。 这样一来,我们就应该明白,如果上班时间为八小时,通常情况下,大多数员工的有效工作时间是达不到八小时的。我们必须扣除等待、无意义的闲聊、串岗或处理个人私事的时间。为了工作的扯皮时间,也是不能计算到有效工作时间内的。 据我个人的观察,一个员工如果能在八小时之内有效工作时间达到六小时就已经很不错了。 如 何真正了解员工的有效工作时间呢?我们不妨找几个工作比较饱满的员工做实验:让他们把每天每项工作的起始时间记录下来。告诉员工企业不是按有效工作时间计 算工资,他们尽可以放心填写,谁在同一工作时间内创造的价值大或做的工作多,谁就应该受到鼓励,以后提拔干部也从效率高的员工中选拔。这样,你就可以得到 比较真实的数据。 也有的员工有良好的工作习惯——写工作日志。分析员工的工作日志也能找到同类岗位员工的有效工作时间。 把握员工有效工作时间,为改善管理做准备,是人力资源部门的基本职责,但也是被许多企业忽略的职责。
转载请注明作者及出处: http://blog.csdn.net/xieyan0811
1. android文件管理器介绍
android系统并不自带文件管理器,但是很多情况下,我们有诸如从SD中打开文件的需要,就必须借助三方开发的资源管理器,常用的有AndExplorer等。这种情况下发布后,用户还需要安装依赖的软件,非常麻烦。下面介绍在代码中实现资源管理器,只需要一百行左右的一个类即可以最常用的文件选择功能。
2. 相关知识
文件管理器一般以固定大小的对话框的方式出现,使用ListView作为文件目录的显示载体。点选目录测进入,点选文件则将所选择文件的Uri返回给调用它的Activity。ListView的使用是实现这个功能的重点。
3. 例程
1) 功能
当用户点击按钮时,调出固定大小的文件管理器,默认显示的目录是SD卡的根目录。用户选择文件后,在界面上显示该文件的路径。
2) 可从此处下载可独立运行的代码
http://download.csdn.net/source/3423094
3) 核心代码及说明
a) 调用资源管理器
Intent intent = new Intent();
intent.putExtra("explorer_title",
getString(R.string.dialog_read_from_dir)); // 设置文件管理器标题
intent.setDataAndType(Uri.fromFile(new File("/sdcard")), "*/*"); // 设置起始文件夹和文件类型
intent.setClass(MyActivity.this, ExDialog.class);
startActivityForResult(intent, REQUEST_EX);
b) 从资源管理器接收数据
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
String path;
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_EX) {
Uri uri = intent.getData(); // 接收用户所选文件的路径
TextView text = (TextView) findViewById(R.
分类 命令 含义 控制框架 launch 启动框架 shutdown 停止框架 close 关闭、退出框架 exit 立即退出,相当于 System.exit init 卸载所有 bundle (前提是已经 shutdown ) setprop 设置属性,在运行时进行 控制bundle install 安装 uninstall 卸载 start 启动 stop 停止 refresh 刷新 update 更新 展示状态 status 展示安装的 bundle 和注册的服务 ss 展示所有 bundle 的简单状态 services 展示注册服务的详细信息 packages 展示导入、导出包的状态 bundles 展示所有已经安装的 bundles 的状态 headers 展示 bundles 的头信息,即 MANIFEST.MF 中的内容 log 展示 LOG 入口信息 其他 exec 在另外一个进程中执行一个命令(阻塞状态) fork 和 EXEC 不同的是不会引起阻塞 gc 促使垃圾回收 getprop 得到属性,或者某个属性 控制启动级别 Sl 得到某个 bundle 或者整个框架的 start level 信息 Setfwsl 设置框架的 start level Setbsl 设置 bundle 的 start level setibsl 设置初始化 bundle 的 start level
修改:sip_general_additional.conf
; do not edit this file, this is an auto-generated file by freepbx ; all modifications must be done from the web gui vmexten=*97 bindport=5060 #使用×××时修改该地方,IP为asterisk主机的内部IPbindaddr=192.168.1.10 #这里增加asterisk所支持的编码#也可增加至sip.conf中disallow=all allow=ulaw allow=alaw context=from-sip-external callerid=Unknown notifyringing=yes notifyhold=yes limitonpeers=yes tos_sip=cs3 tos_audio=ef tos_video=af41 如果以上设置后拨入无法拨通则修改sip_nat.conf
externip = 62.69.4.121 # 该处为asterisk 机的外部IPlocalnet=192.168.0.0/255.255.0.0 修改 zapata.conf 增加以下三项如果该三项不存在的话
echocancel=yes echocancelwhenbridged=yesechotraining=yes 使用 ztmonitor <channel num> -vv 该命令查看 rxgain/txgain 的变化 根据变化的值适当调整 rxgain/txgain 的值
ztmontor 中的<channel num>的指你当前通话的通道编号 如 zap/32-xxxxx , 32则为 channel num 该命令一定要在你测试的通话经行过程中使用 运行如下 [root@elastix ~]# ztmonitor 32 -vv Visual Audio Levels.
手机应用中最酷的可能就是位置服务相关的了,如何读取GPS信息,在官方文档上有相当详细的说明,后面如果有机会,我也会专门写例子来介绍(教程已完成,请参见:教程:实现Android的不同精度的定位(基于网络和GPS))。但今天,我们先来看下如何以编程的方式来开启或关闭GPS。
官方的API中,android.provider.Settings.Secure类有2个静态方法:
public static final void setLocationProviderEnabled (ContentResolver cr, String provider, boolean enabled)
和
public static final boolean isLocationProviderEnabled (ContentResolver cr, String provider)
不过遗憾的是,这2个方法都注明了从API Level 8(即Android 2.2)才开始提供,那么在2.2之前又该如何编程实现GPS的开关呢?
山重水复疑无路 首先,我们要知道,Android系统的设置画面中就可以进行GPS的开关,那么它是如何实现的呢?
由于我的机器上的android source是2.3版本的,所以直接启动了一个2.1的模拟器,用adb pull将Settings.apk抓下来,反编译之后,在SecuritySettings类中找到如下代码:
package,com.android.settings.SecuritySettings.java
1 2 3 4 5 6 7 8 CheckBoxPreference localCheckBoxPreference3 = this.mGps; if (paramPreference == localCheckBoxPreference3) { ContentResolver localContentResolver3 = getContentResolver(); boolean bool6 = this.mGps.isChecked(); Settings.Secure.setLocationProviderEnabled(localContentResolver3, "gps", bool6); continue; } 可以看到2.1系统中已经存在有Settings.Secure.setLocationProviderEnabled方法了,只是该方法没有开放而已,事实上读过Android源码的人都对/*hide*/很反感吧,看得到,摸不到!
既然Setting画面中的用法,我们不能使用,那么再换1种方法,我们去看一下Settings.Secure.setLocationProviderEnabled的写法,然后直接套用。
这次,我们直接去看Android 2.3的源码,找到Setting.java之后,找到相关的方法,代码如下:
core, android.provider.Setting.java
1.将字符串转为byte数组 string imgData = "....,...,....,...."; string [] imgArr=imgData.Split(new char[]{','}); byte[] bty = Array.ConvertAll<string, byte>(imgArr, delegate(string s) { return byte.Parse(s); });
2.将byte数组转为字符串 主要两个主要方法: String.Join(): 在指定 String 数组的每个元素之间串联指定的分隔符 String,从而产生单个串联的字符串。 Array.ConvertAll(): 将一种类型的数组转换为另一种类型的数组。 例:将目标数组ArraySource(字节)的元素以","分隔,输出字符串。 string result = String.Join(",", Array.ConvertAll(ArraySource, (Converter<byte, string>)Convert.ToString));
---------------------------------------------------------------------------- //Image-->Byte[]-->String Byte[] bytes = File.ReadAllBytes(@"d:\a.gif"); MemoryStream ms = new MemoryStream(bty); String imgStr = Convert.ToBase64String(ms.ToArray());
//String-->Byte[]-->Image byte[] imgBytes = Convert.FromBase64String(imgStr); Response.BinaryWrite(imgBytes.ToArray()); // 将一个二制字符串写入HTTP输出流
转载于:https://www.cnblogs.com/dgjack/archive/2011/06/17/2083492.html
来源:
http://hi.baidu.com/ritrachiao/blog/item/235d17fea40e528db901a0cc.html
首先简单介绍一下Toast(吐司)。这个控件的用词相当准确,它所表现出来的特征正是吐司似的弹出效果,而且非常的简单便捷。Android自带的整个Toast功能能够帮助我们编写程序的时候实现简单的提醒功能,使得程序的应用变得更加友好。
可是在使用Toast的时候,无论是使用makeText(),还是使用toast.setDuration(),在其中进行Toast显示时间的设置时,取值Toast.LENGTH_LONG,或者是Toast.LENGTH_SHORT,Toast都会只是一闪而过,显示的时间很短。如果我们需要提醒大量的信息的时候,显然这样是用Toast是很不友好的。那么,如何能够使得Toast可以长时间显示呢?
在Java中有一个类,叫做Timer,这个类可以帮我们。
示例如下:
private Toast toast = null;
private class IntroButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toast = Toast.makeText(StartPage.this, toastText,Toast.LENGTH_LONG);
initToast();
execToast();
}
}
private void execToast(){
Timer timer = new Timer();
timer.schedule(new TimerTask(){
@Override
public void run() {
// TODO Auto-generated method stub
initToast();
}
}, 30);
}
private void initToast(){
toast.show();
}
我在这里将Toast的示例化延迟到了触发事件是再响应,然后调用的是makeText()方法,给它设置Duration的值为Toast.LENGTH_LONG,然后将toast.show()用一个方法initToast()包起来,这么做的目的是让它显示在Timer中也会接着显示我的Toast。
这么做的逻辑是,首先先显示Toast,然后让Timer帮助再次显示Toast,这样就会出现了Toast长时间显示的效果,如果想让时间变得更长,可以修改Timer里面timer.schedule()的值,我这里设置的是30。
你可以直接Copy这段代码,这是我测试通过的。如果你真的有必要利用提醒和用户产生互动,建议不要使用Toast,可以改用Dialog,可能效果会更好些。
http://oss.org.cn/kernel-book/index.htm
http://www.kernel.org/
tatusBar 图标显示流程 (2010-11-05 15:23:29)转载 分类: Android学习 公司前些天发现一个状态栏显示图标不正确的Bug,昨天也转给我,看我能帮上什么忙,我对状态栏完全没有接触,正好趁这个机会,粗略看了下相关的代码,记下来一些自己的理解。希望能对以后有些帮助。 由于同事的帮助,我不需要从头开始找起,我对StatusBar Service的理解是从StatusBarPolicy开始的。 --StatusBarPolicy-- 包含了所有在启动时安装在StatusBar上图标的策略。看了一下这个类的属性值,基本我们显示的图标信息都有定义,例如:时钟,电池电量,手机信号,蓝牙,Wifi,gps等。在类的内部有一个变量 mIntentReceiver,它是BroadcastReceiver类型。它接受各种Intent信息,然后调用本类的update*函数,对StatusBar的各种图标进行更新。它是如何更新的呢?原来在它的属性值中保存了StatusBarService 的引用mService!它对图标的更新都会转化为StatusBarService 对updateIcon等方法的调用。 总体来说StatusBarPolicy保存了图标的引用,根据各种策略计算出现在应该显示的图标,然后将图标的资源ID等信息进行封装后,传递给StatusBarService。 --StatusBarService-- 在此服务中updateIcon 转化为对addPendingOp调用,这里需要注意addPendingOp 参数code,这个参数给出了具体执行的逻辑分支,并将我们的调用封装为了PendingOp类型,然后加到mQueue队列中,看到这里我立刻就想到去寻找Handler,果真在类中有一个成员变量H 为Handler类型; 现在在H 的handleMessage方法中寻找我们更新的code类型OP_UPDATE_ICON,在这种情况下会调用performAddUpdateIcon()。 在performAddUpdateIcon类中会区分两种情况进行处理,一种是notification,一种是icon,从我们刚才哪个路径进来的函数if (n != null) 判断为false,不会走入,接着看icon分支。 StatusBarIcon icon = mIconMap.get(key); 这个的意义是看Icon是否已经加在了StatusBar上了,如果icon ==null表明StatusBar没有相应图标需要增加,否则可能需要更新图标。具体将Icon增加到 StatusBar上的是这个语句: mStatusIcons.addView(icon.view, pos); Icon进行更新的是icon.update(mContext, data);
IE下的滚动条样式 IE是最早提供滚动条的样式支持,嗯,好多年了,但是其它浏览器一直没有支持,IE独孤求败了。
这些样式规则很简单:
scrollbar-arrow-color: color; /*三角箭头的颜色*/ scrollbar-face-color: color; /*立体滚动条的颜色(包括箭头部分的背景色)*/ scrollbar-3dlight-color: color; /*立体滚动条亮边的颜色*/ scrollbar-highlight-color: color; /*滚动条的高亮颜色(左阴影?)*/ scrollbar-shadow-color: color; /*立体滚动条阴影的颜色*/ scrollbar-darkshadow-color: color; /*立体滚动条外阴影的颜色*/ scrollbar-track-color: color; /*立体滚动条背景颜色*/ scrollbar-base-color:color; /*滚动条的基色*/ 大概就这些,你也可以定义cursor来定义滚动条的鼠标手势。
这里,很久以前danger做了个基于Flash的可视化工具,简单但是好用:
选中CSS选项即可自动生成CSS样式,这里不再过多的介绍了。嗯,多谢大猫老湿推荐。
webkit的自定义滚动条样式 yes,这里才是今天要重点介绍的。
从上一部分的样式名中就可以看到,IE只能定义相关部分的color等属性,这样太不灵活了。
webkit最近实现了对滚动条的支持,先看一个简单的demo:
不过,webkit不再是用简单的几个CSS属性,而是一坨的CSS伪元素:
::-webkit-scrollbar 滚动条整体部分 ::-webkit-scrollbar-button 滚动条两端的按钮 ::-webkit-scrollbar-track 外层轨道 ::-webkit-scrollbar-track-piece 内层轨道,滚动条中间部分(除去) ::-webkit-scrollbar-thumb (拖动条?滑块?滚动条里面可以拖动的那个,肿么翻译好呢?) ::-webkit-scrollbar-corner 边角 ::-webkit-resizer 定义右下角拖动块的样式 通过这些伪元素,可以完全的重写一个网站的滚动条样式。
当然webkit提供的不止这些,还有很多伪类,可以更丰富滚动条样式:
:horizontal – horizontal伪类应用于水平方向的滚动条 :vertical – vertical伪类应用于竖直方向的滚动条 :decrement – decrement伪类应用于按钮和内层轨道(track piece)。它用来指示按钮或者内层轨道是否会减小视窗的位置(比如,垂直滚动条的上面,水平滚动条的左边。):increment – increment伪类和decrement类似,用来指示按钮或内层轨道是否会增大视窗的位置(比如,垂直滚动条的下面和水平滚动条的右边。):start – start伪类也应用于按钮和滑块。它用来定义对象是否放到滑块的前面。 :end – 类似于start伪类,标识对象是否放到滑块的后面。 :double-button – 该伪类以用于按钮和内层轨道。用于判断一个按钮是不是放在滚动条同一端的一对按钮中的一个。对于内层轨道来说,它表示内层轨道是否紧靠一对按钮。:single-button – 类似于double-button伪类。对按钮来说,它用于判断一个按钮是否自己独立的在滚动条的一段。对内层轨道来说,它表示内层轨道是否紧靠一个single-button。:no-button – 用于内层轨道,表示内层轨道是否要滚动到滚动条的终端,比如,滚动条两端没有按钮的时候。 :corner-present – 用于所有滚动条轨道,指示滚动条圆角是否显示。 :window-inactive – 用于所有的滚动条轨道,指示应用滚动条的某个页面容器(元素)是否当前被激活。(在webkit最近的版本中,该伪类也可以用于::selection伪元素。webkit团队有计划扩展它并推动成为一个标准的伪类) 另外,:enabled、:disabled、:hover 和 :active 等伪类同样可以用于滚动条中。
你好, 这个部门是LTE部门,现在是2种职位,我推荐你的是LINUX C. C/C++ 精通 48月 Linux 熟练 36月 TCP/IP 精通 36月 职位需求: 一 LTE 方向软件开发 职位需求: 1 C++/C 语言(以 c++ 为主) 2 无线通讯背景,熟悉无线协议 3 接入网、 3G 、 RNC 、 GSM 领域 二 LINUX 操作系统核心开发, 职位任职条件: 1 LINUX 下的 C/C++ 2 工作经验》 2 年 3 通讯行业 R&D SW Design Engineer (Linux Kernel Platform Development for TD-LTE) Responsibilities: - Design a high-performance adaptive layer on top of Linux kernel. Make application program written on non-Linux environment run transparently without porting.
http://blog.csdn.net/wangxing1018/archive/2009/05/29/4224129.aspx
要搞清楚fork的执行过程,就必须先讲清楚操作系统中的"进程(process)"概念。一个进程,主要包含三个元素:
o. 一个可以执行的程序; o. 和该进程相关联的全部数据(包括变量,内存空间,缓冲区等等); o. 程序的执行上下文(execution context)。 不妨简单理解为,一个进程表示的,就是一个可执行程序的一次执行过程中的一个状态。操作系统对进程的管理,典型的情况,是通过进程表完成的。进程表中的每一个表项,记录的是当前操作系统中一个进程的情况。对于单CPU的情况而言,每一特定时刻只有一个进程占用CPU,但是系统中可能同时存在多个活动的(等待执行或继续执行的)进程。 一个称为"程序计数器(program counter,pc)"的寄存器,指出当前占用CPU的进程要执行的下一条指令的位置。 当分给某个进程的CPU时间已经用完,操作系统将该进程相关的寄存器的值,保存到该进程在进程表中对应的表项里面;把将要接替这个进程占用CPU的那个进程的上下文,从进程表中读出,并更新相应的寄存器(这个过程称为"上下文交换(process context switch)",实际的上下文交换需要涉及到更多的数据,那和fork无关,不再多说,主要要记住程序寄存器pc指出程序当前已经执行到哪里,是进程上下文的重要内容,换出CPU的进程要保存这个寄存器的值,换入CPU的进程,也要根据进程表中保存的本进程执行上下文信息,更新这个寄存器)。 好了,有这些概念打底,可以说fork了。当你的程序执行到下面的语句: pid=fork(); 操作系统创建一个新的进程(子进程),并且在进程表中相应为它建立一个新的表项。新进程和原有进程的可执行程序是同一个程序;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!此时程序寄存器pc,在父、子进程的上下文中都声称,这个进程目前执行到fork调用即将返回(此时子进程不占有CPU,子进程的pc不是真正保存在寄存器中,而是作为进程上下文保存在进程表中的对应表项内)。问题是怎么返回,在父子进程中就分道扬镳。 父进程继续执行,操作系统对fork的实现,使这个调用在父进程中返回刚刚创建的子进程的pid(一个正整数),所以下面的if语句中pid<0, pid==0的两个分支都不会执行。 子进程在之后的某个时候得到调度,它的上下文被换入,占据 CPU,操作系统对fork的实现,使得子进程中fork调用返回0。所以在这个进程(注意这不是父进程了,虽然是同一个程序,但是这是同一个程序的另外一次执行,在操作系统中这次执行是由另外一个进程表示的,从执行的角度说和父进程相互独立)中pid=0。这个进程继续执行的过程中,if语句中 pid<0不满足,但是pid==0是true。
什么是IIS访问日志?如何查看IIS日志? 2010-05-17 22:41 IIS日志,主要用于记录用户和搜索引擎蜘蛛对网站的访问行为。IIS日志中,包括客户端访问时间、访问来源、来源IP、客户端请求方式、请求端口、访问路径及参数、Http状态码状态、返回字节大小等信息。
如何查看IIS日志?
Windows2003环境中,IIS日志默认存储路径:C:/WINDOWS/system32/LogFiles/ ,在LogFiles文件夹下,存在多个IIS日志文件夹,每个IIS日志文件夹对应一个站点日志。当然IIS日志文件存储位置也可以根据自己的实际情 况,在IIS管理器中重新设定。
要查看对应站点的IIS日志,只需要打开对应IIS日志文件夹找到相对应日志文件即可。也可借助IIS日志分析工具提供查看IIS日志的效率!
IIS日志文件存储格式:IIS日志是后缀名为log的文本文件。
IIS日志文件代码格式:
#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2009-11-26 06:14:21
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status 2009-11-26 06:14:21 W3SVC692644773 125.67.67.* GET /index.html - 80 - 123.125.66.130 Baiduspider+(+http://www.baidu.com/search/spider.htm) 200 0 64
2009-11-26 06:14:21 W3SVC692644773 125.67.67.* GET /index.html - 80 - 220.181.7.116 Baiduspider+(+http://www.baidu.com/search/spider.htm) 200 0 64
IIS日志参数详解:
date:发出请求时候的日期。
time:发出请求时候的时间。注意:默认情况下这个时间是格林威治时间,比我们的北京时间晚8个小时,下面有说明。
c-ip:客户端IP地址。
1.把大块的任务分割成小块。 善于化大为小,难题就好解决了。常出成绩的人大都懂得这种方法的价值。你想写二百页的书稿吧?每天写一页,不到七个月就可完成。如果想一下子搞定,只能被目标吓倒。有了艰巨的任务,首先分解它,化成一系列小任务,再一个接一个地完成就容易搞定了。
2.正视不合心意的工作。找一段时间专做不合心意的事务,是磨练意志的好方法。
3.立即动手。你的房间该打扫了吗?现在就去找工具。得交报告吗?马上拿出纸列上几个要点。要勒令自己,决不拖延,有事情及早做。
4.利用兴致。你无意写报告,却可能有兴趣翻阅有关资料;不想修电器,却可能愿意先收集所需元件,在该办的事情中先拣有兴趣的办,让你的良好的精神状态为你服务。
5.分析利弊。对目标有意识地加以分析,看看尽快实践有啥好处,拖拉有哪些坏处,这对下定决心立即着手很有督促作用。
6.向别人保证。请别人来督促你,会使你产生一种有益的焦虑感和时间紧迫感,这会有效地克服拖拉。
7.每天做结算。“明天就在眼前,学会把每一天当作礼品来对待。”把时间看作财富,你就不会再拖拉了。
8.要有实施的勇气。勇气是克服懦弱,付诸实施的能力。潜力之所以没发挥出来,是因为自己限制了自己,缺乏突破的勇气。突破了胆怯的限制,就能充分发挥潜力。
最后,最好每天早上问自己“我面临的最大问题是什么?今天打算把它解决到什么程度?该做哪些事情?”克服了拖拉的习惯,你就会跑在时间的前头。
要有三感,即:责任感、恐惧感、
第一,要有责任感--拖拉岂不是谋杀别人的时间?世间最宝贵的就是时间了. 第二,要有恐惧感--拖拉的后果是什么?如果客观上会损害自己的利益(工作完不成,领导、同事不信任),你当会惧之. 最后,要有耻辱感--该做好的人无信不立,轻言寡诺办事拖拉者,君子所不齿!
http://hi.baidu.com/wxp886/blog/item/d3468feff0d49933adafd5ab.html Windows Media Player是Microsoft公司提出的流播放方案 Media Service 的重要组成部分,是一个通用的媒体播放器。在Media Service解决方案中,Media Player是作为客户端流播放应用程序来使用的。事实上,Media Player既可以象一个普通的应用程序一样单独使用,播放本地或网络上的流信息;也可以由HTML文本中的超级连接来启动以播放流信息;它还可以作为一个ActiveX对象在Web页面中使用。Media Player作为一个通用的媒体播放器除了播放ASF格式的流信息之外,它还可以播放多种格式的媒体信息,包括:声音文件(.wav, .snd, .aif, .au, .mp3),MIDI文件(.mid, .rim, .midi),图象文件(.mov, .avi, .qt. .wmv, .mpg, .mpeg, m1v), 播放列表文件(.asx, .wax, .m3u)等。目前Media Player已经集成在Microsoft的IE5.0中,如果要在Netscape 或低版本的IE中使用Media Player则需要安装,用户可以在Microsoft的www.windowsmedia.com上去免费下载。Media Player的工作界面如图1 所示。下面我们将对Media Player的使用做详细的介绍。首先我们要简单地介绍如何将Media Player作为一个独立的应用程序来使用,以及如何在HTML建立hyperlink以启动Media Player。然后着重介绍如何在Web页中将Media Player作为一个ActiveX对象来使用,并用JavaScript对其工作过程进行控制。 图 1 Media Player的工作界面 1 将Media Player作为独立使用的应用程序 将Media Player做为一个独立的应用程序的使用比较简单,只要在File菜单中选择Open,然后输入或选择要播放的文件就可以对该文件进行播放。如图2所示。如果要播放Media Server上广播的节目,可以在Open对话框中输入mms://IP_address/station_name 即可以直接播放Server上播放的节目。其中IP_address是Media Server的地址,而station_name是节目的站名。 图2 用Media Player直接播放ASF文件 2 利用ASX文件在HTML启动Media Player 打开Media Player的另一种方式是用HTML中超级连接,这需要用一个ASX文件来辅助完成该工作。ASX(Advanced Stream Redirector)文件是一个文本文件,它主要的目的对流信息重定向。在ASX文件中包含了媒体内容对应的的URL(Uniform Resource Locator),当我们在HTML中让一个hyperlink 与ASX联系时,浏览器会直接将ASX的内容送给Media Player,Media Player会根据ASX文件的信息用相应的协议去打开指定位置上的多媒体信息流或多媒体文件。 利用ASX文件来重定向流信息的主要原因是:目前通用的浏览器通常均不能直接支持用于播放流信息的协议,如Microsoft 的Media Server protocol (MMS) or Microsoft® NetShow™ Theater Server protocol。它们通常支持的协议是HTTP,FTP等协议。因此如果我们在HTML 文件中链接是http://www.
http://mykzhy.blog.163.com/blog/static/81802482007116355444/ Windows Media Player 网页播放器 参数含义 (默认0为否,-1或1为是) <object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" width="286" height="225"> <param value="/-1"> <param value="-1"> <!--是否自动调整播放大小--> <param value="-1"> <!--是否自动播放--> <param value="-1"> <param value="-1"> <param value="-1"> <param value="0"> <param value="0"> <!--左右声道平衡,最左-9640,最右9640--> <param value> <param value="15"> <!--缓冲时间--> <param value> <param value="-1"> <param value="0"> <param value="0"> <!--当前播放进度 -1 表示不变,0表示开头 单位是秒,比如10表示从第10秒处开始播放,值必须是-1.0或大于等于0--> <param value="0"> <param value> <param value="0"> <param value="16777215"> <param value="0"> <param value="0"> <!--视频1-50%, 0-100%, 2-200%,3-全屏 其它的值作0处理,小数则采用四舍五入然后按前的处理--> <param value="-1"> <param value="-1"> <!-是否用右键弹出菜单控制--> <param value="
1、先要设置应用程序池(ApplicationPool)为Classic.NETAppPool,而不是默认的DefaultAppPool,可以在网站目录里对每个站点设置,也可以在站点进行单独设置。
控制面板--系统和安全--管理工具--Internet信息服务(IIS)管理器,打开IIS管理器。选中左侧的默认网站,单击右侧的高级设置,将应用程序池设置为Classic.NETAppPool。
2、选中左侧的“应用程序池”,选中“Classic.NETAppPool”,单击右侧的高级设置,将标识改为localSystem或NetworkService。
3、选中默认网站,点击右侧的基本设置,点击“连接为”,选择“特定用户”,点击设置,输入系统用户名密码。这里必须用操作系统的登录名和密码,不然无权访问硬盘分区。
4、控制面板 --> 管理工具 -->Internet 信息服务(IIS)管理器 程序中找到
打开 Internet 信息服务(IIS)管理器 后,在中间部分的下部,可以看到 身份验证 配置项,双击就是如下界面:
安装IIS时增加的几个身份验证,需要在要调试的站点上启用。
注意:是要调试的站点,而不是要调试的应用程序目录!
在对应的 IIS 应用程序池中,“设置应用程序池默认属性”/“常规”/"启用32位应用程序",设置为 true。这里设置很重要------这是我发现的哦,小高兴一下,呵呵
安装
进到控制面版-程序和功能-打开或关闭windows功能-internet信息服务-选中所要安装的项即可
-----------------
1、先要设置应用程序池(ApplicationPool)为Classic.NETAppPool,而不是默认的DefaultAppPool,可以在网站目录里对每个站点设置,也可以在站点进行单独设置。
控制面板--系统和安全--管理工具--Internet信息服务(IIS)管理器,打开IIS管理器。选中左侧的默认网站,单击右侧的高级设置,将应用程序池设置为Classic.NETAppPool。
2、选中左侧的“应用程序池”,选中“Classic.NETAppPool”,单击右侧的高级设置,将标识改为localSystem或NetworkService。
3、选中默认网站,点击右侧的基本设置,点击“连接为”,选择“特定用户”,点击设置,输入系统用户名密码。这里必须用操作系统的登录名和密码,不然无权限访问硬盘分区。
4、控制面板 --> 管理工具 -->Internet 信息服务(IIS)管理器 程序中找到
打开 Internet 信息服务(IIS)管理器 后,在中间部分的下部,可以看到 身份验证 配置项,双击就是如下界面:
IIS时增加的几个身份验证,需要在要调试的站点上启用。
注意:是要调试的站点,而不是要调试的应用程序目录!
-------------------
五、选择 Default Web Site,并双击 ASP 的选项。
六、IIS7中ASP 父路径 是没有启用的,要 开启父路径,选择True,搞定父路径选项
九、点击 默认文档, 设置网站的默认文档。
---------------
七 让同一局域网里面的人也能访问自己的电脑上的网站。 1、依次选择:开始---所有程序---管理工具---高级安全 Windows 防火墙。(有的电脑在所有程序里面可能没有”管理工具”;这时可以开始----在空白处鼠标右击---属性---自定义---找到系统管理工具;选择“在所有程序菜单上显示”;这样在所有程序里面就有管理工具了 )
2、在高级安全 Windows 防火墙的左边栏;选择“入站规则”。 3、在右边栏选择"新建规则“。
4、在弹出的窗口依次选择:选中端口---下一步---选中TCP以及特定本地端口;填入要开放的端口号(这里填入80;当让也可以选择开放所有端口)---下一步---选中允许连接---下一步---选中所有选项---下一步---填入名称(这里填入IIS)
http://hi.baidu.com/princevow/blog/item/1c587b5439e5114bd009065e.html
注意:任何情况下,都不要去改动MNC和MCC,不要问我为什么,我只告诉你,改了MNC和MCC之后,设置就会消失不见。
首先是最简单,最方便的自动设置APN方法,如果自动Ineternet为灰色,那么只能自己手动设置
两种方法分别介绍如下:
一、自动设置APN方法如下
进入 设置 > 无线控件 > 移动网络 > 点击“自动Internet设置”
然后进入接入点名称
1、如果你是移动2G用户,请选择中国移动互联网(也就是CMNET)
不要选择CMWAP,因为使用CMWAP无法登陆电子市场,也无法下载软件,更无法同步联系人和日历)
2、如果你是联通3G用户,请选择中国联通互联网(也就是3GNET),然后删除掉2个2G设置
3、如果你是联通2G用户,请选择2G中国联通互联网(也就是UNINET),然后删除掉2个3G设置
二、手动设置APN
如下操作 设置 > 无线控件 > 移动网络 > 接入点名称 > 按MENU键 > 新APN
1、中国移动2G相关设置:
cmnet接入点 名称:移动cmnet
APN:cmnet
APN类型:default
其他全部为空
cmwap接入点
名称:移动cmwap
APN:cmwap
代理:10.0.0.172
端口:80
APN类型:default
其他全部为空
彩信
名称:移动彩信
apn:cmwap
代理:010.000.000.172
端口:80
主页:http://mmsc.monternet.com
彩信代理:010.000.000.172
彩信端口:80
apn type:mms
其他全部为空
2、中国联通3G网络相关设置
联通3GNET上网设置
名称:3gnet
APN:3gnet
端口:80
APN类型:defaul
其他全部为空
联通3GWAP上网设置
名称:3gwap
APN:3gwap
代理:10.0.0.172
端口:80
APN类型:default
其他全部为空
Description
'Oh no, they've done it again', cries the chief designer at the Waferland chip factory. Once more the routing designers have screwed up completely, making the signals on the chip connecting the ports of two functional blocks cross each other all over the place. At this late stage of the process, it is too expensive to redo the routing. Instead, the engineers have to bridge the signals, using the third dimension, so that no two signals cross.
dump file 是分析程序 crash 的利器, 在程序 crash 时写 dump 文件就是很自然的了. 而想要在程序 crash 的时候写 dump, 就不得不提 UnhandledExceptionFilter() 函数. 通过 API SetUnhandledExceptionFilter() 将自己写的 UnhandledExceptionFilter() 告诉操作系统, 系统在程序 crash 的时候就会调用这个函数. 用户在其中就可以完成想要的功能.
首先要解决的是 UnhandledExceptionFilter() 被多次调用的问题.
试想, 程序在一个线程中 crash, 执行 UnhandledExceptionFilter(), 在执行过程中, 另一个线程又出现 crash, 再次进入 UnhandledExceptionFilter() , 一般的这不是期望的结果. 所以, 在执行 UnhandledExceptionFilter() 时, 应该确保进程中所有其他的线程都被挂起. 就像当一个进程被调试器断点时, 被调试进程所有线程都被挂起一样. 似乎没有线程的 API 比如 SuspendAllThreads() 可以用, 但自己实现也很简单. 用 toolhelp 枚举所有线程, 逐个挂起即可, 注意不要把自己挂起.
UnhandledExceptionFilter() 被多次执行的另一种情况是, 其他线程都挂起了, 出错的线程执行完 UnhandledExceptionFilter() 之后退出, 进程还需要做一些清理工作, 在这个时候再次 crash, 又一次执行 UnhandledExceptionFilter().
IP地址分类/IP地址10开头和172开头和192开头的区别/判断是否同一网段
简单来说在公司或企业内部看到的就基本都是内网IP,ABC三类IP地址里的常见IP段。
每个IP地址都包含两部分,即网络号和主机号。 InterNIC将IP地址分为五类:
A类保留给ZF或大型企业,
B类分配给中等规模的公司,
C类分配给小公司或个人,
D类用于组播,
E类用于实验,
注:各类可容纳的地址数目不同。 A、B、C三类IP地址的特征:当将IP地址写成二进制形式时,
A类地址的第一位总是O,如,10.0.0.1==00001010-00000000-00000000-00000001
==》1.0.0.0-127.255.255.255,默认子网掩码为255.0.0.0,最多可容纳16777215台计算机
B类地址的前两位总是10,如,172.16.0.1==10101100-00010000-00000000-00000001
==》128.0.0.0-191.255.255.255,默认子网掩码为255.255.0.0,最多可容纳65535台计算机
C类地址的前三位总是110。如,192.168.0.1==11000000-10101000-00000000-00000001
==》192.0.0.0-223.255.255.255,默认子网掩码是255.255.255.0,最多可容纳254台计算机
IP地址中保留地址:主机部分全为0的IP地址保留用于网络地址,主机部分全为1的IP地址保留为广播地址,224--255部分保留作为组播和实验目的。 同时注意IP地址分配时不能使用最末位为0和255的地址,因为这是广播地址,普通计算机上不能使用,但可用于网关和路由器上。
专用IP地址: 就是我们在3类地址中常见到内网的IP段。
10.0.0.0--10.255.255.255
172.16.0.0--172.31.255.255 192.168.0.0--192.168.255.255 内网的计算机以NAT(网络地址转换)协议,通过一个公共的网关访问Internet。内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。
主机地址种类
概述 通过IP地址的引导位(最高位)来区分不同类别的IP地址: 注:n为网络编号位,h为主机编号位 A类地址 A类地址:0nnnnnnn.hhhhhhhh.hhhhhhhh.hhhhhhhh A类地址具有7位网络编号,因此可定义126个A类网络{2^7-2(网络编号不能是全0或全1 注1)-1(127为环回地址 注2)}每个网络可以拥有的主机数为16777214{2^24-2(主机位不能是全0或全1)}
十进制表示范围:1.0.0.1-126.255.255.254,任何一个0到127间的网络地址均是一个A类地址。 B类地址 B类地址:10nnnnnn.nnnnnnnn.hhhhhhhh.hhhhhhhh B类地址具有14位网络编号,因此可定义16382个B类网络{2^14-2} 每个网络可以拥有的主机数为65534{2^16-2} 十进制表示范围:129.0.0.1-191.255.255.254,任何一个128到191间的网络地址是一个B类地址。 C类地址 C类地址:110nnnnn.nnnnnnnn.nnnnnnnn.hhhhhhhh C类地址具有21位网络编号,因此可定义2097152个C类地址{2^21-2} 每个网络可以拥有的主机数为254{2^8-2} 十进制表示范围:192.0.0.1-223.255.255.254,任何一个192到223间的网络地址是一个C类地址。 D类地址 D类地址:1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx D类地址用于组播,前面4位1110引导,后面28位为组播地址ID。 十进制表示范围:224.0.0.0-239.255.255.255 E类地址 E类地址:总是以1111四位引导 E类地址用于研究用 十进制表示范围:240- IP地址由InterNIC(因特网信息中心)统一分配,以保证IP地址的唯一性,但有一类IP地址是不用申请可直接用于企业内部网的,这就是Private Address,Private Address不会被INTERNET上的任何路由器转发,欲接入INTERNET必须要通过NAT/PAT转换,以公有IP的形式接入。
这些私为地址为: 10.0.0.0-10.255.255.255(一个A类地址) 172.16.0.0-172.31.255.255(16个B类地址) 192.168.0.0-192.168.255.255(256个C类地址) 任何一个第一个八位组在224到239间的网络地址是一个组播地址 任何一个专用I P网络均可以使用包括: 1个A类地址( 10.0.0.0 )、 16个B类地址(从172.16.0.0到172.31.0.0 ) 256个C类地址(从192.168.0.0到192.168.255.0 ) CIDR值 子网掩码
停止启用了安全性的WAS Server而不手动输入密码之第二种选择 众所周知的应当是如下最简单的方式了 %PROFILE_HOME%/bin/stopServer.bat serverXyz -username Xyz -password Xyz 但是用户名与密码全是明文了,在某些场景下可能不太符合 现在给出第二种选择方法 set PROFILE_HOME=D:/IBM/WebSphere/AppServer/6.1/profiles/AppSrvSingle cd %PROFILE_HOME%/properties 先备份一下 sas.client.props 与 soap.client.props 文件 由于连接的方式有两种 : SOAP 与 RMI,默认是 SOAP 方式 1. SOAP 方式的修改 打开 soap.client.props 文件,约在第 26 行 com.ibm.SOAP.loginUserid= com.ibm.SOAP.loginPassword= 默认下,值均为空的,填入目前正在使用的用户与密码,比如均为WebSphere com.ibm.SOAP.loginUserid=WebSphere com.ibm.SOAP.loginPassword=WebSphere 然后执行 %PROFILE_HOME%/bin/PropFilePasswordEncoder.bat %PROFILE_HOME%/properties/soap.client.props com.ibm.SOAP.loginPassword -Backup 执行成功后,会有如下提示 NOTE: all specified passwords already encoded in target file == %PROFILE_HOME%/properties/soap.client.props 或 NOTE: Backup file %PROFILE_HOME%/properties/soap.client.props.bak contains unencoded passwords 打开 soap.client.props 文件可以看到密码已经加密,如下 com.ibm.SOAP.loginUserid=WebSphere com.
====================实例==============
删除所有.svn目录
这也是我当初查找 Linux find 命令的目的。
1) find . -type d -name ‘.svn’ | xargs rm -rf #先(递归)找到当前路径下含有 .svn的文件目录,再经 xargs逐个干掉
#(处理方式是逐个,并不是’删一条显示删了一条再继续删’这样的)
2) find . -type d -iname ‘.svn’ -exec rm -rf {} \; #先(递归)找到.当前路径下含有.svn的文件目录,再干掉
-iname filename #同-name ,区别 -i 忽略大小写
——————————————————–
Linux中find常见用法示例
find path -option [ -print ] [ -exec -ok command ] {} \;
#-print 将查找到的文件输出到标准输出
#-exec command {} \; —–将查到的文件执行command操作,{} 和 \;之间有空格,{} 表示find到的结果,最后有反斜杠\ 和 分号 ; 表示命令结束?
Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容。 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 Rowid的概念 Recursive Sql概念 Predicate(谓词) DRiving Table(驱动表) Probed Table(被探查表) 组合索引(concatenated index) 可选择性(selectivity) 二.oracle访问数据的存取方法 1) 全表扫描(Full Table Scans, FTS) 2) 通过ROWID的表存取(Table Access by ROWID或rowid lookup) 3)索引扫描(Index Scan或index lookup)有4种类型的索引扫描: (1) 索引唯一扫描(index unique scan) (2) 索引范围扫描(index range scan) 在非唯一索引上都使用索引范围扫描。使用index rang scan的3种情况: (a) 在唯一索引列上使用了range操作符(> < <> >= <= between) (b) 在组合索引上,只使用部分列进行查询,导致查询出多行 (c) 对非唯一索引列上进行的任何查询。 (3) 索引全扫描(index full scan) (4) 索引快速扫描(index fast full scan) 三、表之间的连接 1,排序 - - 合并连接(Sort Merge Join, SMJ) 2,嵌套循环(Nested Loops, NL) 3,哈希连接(Hash Join, HJ) 另外,笛卡儿乘积(Cartesian Product) 总结Oracle连接方法 Oracle执行计划总结概述 +++ 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的。 对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值。不过你可以像使用其它列那样使用它,但是不能删除改列,也不能对该列的值进行 修改、插入。一旦一行数据插入数据库,则rowid在该行的生命周期内是唯一的,即即使该行产生行迁移,行的rowid也不会改变。 Recursive SQL概念:有时为了执行用户发出的一个sql语句,Oracle必须执行一些额外的语句,我们将这些额外的语句称之为''recursive calls''或''recursive SQL statements''.
问题来源:
在给一个URL,和一个指定的服务器IP(这个是指,可能一个域名被DNS解析出多个IP,而这里强制指定)
这个时候如何通过libcurl发送请求包。
这个HTTP请求包的,请求头怎么样写
我自己的想法是:
把URL中的域名部分改成IP
把请求头的host域写成域名
如:
URL: http://www.52mli.com/portal.php
指定服务器:218.240.54.188
那么,我在设置url的时候参数改为:http://218.240.54.188/portal.php
头域中的host域为:Host: www.52mli.com
这个是根据HTTP请求的HOST头域功能和Web站点定位想出来的思路
Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。 如果这个域填错,或是不填都会提示404页面找不到错误
而一个web站点标识三要素:
(1) ip地址 (2)端口号 (3)主机头名。
而这里的主机头名就是指定的Host域,所以,只要把URL中域名部分替换成IP,那样,在发送请求的时候就不会进行域名解析。从而达到指定IP的效果。
[转自]http://wjhaishun.iteye.com/blog/657083 【更全面】http://www.sudu.cn/info/html/edu/20070101/283645.html 这个是对全局的 alter system set sql_trace=true alter system set sql_trace=false 使 SQL_TRACE设置 SQL跟踪非常简单,SQL_TRACE 是一个参数,只需要在会话层将它设 置为TRUE,就开启了 SQL跟踪,Oracle将会把 SQL 语句的执行过程记录到跟踪文件中。通 过查阅跟踪文件,将利于你了解 SQL语句的执行过程,这将帮助你调优、排故 SQL语句。 跟踪文件的位置在 user_dump_dest 初始化参数中,如下方法可以显示出跟踪文件的位 置: SQL> show parameter user_dump_dest NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ user_dump_dest string E:\ORACLE\PRODUCT\10.2.0\ADMIN \JJONE\UDUMP 在我的主机中,跟踪文件在 E:\ORACLE\PRODUCT\10.2.0\ADMIN\JJONE\UDUMP中。 下面我们练习一次 SQL跟踪。 步1:启用跟踪: SQL> alter session set sql_trace=true; 会话已更改。 注意要在会话层设置此参数,不要在实例层设置。 步2:执行需要跟踪的 SQL语句 SQL> select * from ui1 where id=1; ID NAME ---------- ----- 1 1 我们在此随变执行个什么语句都行,Oracle会将此语句的执行过程记录到跟踪文件中。 步3:关闭跟踪 SQL> alter session set sql_trace=false; 会话已更改。 注意,在执行完想要跟踪的语句后,要马上关闭跟踪。以免不必要的语句的执行过程也 被记录到跟踪文件中。这将影响阅读跟踪文件的结果。 步4:查阅跟踪文件: 到 E:\ORACLE\PRODUCT\10.
现在手中有Sql Server 2000中的数据库备份文件(如果此备份文件没有后缀名*.bak或*.trn,请追加相应的后缀名),欲将此文件还原到Sql Server 2005中,还原时突然报错,为此在网上搜索了有关文章,金庆的专栏 中有一篇《SQL2005备份还原问题 》讲解到了,但个人感觉不是很详细,现将分析和解决方法详细讲解。
【简单回顾】
如果我们有Sql Server 2000的数据库备份文件,要还原到另外一个Sql Server 2000数据库中,我们的操作是什么样的呢?
1、在目标数据库服务器中,打开Sql Server 2000的企业管理器,并新建与原库同名的数据库;
2、右键选择新建的数据库,找到并选择还原数据库,再随后的窗口中选择从设备;
3、添加Sql Server 2000的数据库备份文件并勾选覆盖原有数据库,点击确定,还原成功!
以上叙述为简单的回顾在Sql Server 2000中还原数据库的过程,虽然叙述的步骤不详细,但这大体的步骤已经可以说明一些问题了!请接着往下看……
【还原Sql Server 2005】
回顾完Sql Server 2000中的数据库还原步骤,那么要将Sql Server 2000的数据库备份还原到Sql Server 2005上是不是也是如此呢?于是我如此这般的做了:
1、在目标数据库服务器中,打开SQL Server Management Studio ,登录成功后,新建与原库同名的数据库;
2、右键选择新建的数据库,选择“任务”下的“还原”,再随后的窗口中选择“源设备”;
3、添加Sql Server 2000的数据库备份文件(此处的备份文件必须已经添加好后缀名),在列表中勾选此文件点击“确定”。
4、提示错误信息如下:
标题: Microsoft SQL Server Management Studio
------------------------------ 还原 对于 服务器“***”失败。 (Microsoft.SqlServer.Smo) 有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.3042.00&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=还原+Server&LinkId=20476 ------------------------------
其他信息: System.Data.SqlClient.SqlError: 备份集中的数据库备份与现有的 '***' 数据库不同。 (Microsoft.SqlServer.Smo) 有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.3042.00&LinkId=20476 ------------------------------
按钮: 确定
------------------------------
Check in:
ss Checkin %f
Check out:
ss Checkout %f
Command Shell
COMMAND.COM
Compile file
cl %f
explore
ShellExecute open explorer /e,/select,%f
Explore Project Folder
ShellExecute explore %j
p4 diff
p4win -D %f
p4 hist
p4win %f
p4 revert
p4 revert %f
Preview in web browser
ShellExecute iexplore %f
Search in Folder
ShellExecure fine %v
重复输入的延迟时间( Repeat Delay,又称为Typematic Delay)与重复速度(Repeat Rate,又称为Typematic Rate)。
Repeat Delay是按键一直被压下时,所送出第1个按下的字符讯号,并且在持续压按相同按键不放开的状态下,到第2次送出的按键讯号之间所经过的时间。Repeat Rate是经过Repeat Delay之后,每秒输出多少字符的速率,单位通常会以Chars / Sec(字符/秒)为主。由于将这两种数值降到最低,会让键盘在同一个时段中输出更多字符,有些使用者就将这些设定称为键盘灵敏度。
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode event.shiftKey event.altKey event.ctrlKey 事件返回值 event.returnValue 鼠标位置 event.x event.y 窗体活动元素 document.activeElement 绑定事件 document.captureEvents(Event.KEYDOWN); 访问窗体元素 document.all("txt").focus(); document.all("txt").select(); 窗体命令 document.execCommand 窗体COOKIE document.cookie 菜单事件 document.oncontextmenu 创建元素 document.createElement("SPAN"); 根据鼠标获得元素: document.elementFromPoint(event.x,event.y).tagName=="TD document.elementFromPoint(event.x,event.y).appendChild(ms) 窗体图片 document.images[索引] 窗体事件绑定 document.οnmοusedοwn=scrollwindow; 元素 document.窗体.elements[索引] 对象绑定事件 document.all.xxx.detachEvent('onclick',a); 插件数目 navigator.plugins 取变量类型 typeof($js_libpath) == "undefined" 下拉框 下拉框.options[索引] 下拉框.options.length 查找对象 document.getElementsByName("r1"); document.getElementById(id); 定时 timer=setInterval('scrollwindow()',delay); clearInterval(timer); UNCODE编码 escape() ,unescape 父对象 obj.parentElement(dhtml) obj.parentNode(dom) 交换表的行 TableID.moveRow(2,1) 替换CSS document.all.csss.href = "a.css"; 并排显示 display:inline 隐藏焦点 hidefocus=true 根据宽度换行 style="
http://elf8848.iteye.com/blog/626790 <!--语言无关 保存成 .HTML 看看--> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5"> <title>完美的Web打印</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <!--media=print 这个属性可以在打印时有效--> <style media=print> .Noprint{display:none;} .PageNext{page-break-after: always;} </style> <style> .tdp { border-bottom: 1 solid #000000; border-left: Ł solid #000000; border-right: ŀ solid #ffffff; border-top: 0 solid #ffffff; } .tabp { border-color: #000000 #000000 #000000 #000000; border-style: solid; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 1px; border-left-width: 1px; } .NOPRINT { font-family: "
****************************************** Oracle 补丁全集 (Oracle 9i 10g 11g Path) ****************************************** 俗话说,金无赤足,人无完人。 Oracle 的补丁也是层出不穷。下面将其罗列,或许你就用到了。 从 Oracle 官方网站下载需要使用 Metalink 帐号,下面的下载链接可以直接使用迅雷来下载,对于没 Metalink 帐号的用户可谓是一大福音。 ******************************************* Oracle Database Patch Number ( 补丁号 ) ******************************************* 9.2.0.4 = 3095277
9.2.0.5 = 3501955
9.2.0.6 = 3948480
9.2.0.7 = 4163445
9.2.0.8 = 4547809
10.1.0.3 = 3761843
10.1.0.4 = 4163362
10.1.0.5 = 4505133
10.2.0.2 = 4547817
10.2.0.3 = 5337014
10.2.0.4 = 6810189
10.2.0.5 = 8202632 11.1.0.7.0 = 6890831
11.2.0.2.0 = 10098816 ************************************** Oracle 11g 11.
今天小看了一下 Oracle 11.2.0.2 Patch, patch number: 10098816。 Patch最大的6G多。 杯具中. Oracle 软件是越来越大了。 还在下这些Patch文件,等下完了,把本机的11gR1的升级下玩玩。 Oracle 针对这个Patch 的更新,专门出了一个说明文档,具体参考:
Important Changes to Oracle Database Patch Sets Starting With 11.2.0.2 [ID 1189783.1]
http://blog.csdn.net/tianlesoftware/archive/2011/03/31/6292939.aspx
Oralce 11.2.0.2 Linux x86_64 (64位)下载地址:
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86-64/R80112020/p10098816_112020_Linux-x86-64_1of7.zip?params=UGdCWXRLNjJTTnFzci9vblhyV2Z2UTphcnU9MTMxNDkyMTkmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDY5NyZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTGludXgteDg2LTY0XzFvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9MTMwNzUzNjg3MSZjb250ZXh0PUFAMTArSEBhYXJ1MjAzLm9yYWNsZS5jb20rUEA%40&e=1301735654&h=d39436af10daf7f3cfa3f8141a4f3481
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86-64/R80112020/p10098816_112020_Linux-x86-64_2of7.zip?params=L1U2Y3grM3lpNkVyM240TmdQa3I1ZzphcnU9MTMxNDkyMTkmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDY5OCZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTGludXgteDg2LTY0XzJvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9MTA0OTkxMjU3OSZjb250ZXh0PUFAMTArSEBhYXJ1MjA1Lm9yYWNsZS5jb20rUEA%40&e=1301735743&h=09d37235bfbdafa499bdbf2dc3ec77bc
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86-64/R80112020/p10098816_112020_Linux-x86-64_3of7.zip?params=WGMwYXBrenAvZTRJUTBMUE5Kem1RZzphcnU9MTMxNDkyMTkmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDY5OSZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTGludXgteDg2LTY0XzNvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9ODU0MTg1MDY1JmNvbnRleHQ9QUAxMCtIQGFhcnUyMDIub3JhY2xlLmNvbStQQA%40%40&e=1301735778&h=43b2d803916b2180ee1c03bd6a01bffc
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86-64/R80112020/p10098816_112020_Linux-x86-64_4of7.zip?params=NDJiTzByRFF4bFFUU2ZraUY0dE5SZzphcnU9MTMxNDkyMTkmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDcwMyZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTGludXgteDg2LTY0XzRvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9NjQxNzY4NDk2JmNvbnRleHQ9QUAxMCtIQGFhcnUyMDMub3JhY2xlLmNvbStQQA%40%40&e=1301735800&h=a707f26d78db6a65e00ab27dc156233b
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86-64/R80112020/p10098816_112020_Linux-x86-64_5of7.zip?params=Z0pQY203Yzl1VVRyeGVFU05CTnI2dzphcnU9MTMxNDkyMTkmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDcwNyZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTGludXgteDg2LTY0XzVvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9NTkwMTE3OTQ5JmNvbnRleHQ9QUAxMCtIQGFhcnUyMDQub3JhY2xlLmNvbStQQA%40%40&e=1301735820&h=b8b3ddb9bfca4a94a7f3294175275d47
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86-64/R80112020/p10098816_112020_Linux-x86-64_6of7.zip?params=QWdkM25LQlY0K0xITHZndGt6TUN3UTphcnU9MTMxNDkyMTkmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDcwOCZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTGludXgteDg2LTY0XzZvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9NDc2NzQwNjUyJmNvbnRleHQ9QUAxMCtIQGFhcnUyMDIub3JhY2xlLmNvbStQQA%40%40&e=1301735838&h=7bfb80747d82abaf975ea58de5154d4a
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86-64/R80112020/p10098816_112020_Linux-x86-64_7of7.zip?params=V2FyaXlxcFF0RzFRYUhvWStQSXRIdzphcnU9MTMxNDkyMTkmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDcxMiZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTGludXgteDg2LTY0XzdvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9MTEwNDM2MjE0JmNvbnRleHQ9QUAxMCtIQGFhcnUyMDMub3JhY2xlLmNvbStQQA%40%40&e=1301735856&h=59599941cd976df8768df719b4efe7a4
一共7个链接,把这些链接直接贴到迅雷就可以下载了。
Oralce 11.2.0.2 Linux x86 下载地址: 4.8G
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86/R80112020/p10098816_112020_LINUX_1of7.zip?params=Nmh0VnAxR1FJdWJ1QUlQOVpya05BZzphcnU9MTMxNDkxNjYmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDQ5OSZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTElOVVhfMW9mNy56aXAmdXNlcmlkPW8tam9obi56aGFuZ0Bhdm5ldC5jb20mc2l6ZT0xMzIyOTUyNzY4JmNvbnRleHQ9QUAxMCtIQGFhcnUyMDMub3JhY2xlLmNvbStQQA%40%40&e=1301795256&h=3c134afb6f066eb0b5f7eb96b7c786e2
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86/R80112020/p10098816_112020_LINUX_2of7.zip?params=MXp5MUk2cW9EZGlWNUtVcDVTRXY2QTphcnU9MTMxNDkxNjYmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDU1NyZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTElOVVhfMm9mNy56aXAmdXNlcmlkPW8tam9obi56aGFuZ0Bhdm5ldC5jb20mc2l6ZT0xMDUwNTMyODI4JmNvbnRleHQ9QUAxMCtIQGFhcnUyMDIub3JhY2xlLmNvbStQQA%40%40&e=1301795329&h=4b234beda9d486070b31b0bdd62363f2
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86/R80112020/p10098816_112020_LINUX_3of7.zip?params=aWwzWUE3anJiRUwzQ0M3bGRwcGFuUTphcnU9MTMxNDkxNjYmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDU1OCZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTElOVVhfM29mNy56aXAmdXNlcmlkPW8tam9obi56aGFuZ0Bhdm5ldC5jb20mc2l6ZT04NjQ0Mjg5NjQmY29udGV4dD1BQDEwK0hAYWFydTIwMi5vcmFjbGUuY29tK1BA&e=1301795351&h=11d63ea3a74cf9298e3a29a96f4b302d
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86/R80112020/p10098816_112020_LINUX_4of7.zip?params=VE9yWmZocDdLdEF2N1BTMDlaUE5RdzphcnU9MTMxNDkxNjYmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDU1OSZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTElOVVhfNG9mNy56aXAmdXNlcmlkPW8tam9obi56aGFuZ0Bhdm5ldC5jb20mc2l6ZT02NjU3MjM5MjEmY29udGV4dD1BQDEwK0hAYWFydTIwNC5vcmFjbGUuY29tK1BA&e=1301795374&h=aa573ba5c6dde461b5a952d7321a1080
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86/R80112020/p10098816_112020_LINUX_5of7.zip?params=T1luYXZlT3AvT2NkZnpJQldXRGFJZzphcnU9MTMxNDkxNjYmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDU2MiZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTElOVVhfNW9mNy56aXAmdXNlcmlkPW8tam9obi56aGFuZ0Bhdm5ldC5jb20mc2l6ZT02MTUxOTgyMTImY29udGV4dD1BQDEwK0hAYWFydTIwNS5vcmFjbGUuY29tK1BA&e=1301795395&h=e4033579ed65cefd17b8e08ca040e710
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86/R80112020/p10098816_112020_LINUX_6of7.zip?params=VEhxL3RaTVFkNStmS2tjOUtLNDNzZzphcnU9MTMxNDkxNjYmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDU3MSZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTElOVVhfNm9mNy56aXAmdXNlcmlkPW8tam9obi56aGFuZ0Bhdm5ldC5jb20mc2l6ZT01MTIyNDM2ODUmY29udGV4dD1BQDEwK0hAYWFydTIwNS5vcmFjbGUuY29tK1BA&e=1301795414&h=f9973a9b19fdf701d7f72253910e4de4
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch22/PLATFORM/CORE/Linux-x86/R80112020/p10098816_112020_LINUX_7of7.zip?params=Qjlkc1BBNmtPeXo1VEZTNmNvdHN1UTphcnU9MTMxNDkxNjYmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNDg0MDU3MiZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTElOVVhfN29mNy56aXAmdXNlcmlkPW8tam9obi56aGFuZ0Bhdm5ldC5jb20mc2l6ZT0xMTY3NjIwMDcmY29udGV4dD1BQDEwK0hAYWFydTIwNC5vcmFjbGUuY29tK1BA&e=1301795428&h=2430be4dd2851d78c877b5df3ea131e1
windows x86_64 下载地址:4.4G
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch16/PLATFORM/MSWIN-x86-64/R80112020/p10098816_112020_MSWIN-x86-64_1of7.zip?params=c3dZN09XcDdIcFg1aG5FSXJEV24yZzphcnU9MTMyNDYwNjcmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNTc3OTkzNiZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTVNXSU4teDg2LTY0XzFvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9MTI4OTY2MTI4NyZjb250ZXh0PUFAMTArSEBhYXJ1MjA0Lm9yYWNsZS5jb20rUEA%40&e=1301795720&h=a6d4810574b4dceac80ad6a153789054
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch16/PLATFORM/MSWIN-x86-64/R80112020/p10098816_112020_MSWIN-x86-64_2of7.zip?params=a2lxV1RuUzNNZXRFdEQzL3JFQTVhdzphcnU9MTMyNDYwNjcmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNTc3OTk2NCZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTVNXSU4teDg2LTY0XzJvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9MTAwOTg4OTg0NCZjb250ZXh0PUFAMTArSEBhYXJ1MjA0Lm9yYWNsZS5jb20rUEA%40&e=1301795748&h=7301945b491dec27e8f0ce0d1c5b65f7
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch16/PLATFORM/MSWIN-x86-64/R80112020/p10098816_112020_MSWIN-x86-64_3of7.zip?params=NllDSHVlVHI3eHBNcmlkTjc3UlI0dzphcnU9MTMyNDYwNjcmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNTc3OTk2NSZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTVNXSU4teDg2LTY0XzNvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9NzA2NzcyNjgxJmNvbnRleHQ9QUAxMCtIQGFhcnUyMDIub3JhY2xlLmNvbStQQA%40%40&e=1301795763&h=9acd94260d22597da6472bd9396aff62
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch16/PLATFORM/MSWIN-x86-64/R80112020/p10098816_112020_MSWIN-x86-64_4of7.zip?params=Tm5Gcm42K2ZudlJjNjJ4VFVvNnNXdzphcnU9MTMyNDYwNjcmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNTc3OTk3MiZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTVNXSU4teDg2LTY0XzRvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9NjE3NzE5MTM2JmNvbnRleHQ9QUAxMCtIQGFhcnUyMDUub3JhY2xlLmNvbStQQA%40%40&e=1301795778&h=f8e156cc874976bcdc50522bd2127f29
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch16/PLATFORM/MSWIN-x86-64/R80112020/p10098816_112020_MSWIN-x86-64_5of7.zip?params=WGlVcnBFc3BLNGwyU21Rb3FpcWl3dzphcnU9MTMyNDYwNjcmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNTc3OTk3MyZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTVNXSU4teDg2LTY0XzVvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9NTQxNjE1NjE4JmNvbnRleHQ9QUAxMCtIQGFhcnUyMDUub3JhY2xlLmNvbStQQA%40%40&e=1301795791&h=d030d51d7dc8a5abcc28a1a51c9fc988
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch16/PLATFORM/MSWIN-x86-64/R80112020/p10098816_112020_MSWIN-x86-64_6of7.zip?params=STVTa01pSFZpd1BrVG5MYkhxR0RvdzphcnU9MTMyNDYwNjcmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNTc3OTk3NCZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTVNXSU4teDg2LTY0XzZvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9NDk3MjM1MjcyJmNvbnRleHQ9QUAxMCtIQGFhcnUyMDMub3JhY2xlLmNvbStQQA%40%40&e=1301795803&h=1a1eacd3ecc3be75814177f7edea7db5
http://aru-llnw-dl.oracle.com/aaruna03/vol/patch16/PLATFORM/MSWIN-x86-64/R80112020/p10098816_112020_MSWIN-x86-64_7of7.zip?params=WVlhU005MGVFakthTHg3aEd6ZUJCQTphcnU9MTMyNDYwNjcmZW1haWw9am9obi56aGFuZ0Bhdm5ldC5jb20mZmlsZV9pZD0zNTc3OTk3NSZwYXRjaF9maWxlPXAxMDA5ODgxNl8xMTIwMjBfTVNXSU4teDg2LTY0XzdvZjcuemlwJnVzZXJpZD1vLWpvaG4uemhhbmdAYXZuZXQuY29tJnNpemU9MTEyMTc0NTY2JmNvbnRleHQ9QUAxMCtIQGFhcnUyMDIub3JhY2xlLmNvbStQQA%40%40&e=1301795817&h=4448a703e7df280cf6e1237fb455eae8
--------------------------------------------------------------------------------------------------- Blog: http://blog.csdn.net/tianlesoftware 网上资源: http://tianlesoftware.download.csdn.net 相关视频:http://blog.
问题代码: import java.sql.Timestamp; import java.util.Date; public class T { public static void main(String[] args) { Object newObj = new Date(1999,9,10); Object dbObj = new Timestamp(1); [color=red] int compResult = ((Date)dbObj).compareTo((Date)newObj);[/color] } } jdk1.5.06代码: public int compareTo(java.util.Date o) { return compareTo((Timestamp)o); } 异常: Exception in thread "main" java.lang.ClassCastException: java.util.Date at java.sql.Timestamp.compareTo(Timestamp.java:474) at com.test.T.main(T.java:10) jdk1.5.16代码: public int compareTo(java.util.Date o) { if(o instanceof Timestamp) { // When Timestamp instance compare it with a Timestamp // Hence it is basically calling this.
关于C语言中有符号的整数值范围为什么是从-32768~32767 悬赏分:5 - 解决时间:2008-7-9 13:57 尽量讲得详细些!例如16个1111111111111111头位是符号位,这应是-32767,那-32768怎么 用16位二进制来表示? 问题补充:负数的二进制表示怎么算的? 例如: -1 的二进制 -32767 的二进制 答案: -2^15~(2^15-1) 计算机中数字是以补码存储的 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 在C中,用高位置1来表示负数,int型占两个字节共16位,32768的二进制是10000000,00000000,高位为1,系统会认为是 负数,所以32768需要用长型表示,占四个字节。最高位就不是1了。(00000000,00000000,10000000,00000000) -32768在内存中的表示是10000000,00000000。过程是:先读入正值32768(10000000,00000000),再取反(01111111,11111111),再加1(10000000,00000000) 转载于:https://www.cnblogs.com/super119/archive/2011/03/26/1996100.html
gauss-jordan消元法的基本思想是将系数矩阵化为单位阵,那样就省去了回代的过程,直接的到方程组的解,该方法也可用于求矩阵的逆矩阵。其代码如下:
#include<iostream.h>
#include<math.h>
#include<process.h>
class jordan
{
private:
int i,j,k,n,flag,scani,scanj,*row,*col;
double eps,pivot,aijcolk,*x,**a;
public:
void jordan_input();//数据输入的函数声明
void jordan_reduction();//消去法函数声明
void jordan_output();//结果输出的函数声明
~jordan()
{
delete [] row;
delete [] col;
delete [] x;
for(i=0;i<n;i++)
{
delete [] a[i];
}
delete []a;
}
};
void main()
{
jordan solution;
solution.jordan_input();
solution.jordan_reduction();
solution.jordan_output();
}
void jordan::jordan_input()
{
cout<<"输入方程的个数:";
cin>>n;
row = new int[n];
col = new int[n];
x = new double[n];
a = new double* [n];
for(i=0;i<n;i++)
{
a[i] = new double[n+1];
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cout<<"
1、阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小,特别:返回值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续接收。只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要循环读取)。
2、阻塞模式与非阻塞模式下write的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞write返回值没有区分,都是 <0:出错,=0:连接关闭,>0发送数据大小,特别:返回值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续发送。只是阻塞模式下write会阻塞着发送数据,非阻塞模式下如果暂时无法发送数据会返回,不会阻塞着write,因此需要循环发送)。
3、阻塞模式下read返回值 < 0 && errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN时,连接异常,需要关闭,read返回值 < 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)时表示没有数据,需要继续接收,如果返回值大于0表示接送到数据。 非阻塞模式下read返回值 < 0表示没有数据,= 0表示连接断开,> 0表示接收到数据。 这2种模式下的返回值是不是这么理解,有没有跟详细的理解或跟准确的说明?
4、阻塞模式与非阻塞模式下是否send返回值 < 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)表示暂时发送失败,需要重试,如果send返回值 <= 0, && errno !
http://www.ipadown.com/ http://topapp.net/ http://www.appolicious.com/ http://mobile.butterscotch.com/Mobile/IPhone/ http://wwdc.slidetoplay.com/ http://www.py.iphone-app-lists.com/ http://iphone.wareseeker.com/ http://freeappalert.com/ http://www.appannie.com/ http://www.downloadcheapapp.com/ http://topappcharts.com/ http://www.macworld.com/appguide/index.html http://www.pcworld.com/appguide/index.html?platform=1 http://www.148apps.com/ http://www.rawapps.com/ http://download.cnet.com/mobile/ http://iphone.appmobilize.com/ http://www.whatsoniphone.com http://www.appstorehq.com/ http://appcomments.com/app http://storedapps.com/store/ http://www.iapper.com/ http://www.filecluster.com/iPhone/ http://www.apptizr.com http://www.zdnet.com.au/downloads/mobile/ http://www.apptism.com/apps http://www.co.iphone-app-lists.com/ http://mplayit.com/ http://www.appannie.com/ http://appcomments.com/top http://www.iphoneapps360.net/ http://www.mobspot.com/ http://www.appo2.com/ http://iphone25.com/
Jpan website:
http://buzzapp.jp http://catchapp.net/item/detail/373281947 http://www.iappfun.net/ 持续更新中......
近两年来,云计算的概念炒得火热火热的。一般来说,一提到云计算很容易想到的典型应用就是分布式服务与计算,后端是一个超大的服务器集群提供服务,像Google的GFS,BigTable,Chubble以及MapReduce等等。其实在云计算中还有一个领域就是服务器虚拟化,将物理服务器的CPU、内存、存储和网络虚拟出若干个相互之间安全隔离的虚拟服务器以提高资源使用率,低碳节能环保。像Amazon的EC2(弹性计算云)服务可以让你很轻松地启动和管理虚拟服务器。之所以称之为弹性,是因为当你的应用访问量激增时EC2可以自动增加虚拟服务器来满足应用的需求,当你的应用的流量下降时又自动减少虚拟服务器。
在虚拟化技术中,存储服务的虚拟化则成为核心与难点,这涉及到虚拟机运行所需的所有的数据包括系统数据和用户数据,虚拟存储服务不仅在满足性能的同时,更要提供高安全的数据服务,比如数据的快照技术以防数据出现错误时能进行数据回滚以最大限度的降低用户的损失。同时Amazon弹性计算云改变了商业模式,你可以按小时付费或按容量付费,不用再去发大量的钱去购买机器或者服务托管。本文永久链接 :http://blog.csdn.net/hereweare2009/archive/2011/03/05/6226218.aspx
Amazon Elastic Block Store
Amazon EBS是专门为Amazon EC2 虚拟机设计的弹性块存储服务。Amazon EBS可以为Amazon EC2的虚拟机创建卷volumes,Amazon EBS卷类似没有格式化的外部卷设备。卷有设备名称,同时也提供了块设备接口。你可以在Amazon EBS 卷上驻留自己的文件系统,或者直接作为卷设备使用。EBS定价为每月每GB容量10美分,或者每向卷发出100万次请求10美分。据Amazon称,用户还可以将虚拟机的数据以快照的方式存储到Amazon的S3存储服务。
一般的,你可以创建多达20个Amazon EBS卷,卷的大小可从1G到1T。在相同Avaliablity Zone中,每个Amazon EBS卷可以被任何Amazon EC2虚拟机使用。如果你需要超过20个卷,则需要提出申请。
同时,Amazon EBS提供了快照功能。可以将快照snapshot保存了Amazon EBS卷到Amazon S3中,其中第一个快照是全量快照,随后的快照都是增量快照。你可以使用快照作为新的Amazon EBS卷的起始点,这样当虚拟机数据受到破坏时你可以选择回滚到某个快照来恢复你的数据,从而提高了数据的安全性与可用性。
下面介绍下Amazon EBS容错处理和使用快照加载新的卷
Amazon EBS可以将任何的实例(即运行中的虚拟机)关联到卷。当一个实例失效,Amazon EBS卷可以自动的解除与失效节点的关联,从而可以将该卷关联到新的实例。如下图所示。步骤如下:
1. 运行中的Amazon EC2实例被关联到Amazon EBS卷,而这个实例突然失效或者出现异常;
2. 为了恢复该实例,你解除Amazon EBS卷和实例的关系(如果没有自动解除),加载一个新的Amazon EC2实例,将其关联到Amazon EBS卷;
3. 在Amazon EBS卷失效的情况下(几率极低),你可以根据快照创建一个新的Amazon EBS卷。
下面介绍快照的使用:
我们可以使用Amazon EBS快照作为一个起点来加载若干个新卷。加载过程如下:
1. 你现在有个大数据量的Web Service服务正在运行;
2. 当数据都正常的时候,你可以为你的卷创建快照,并将这些快照存储在Amazon S3上;
3. 当服务数据剧增时,你需要根据快照加载新的卷,然后再启动新的实例,在将新的实例关联到新的卷;
4. 当服务下降时,你可以关闭一个或多个Amazon EC2实例,并删除相关的EBS卷。
虽然Amazon没有详细说明EBS的实现细节,从上面的快照功能以及EBS的官方文档可以略知一二:
l 快照需要上传到S3中,当需要恢复到某个快照则需要将快照从S3下载下来;
l EBS官方文档指出,EBS为了提高可靠性,EBS卷会有一个后台任务将其数据备份到同一个zone的另一台硬件上;
l EBS官方文档同时指出,即时EBS有了卷的备份,还不是足够的高可靠,为此引入了快照功能,将快照存储到S3上,且第一个快照是全备份,随后的快照是增量备份,同时不同zone间可以从S3上下载快照;
l EC2与EBS必须处于同一个zone,即EC2实例只能挂在处于同一个zone的EBS卷,且同一个EBS卷不能同时被挂载两次,即只能挂载给一个EC2实例。
我理解中的amazon的ebs架构图
Ubuntu 9.04有时出现启动tftp服务(tftpd-hpa)失败, 查看系统日志:
#tail /var/log/syslog
知道tftp启动失败的原因是: cannot bind to local socket: Address already in use.
修改tftp配置文件: #vi /etc/default/tftpd-hpa
指定地址和端口,端口号不要被占用即可, 例如:
-a 192.168.1.31:12345
重启tftp服务:
#/etc/init.d/tftpd-hpa start
或者不改变tftp bind的默认端口,先kill inetd进程:
#killall -9 inetd|grep inetd
再重启tftp服务:
#/etc/init.d/tftpd-hpa start
That's all.
twaver.Alarm 告警对象。代表告警状态。是一个轻量级的对象。可以创建很多然后放到DataBox中。所有的Alarm对象存放在由ElementBox提供的AlarmBox中。通过setPropertyValue可以带入新的信息。 twaver.network.ui.AlarmAttachment 典型的应用是在网元的旁边产生一个告警的标识。可指定位置,文字等样式。还可通过子类改变默认的告警标识的展示方式和行为。 twaver.AlarmBox 管理所有的Alarm对象。 twaver.AlarmElementMapping 管理告警和element的映射关系,通常是一对一,但也可以是一对多和多对一。 Alarm Mapping Demo中有相关应用。 twaver.AlarmSeverity 告警级别。包含名称,颜色等。预定义了一些告警级别。 twaver.AlarmSeverityChangeEvent 告警界别改变事件。 twaver.AlarmState 用于表示一个element所发生的所有的告警信息,如新的,已确认的,数量,总数等。和Alarm对象比起来,它更轻量级,更底层。不要和Alarm一起使用来管理告警。 twaver.AlarmStatePropagator 用于扩散告警。 twaver.AlarmStateStatistics 是elementBox的告警统计器 twaver.network.ui.Attachment 用于表示element元素的标签,告警标记,小图标等 twaver.network.layout.AutoLayouter 用于自动排列各element元素。有一些预定义的几何方式排列。 twaver.network.ui.BackgroundUI 用于处理画布上的背景。支持位图和矢量图。 twaver.network.ui.BasicAttachment 是element attachment的简单实现。 twaver.network.interaction.BasicInteractionHandler 处理交互效果的基类。如选中,鼠标移动等的互动处理。没有任何实现。 twaver.BundleLinks 处理画布上一套捆绑在一起的连接线。 twaver.Bus 一种特殊的shapeNode,表示总线,采用的是总线布局。可参考DEMO中的BUS demo。 twaver.network.layout.CloudLayouter 处理云布局。可参考demo中的success story demo twaver.Collection ICollection的默认实现 Consts 存放常量的类 twaver.network.interaction.CreateLinkInteractionHandler 处理创建连接线的互动效果。 twaver.network.interaction.CreateOrthogonalLinkInteractionHandler处理创建直角连接线的互动效果。 twaver.network.interaction.CreateShapeLinkInteractionHandler 处理创建带形状连接线的互动效果。 twaver.Data 抽象的network的data,由databox管理。 twaver.DataBox 作为不可见的model层管理Data对象。 twaver.DataBoxChangeEvent twaver.network.interaction.DefaultInteractionHandler 默认的互动处理类。处理选中或删除网元、双击打开和关闭group、打开子网、打开和关闭绑定的连接线等用户操作。 twaver.Defaults 静态类 ,定义了twaver的一些默认取值。 twaver.Dummy 继承了Element,在network上不可见,但存在于element box中,并可拥有父元素和子元素。在树和表等组件中可被展现出来,可使用它来组织元素的层级结构,使它们看起来更清晰更容易理解。 twaver.network.ui.EditAttachment 用于表示当前element是可编辑的附件。比如一个可缩放的元素的角上放一个小方块,表示该元素可缩放。 twaver.network.interaction.EditInteractionHandler 用于处理编辑网元的简单属性的互动 。 twaver.Element 定义了由element box管理的业务对象。 twaver.
/Files/jasenkin/CultureSilverlightSample.rar 转载于:https://www.cnblogs.com/jasenkin/archive/2011/02/23/1961904.html
最近经常对自己提一些问题,然后自己通过google、读代码、测试寻求答案来解决疑惑,可能这些问题也能给其他人带来一些帮助。
quora是个不错的问答型网站,兴趣去看一下自己感兴趣的话题吧~
1)HBase中的TTL参数什么意思? TTL == "Time To Live". You can specify how long a cell lives in hbase. Onces its "TTL" has expired, its removed. 2)影响read性能的配置参数有哪些? hbase-env.xml: export HBASE_HEAPSIZE=4000 hbase-default.xml: hfile.block.cache.size 3)HBase在写操作的时候会更新LruBlockCache吗? 从代码上看写的时候不会更新lruBlockCache! 4)如何将一个HBase CF指定为IN_MEMORY? 创建table的时候可以指定CF的属性,create 'taobao', {NAME => 'edp', IN_MEMORY => true} 5)HBase cache每次load的最小单位是block 6)如果每次load一个block到cache中,而以后不会再读取这个block,则这个block对block cache hit ratio没有贡献啊,但是为什么block cache hit ratio有60%+呢?(这个我当初的错误理解,漏 洞还是很多的) 注意block cache hit ratio的最小计量单位应该是record,cache的最小单位才是block, 因为block 下面有很多record,后面的record借助了读第一个record带来的cache福利,所以block cache hit ratio 才会有60%+ 7)如果只有一行一个cf,写入很大量的数据会不会发生region split?
<property>
<name>hbase.hregion.max.filesize</name>
<value>67108864</value>
<description>
Maximum HStoreFile size.
今天发现移动USB属性变成RAW,郁闷着,刚找到这个方法,试了下,有效。
LABEL命令说明
LABEL [drive:][label]
LABEL [/MP] [volume] [label]
drive: 指定驱动器号。
label 指定卷标。
/MP 指定卷应该被当作装入点或卷名。
volume 指定驱动器号(后面跟一个冒号)、装入点
或卷名。如果指定了卷名,/MP 标志则不必要。
在命令行输入:(我的移动分区是S)
C:/>label S: SAMSUNG
再查看S分区属性,已经恢复到NTFS了
转载于:https://www.cnblogs.com/forads/archive/2011/02/09/2161101.html
以下描述主要是针对windows平台下的TCP socket而言。
首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包(FIN,RST等),具体的交换过程可以看TCP协议,这里不详细描述了。而关闭socket是指关闭用户应用程序中的socket句柄,释放相关资源。但是当用户关闭socket句柄时会隐含的触发TCP连接的关闭过程。
TCP连接的关闭过程有两种,一种是优雅关闭(graceful close),一种是强制关闭(hard close或abortive close)。所谓优雅关闭是指,如果发送缓存中还有数据未发出则其发出去,并且收到所有数据的ACK之后,发送FIN包,开始关闭过程。而强制关闭是指如果缓存中还有数据,则这些数据都将被丢弃,然后发送RST包,直接重置TCP连接。
下面说一下shutdown及closesocket函数。
shutdown函数的原型是:
int shutdown(
SOCKET s,
int how
);
该函数用于关闭TCP连接,单并不关闭socket句柄。其第二个参数可以取三个值:SD_RECEIVE,SD_SEND,SD_BOTH。
SD_RECEIVE表明关闭接收通道,在该socket上不能再接收数据,如果当前接收缓存中仍有未取出数据或者以后再有数据到达,则TCP会向发送端发送RST包,将连接重置。
SD_SEND表明关闭发送通道,TCP会将发送缓存中的数据都发送完毕并收到所有数据的ACK后向对端发送FIN包,表明本端没有更多数据发送。这个是一个优雅关闭过程。
SD_BOTH则表示同时关闭接收通道和发送通道。
closesocket函数的原型是:
int closesocket(
SOCKET s
);
该函数用于关闭socket句柄,并释放相关资源。前面说过,关闭socket句柄时会隐含触发TCP连接的关闭过程,那么closesocket触发的是一个优雅关闭过程还是强制关闭过程呢?这个与一个socket选项有关:SO_LINGER 选项,该选项的设置值决定了closesocket的行为。该选项的参数值是linger结构,其定义是:
typedef struct linger {
u_short l_onoff;
u_short l_linger;
} linger;
当l_onoff值设置为0时,closesocket会立即返回,并关闭用户socket句柄。如果此时缓冲区中有未发送数据,则系统会在后台将这些数据发送完毕后关闭TCP连接,是一个优雅关闭过程,但是这里有一个副作用就是socket的底层资源会被保留直到TCP连接关闭,这个时间用户应用程序是无法控制的。
当l_onoff值设置为非0值,而l_linger也设置为0,那么closesocket也会立即返回并关闭用户socket句柄,但是如果此时缓冲区中有未发送数据,TCP会发送RST包重置连接,所有未发数据都将丢失,这是一个强制关闭过程。
当l_onoff值设置为非0值,而l_linger也设置为非0值时,同时如果socket是阻塞式的,此时如果缓冲区中有未发送数据,如果TCP在l_linger表明的时间内将所有数据发出,则发完后关闭TCP连接,这时是优雅关闭过程;如果如果TCP在l_linger表明的时间内没有将所有数据发出,则会丢弃所有未发数据然后TCP发送RST包重置连接,此时就是一个强制关闭过程了。
另外还有一个socket选项SO_DONTLINGER,它的参数值是一个bool类型的,如果设置为true,则等价于SO_LINGER中将l_onoff设置为0。
注意SO_LINGER和SO_DONTLINGER选项只影响closesocket的行为,而与shutdown函数无关,shutdown总是会立即返回的。
所以为了保证建议的最好的关闭方式是这样的:
发送完了所有数据后:
(1)调用shutdown(s, SD_SEND),如果本端同时也接收数据时则执行第二步,否则跳到第4步。
(2)继续接收数据,
(3)收到FD_CLOSE事件后,调用recv函数直到recv返回0或-1(保证收到所有数据),
(4)调用closesocket,关闭socket句柄。
在实际编程中,我们经常也不调用shutdown,而是直接调用closesocket,利用closesocket隐含触发TCP连接关闭过程的特性。此时的过程就是:
当发送完所有数据后:
(1)如果本端同时也接受数据则则执行第二步,否则跳到第4步。
(2)继续接收数据,
(3)收到FD_CLOSE事件后,调用recv函数直到recv返回0或-1(保证收到所有数据),
(4)调用closesocket,关闭socket句柄。
但是此时为了保证数据不丢失,则需要设置SO_DONTLINGER选项,不过windows平台下这个也是默认设置。
经过实验发现,发送端应用程序即便是异常退出或被kill掉进程,操作系统也不会丢弃发送缓冲区中的未发送数据,而是会在后台将这些数据发送出去。但是这是在socket的发送缓存不为0的前提下,当socket的发送缓存设置为0(通过SO_SNDBUF选项)时比较特殊,此时不论socket是否是阻塞的,send函数都会被阻塞直到传入的用户缓存中的数据都被发送出去并被确认,因为此时在驱动层没有分配缓存存放用户数据,而是直接使用的应用层的用户缓存,所以必须阻塞直到数据都发出,否则可能会造成系统崩溃。
另外,如果是接收端的应用程序异常退出或被kill掉进程,并且接收缓存中还有数据没有取出的话,那么接收端的TCP会向发送端发送RST包,重置连接,因为后续数据已经无法被提交应用层了。
最后这里说一个感觉是windows的bug,就是做这样的一个测试:
在一端线listen一个socket,然后在另一端connect,connect成功后,listen端会检测到网络事件触发,在listen端accept之前,将connect端kill掉,然后继续运行listen端,listen端任然会accept成功,且在accept出来的socket发送数据也能成功。发送完之后在等网络事件,此时又会等待成功,但是调用WSAEnumNetworkEvents得出的事件标识却是0。之后再也不会等到网络事件。
由于在windows下默认是gb编码,而我的vim默认是utf-8(gedit默认也是utf-8),所以打开会成乱码。修改了一下配置文件,使vi 支持gb编码就好了。
$vi ~/.vimrc
let &termencoding=&encoding
set fileencodings=utf-8,gbk
$:wq
再次打开vi ,显示就正常了。 vim中编辑不同编码的文件时需要注意的一些地方 此文讲解的是vim编辑多字节编码文档(中文)所要了解的一些基础知识,注意其没有涉及gvim,纯指字符终端下的vim。 vim编码方面的基础知识: 1,存在3个变量: encoding—-该选项使用于缓冲的文本(你正在编辑的文件),寄存器,Vim 脚本文件等等。你可以把 ‘encoding’ 选项当作是对 Vim 内部运行机制的设定。 fileencoding—-该选项是vim写入文件时采用的编码类型。 termencoding—-该选项代表输出到客户终端(Term)采用的编码类型。 2,此3个变量的默认值: encoding—-与系统当前locale相同,所以编辑文件的时候要考虑当前locale,否则要设置的东西就比较多了。 fileencoding—-vim打开文件时自动辨认其编码,fileencoding就为辨认的值。为空则保存文件时采用encoding的编码,如果没有修改encoding,那值就是系统当前locale了。 termencoding—-默认空值,也就是输出到终端不进行编码转换。 由此可见,编辑不同编码文件需要注意的地方不仅仅是这3个变量,还有系统当前locale和、文件本身编码以及自动编码识别、客户运行vim的终端所使用的编码类型3个关键点,这3个关键点影响着3个变量的设定。 如果有人问:为什么我用vim打开中文文档的时候出现乱码? 答案是不确定的,原因上面已经讲了,不搞清楚这3个关键点和这3个变量的设定值,出现乱码是正常的,倒是不出现乱码那反倒是凑巧的。 再来看一下常见情况下这三个关键点的值以及在这种情况下这3个变量的值: 1,locale—-目前大部分Linux系统已经将utf-8作为默认locale了,不过也有可能不是,例如有些系统使用中文locale zh_CN.GB18030。在locale为utf-8的情况下,启动vim后encoding将会设置为utf-8,这是兼容性最好的方式,因为内部 处理使用utf-8的话,无论外部存储编码为何都可以进行无缺损转换。locale决定了vim内部处理数据的编码,也就是encoding。 2,文件的编码以及自动编码识别—-这方面牵扯到各种编码的规则,就不一一细讲了。但需要明白的是,文件编码类型并不是保存在文件内的,也就是说没 有任何 描述性的字段来记录文档是何种编码类型的。因此我们在编辑文档的时候,要么必须知道这文档保存时是以什么编码保存的,要么通过另外的一些手段来断定编码类 型,这另外的手段,就是通过某些编码的码表特征来断定,例如每个字符占用的字节数,每个字符的ascii值是否都大于某个字段来断定这个文件属于何种编 码。这种方式vim也使用了,这就是vim的自动编码识别机制了。但这种机制由于编码各式各样,不可能每种编码都有显著的特征来辨别,所以是不可能 100%准确的。对于我们GB2312编码,由于其中文是使用了2个acsii值高于127的字符组成汉字字符的,因此不可能把gb2312编码的文件与 latin1编码区分开来,因此自动识别编码的机制对于gb2312是不成功的,它只会将文件辨识为latin1编码。此问题同样出现在gbk,big5 上等。因此我们在编辑此类文档时,需要手工设定encoding和fileencoding。如果文档编码为utf-8时,一般vim都能自动识别正确的 编码。 3,客户运行vim的终端所使用的编码类型—-同第二条一样,这也是一个比较难以断定的关键点。第二个关键点决定着从文件读取内容和写入内容到文件 时使用的编码,而此关键点则决定vim输出内容到终端时使用的编码,如果此编码类型和终端认为它收到的数据的编码类型不同,则又会产生乱码问题。在 linux本地X环境下,一般终端都认为其接收的数据的编码类型和系统locale类型相符,因此不需关心此方面是否存在问题。但如果牵涉到远程终端,例 如ssh登录服务器,则问题就有可能出现了。例如从1台locale为GB2310的系统(称作客户机)ssh到locale为utf-8的系统(称作服 务器)并开启vim编辑文档,在不加任何改动的情况下,服务器返回的数据为utf-8的,但客户机认为服务器返回的数据是gb2312的,按照 gb2312来解释数据,则肯定就是乱码了,这时就需要设置termencoding为gb2312来解决这个问题。此问题更多出现在我们的 windows desktop机远程ssh登录服务器的情况下,这里牵扯到不同系统的编码转换问题。所以又与windows本身以及ssh客户端有很大相关性。在 windows下存在两种编码类型的软件,一种是本身就为unicode编码方式编写的软件,一种是ansi软件,也就是程序处理数据直接采用字节流,不 关心编码。前一种程序可以在任何语言的windows上正确显示多国语言,而后一种则编写在何种语言的系统上则只能在何种语言的系统上显示正确的文字。对 于这两种类型的程序,我们需要区别对待。以ssh客户端为例,我们使用的putty是unicode软件,而secure CRT则是ansi 软件。对于前者,我们要正确处理中文,只要保证vim输出到终端的编码为utf-8即可,就是termencoding=utf-8。但对于后者,一方面 我们要确认我们的windows系统默认代码页为cp936(中文windows默认值),另一方面要确认vim设置的termencoding= cp936。 最后来看看处理中文文档最典型的几种情况和设置方式: 1,系统locale是utf-8(很多linux系统默认的locale形式),编辑的文档是GB2312或GBK形式的(Windows记事本 默认保存形式,大部分编辑器也默认保存为这个形式,所以最常见),终端类型utf-8(也就是假定客户端是putty类的unicode软件) 则vim打开文档后,encoding=utf-8(locale决定的),fileencoding=latin1(自动编码判断机制不准导致的),termencoding=空(默认无需转换term编码),显示文件为乱码。 解决方案1:首先要修正fileencoding为cp936或者euc-cn(二者一样的,只不过叫法不同),注意修正的方法不是:set fileencoding=cp936,这只是将文件保存为cp936,正确的方法是重新以cp936的编码方式加载文件为:edit ++enc=cp936,可以简写为:e ++enc=cp936。 解决方案2:临时改变vim运行的locale环境,方法是以LANG=zh_CN vim abc.txt的方式来启动vim,则此时encoding=euc-cn(locale决定的),fileencoding=空(此locale下文件 编码自动判别功能不启用,所以fileencoding为文件本身编码方式不变,也就是euc-cn),termencoding=空(默认值,为空则等 于encoding)此时还是乱码的,因为我们的ssh终端认为接受的数据为utf-8,但vim发送数据为euc-cn,所以还是不对。此时再用命令: set termencoding=utf-8将终端数据输出为utf-8,则显示正常。 2,情况与1基本相同,只是使用的ssh软件为secure CRT类ansi类软件。 vim打开文档后,encoding=utf-8(locale决定的),fileencoding=latin1(自动编码判断机制不准导致的),termencoding=空(默认无需转换term编码),显示文件为乱码。 解决方案1:首先要保证运行secure CRT的windows机器的默认代码页为CP936,这一点中文windows已经是默认设置了。其他的与上面方案1相同,只是要增加一步,:set termencoding=cp936 解决方案2:与上面方案2类似,不过最后一步修改termencoding省略即可,在此情况下需要的修改最少,只要以locale为zh_CN开 启vim,则encoding=euc-cn,fileencoding和termencoding都为空即为encoding的值,是最理想的一种情 况。 可见理解这3个关键点和3个参数的意义,对于编码问题有很大助力,以后就可以随心所欲的处理文档了,同时不仅仅是应用于vim,在其他需要编码转换的环境里,都可以应用类似的思路来处理问题解决问题。 最后推荐一款功能强大的windows下的ssh客户端—-xshell,它具有类似secure CRT一样的多tab 的ssh窗口的能力,但最为方便的是这款工具还有改变Term编码的功能,这样我们就可以不用频繁调整termencoding,只需在ssh软件里切换 编码即可,这是我用过的最为方便的ssh工具。它是商业软件,但非注册用户使用没有任何限制,只是30天试用期超出后会每次启动都提示注册,对于功能没有 丝毫影响。
界面设计的行业标准总结-- WEBUI设计的相关行业标准 WEBUI的特点: 1. 感官体验:呈现给用户视听上的体验,强调舒适性 2. 交互体验:呈现给用户操作上的体验,强调易用、可用性 3. 浏览体验:呈现给用户浏览上的体验,强调吸引性 4. 情感体验:呈现给用户心理上的体验,强调友好性 5. 信任体验:呈现给用户的信任体验,强调可靠性//我的批注:这点感觉和界面的关系不大,可靠性不住要是靠界面的设计来保证的,也就是后主要是“后台”质量来保证的。当然“信任体验”的确很重要,不能让用户老担心,这次还会不会出错,特别是有较多信息输入交互时,用户又多次遇到不可靠性的问题之后是很担心的! 2.1 WEBUI整体标准的制定 WEBUI的整体标准也从以下四个方面入手: 1. 规范性 2. 合理性 3. 一致性 4. 界面定制性 一、WEBUI的设计规范 WEBUI也要遵循一致性的准则,其目的与GUI一致: 1. 便于用户操作 2. 使用户感觉到统一、规范,在使用软件的过程中愉快轻松的完成操作,提高对软件的认知 //我的批注:我觉得“统一性”是最关键的和必须的。包括的大到界面的风格,小到按钮的位置和 大小,包括按钮在页面中位置和按钮之间的相关位置,比如在确认消息页面里“确定”和“取消”按钮,谁前谁后必须一致。 3. 降低培训、支持成本,不必花费较多的人力对客户进行逐个指导//我的批注:这个也很重要,但需要从多个方面去努力,包括功能和界面,如果功能本身很复杂,易用那也很难! 二、WEBUI布局的合理性 WEBUI界面的合理性直接影响到软件系统的可用性,下面将从几个方面讲述WEBUI的布局特点: 1.设计风格:符合目标客户的审美习惯,并具有一定的引导性//我的批注:引导性如何保证?我觉得也是操作要连贯,一个业务目的尽可能在一个界面里连贯的完成,另外就是“提示”或者“帮助”要合理,要能清楚的给予引导,特别是有分支时! 2. 页面布局:重点突出,主次分明,图文并茂 //我的批注:风格一致很关键,在业务系统中,图文并茂估计是做不到,简单是美,未必一定要很多图片来烘托! 3. LOGO:确保logo的保护空间,确保品牌的清晰展示而又不占据过分空间//我的批注:需要把握一个合理的度,如果是一个业务系统,logo倒不是问题! 4.页面导航:导航条清晰明了、突出,层级分明//我的批注:菜单的组合很重要,但很多的时候我们是按功能组合的,要保证用户能快速的进入他需要的任何一个功能,也要做到,在任何的一个页面,用户可以容易知道“我在哪”!功能复杂的话,可以使用功能地图或者站点地图的方式,用户能快速的检索到需要的入口!菜单组合的风格要一致,也不要什么都把功能树里放,“多了就复杂”。 5.图标使用:简洁、明了、易懂、准确,与页面整体风格统一 //我的批注:风格一致很关键,另外所有的按钮的图标含义要对,要清楚,最好是有意思,能“按图索骥”,不同功能的按钮,图标也不能一样,比如不能“确认”按钮和“取消按钮”都是同样的图标! 6.图片展示:比例协调、不变形,图片清晰。图片排列既不过于密集,也不会过于疏远 //我的批注:不能过多,不能喧宾夺主! 7.动画效果:与主画面相协调,打开速度快,动画效果节奏适中,不干扰主画面浏览//我的批注:先进去很重要,节奏要合适,不能太慢,慢了用户会失去耐心,尤其是现在的时代,大家都有几分浮躁,普遍缺少耐心,快了用户可以多看几遍问题不到,慢了不行! 8.页面色彩:遵循GUI界面颜色标准,主色调+辅助色不超过三种颜色 //我的批注:不能超过三个色系,一般是不是外面应该比里面要深?色彩也是风格中的重要元素,也必须一致、统一! 9.页面底色:所选颜色不能干扰主体页面的阅读//我的批注:要绿叶还是要红花,谁重要的问题! 三、WEBUI风格的一致性 WEBUI的一致性与GUI大同小义,也指相同的信息表现方法,如在字体、标签风格、颜色、术语、显示错误信息等方面确保一致,但不同的是WEBUI对浏览器有一定的要求。 //我的批注:字体、标签风格、颜色、术语、显示错误信息等方面确保一致,也要包括弹出窗体的相对位置! 1. 在不同分辨率下的美观程度 WERUI要求所有页面要在800*600,1024*768两种分辨率下运行通过//我的批注:现在的要求可能不止这么简单了吧,还有其它更高的分辨率,800*600基本上很少用户了,我觉得更加重要的是宽屏和窄屏的问题,开发人员的屏宽都不一致,更合乎我们的用户! 2.在不同版本浏览器上的运行 例如要求在IE5.0,5.5以及6.0下运行通过而不发生错误//我的批注:有点落后了吧?IE至少都9了,更何况还有其它的浏览器,但对几种主流的浏览器和版本支持要做好! 3.在不同厂商的浏览器上运行 //我的批注:嗯,主要就那么几家,IE必须是保证没有问题的! 例如软件系统可以在IE、Firfox、Google等浏览器上正常运行 4.WEBUI的菜单、地址栏、图标、状态栏等风格、位置要一致//我的批注:web下不是很重要吧,都在浏览器里! 5.遵循GUI风格一致性的2-9所规定的一致性 四、WEBUI的可定制性 WEBUI的可定制性大致可分为以下几个特性: 1.界面元素可定制 允许用户定义工具栏、状态栏、地址栏等是否显示,工具栏显示在界面上的位置;允许用户定义菜单的位置等。 //我的批注:我觉得不重要! 2.
什么是PostScript?PostScript是专门为打印图形和文字而设计的一个编程语言,它与打印的介质无关,不管您是在纸上、胶片上打印,还是在屏幕显示都适合。它是一种页面描述语言,与HTML语言类似。
PostScript是由Adobe公司在1985年提出来的,首先应用在了苹果的LaserWriter打印机上。PostScript的主要目标是提供一种独立于设备的能够方便地描述图像的语言。独立于设备意味着,不需要借助任何具体设备的特性(例如,打印机的分辨率)来描述一个图像,因而这个描述不需要经过任何修改即可用在其他的Po stScript打印机上进行打印。
PostScript作为一种语言,自己有一整套语法和格式方面的规定,如果您对这方面感兴趣的话,请浏览A dobe公司的网站:http://www.adobe.com/,Adobe公司有很全面的资料。
PostScript文件是以文本方式存储的,与HTML文件类似。这个您只要用写字板打开一个PostSc ript文件就可以看到,如图1所示。PostScript文件本身只是用PostScript语言描述了所要显示或者打印的图像有哪些特征、参数,在显示或者打印PostScript文件的时候,再由PostScript解释器解释执行,进行具体的打印或者显示,得到所要的图象。图2是图1中的PostScript文件在PostScript文件阅读器中的显示。可以看到PostScript文件经过解释显示,得到了彩色的页面。
与其他格式的文件相比,PostScript文件具有很多优点,上面所提到的独立于设备就是其中很重要的一点。PostScript文件还具有独立于操作系统平台的优点。因为很多Unix的图形环境本身就把对PostScri pt的支持作为核心的一部分,所以无论您使用的是Windows操作系统,还是Unix操作系统,都可以阅读和打印P ostScript文件,这样交流起来就比较方便。由于PostScript文件是以文本方式存储,因而文件比较小,适合在Internet上传输。还有就是在PostScript设备(打印机、显示器)上打印和显示有着得天独厚的优势,可以达到最好的效果。
生成PostScript文件有几种途径:(1)您可以参照PostScript的语言格式,自己按照需要直接用文本编辑器写一个PostScript文件,当然如果文件比较复杂的话,工作量就不小了,而且还得熟悉PostS cript的语法;(2)您可以使用专门的PostScript文件编辑软件或者某些文字、图像编辑软件提供的功能来生成PostScript文件;(3)还有一种最简单的方法,就是在您的操作系统中添加一个PostScript打印机(虚拟的),然后在文字编辑器或者图形编辑器中,您所需要的图像通过那个PostScript打印机打印到另一个文件里,得到的文件就是您想要的PostScript文件啦!
PostScript文件阅读器有很多,GSview和RoPS是目前最常见的两个PostScript阅读器。PostScript格式的文件和PDF格式的文件还可以互相转换。例如,PostScript文件可以通过Ac robat Distiller或者GSview转换成PDF格式文件,用Acrobat Reader等PDF文件阅读器来阅读。PDF文件也可以通过GSview转换成PostScript文件,用GSview等PostScri pt文件阅读器来阅读。
下面详细介绍GSview和RoPS这两个软件的安装和使用。(为了简化起见,我把PostScript文件缩写为PS文件。)
GSview
GSview是Ghostscript在MS Windows或者OS/2下面的一个图形化界面。Ghost script是一个PostScript解释器,它是GSview的基础。GSView是一个免费软件,目前的最新版本是2.7,提供了三个平台版本:Win32版本,适合Windows9x/NT,Win16版本适合DOS/Win dows3x,OS/2版本适合OS/2。GSview2.7需要Ghostscript4.03-5.99为基础。下面我的介绍以GSview2.7的Win32版本为例子,其他版本的安装和使用类似。
使用GSview2.7,您可以很方便地阅读PS文件,打印PS文件,并且可以对PS文件进行编辑,还可以从 PS文件中拷贝、提取需要的文字或者图形。GSview除了可以用来阅读PS文件以外,还可以用来阅读PDF格式的文件。GSview的主页是:http://www.cs.wisc.edu/~ghost/,您可以从这个网址得到这个软件以及更多的信息。
一、安装篇
GSview2.7的安装比较简单。安装软件是一个自解压缩安装程序,只要运行它即可开始安装。安装程序将安装GSview2.7及Aladdin Ghostscript5.5,大概需要10MB的硬盘空间。运行了安装程序以后,出现安装向导,只要连连点击Next按钮即可。具体过程如下:首先让您选择GSview的语言设置,有英语、德语和法语三种,选择您喜欢的语言即可;接着会出现安装要求和版权信息提示,点击Next按钮继续;接着提示您选择要安装的部件,还有Ghostscript的版本号,一般选用默认的设置就行了;然后会提示您软件要被安装的目录名字和路径,一般选用默认的就可以了,您也可以填入自己所希望的路径,点击Next到下一步;此时,会让您选择是否生成程序组,以及程序组的名字,完成后点击Finish按钮开始拷贝文件。文件拷贝结束后,点击Exit按钮即可结束安装。
二、使用篇
点击开始菜单的GS Tools程序组里的GSview即可运行GSview。第一次运行GSview的时候,GSview还会再一次生成程序组,进行一些设置,您只需连连点击Next按钮即可。运行时的GSview如图3所示。GSview的界面比较特别,与别的Windows程序的界面不太一样,看起来比较怪异。窗口最上面是菜单,紧接着菜单的下面是状态栏。窗口左边是工具栏,从上往下一溜儿按钮。
现在让我们看看具体用法。
1.三类PS文件
根据PS文件所携带信息的情况,GSview把PS文件分成了三类:带DSC、EPS、不带DSC。这三类P S文件在使用GSview来阅读时,所能够进行的操作有所不同。在使用GSview之前,有必要先弄清楚这三类PS文件的区别。
DSC是Document Structure Conventions的缩写,是Adobe定义的提供关于一个PS文件的页面结构和所需资源等额外信息的一套注释约定。GSview对带有DSC信息的PS文件,支持任意的页面切换,而不带DSC的PS文件只能按原定的顺序阅读。GSview也可以忽略PS文件所带的DSC信息,把PS文件看作不带DSC处理。
EPS类的PS文件一般以eps为后缀,是一个封装的PS文件,是包含一组DSC信息及PostScript 命令的一个单页文档,通常被包含到别的PS文件当中。
2.阅读PS文件
点击工具栏最上面的按钮Open,或者选择File菜单里的Open命令,选择要打开的PS文件,GSvie w将打开这个PS文件,并且显示这个文件的第一页。这时,如果PS文件中带DSC信息,则可以通过选择工具栏上的Ne xt Page(下一页)、Previous Page(上一页)、Goto Page(到哪页)按钮或者View菜单里的Next Page、Previous Page、Goto Page命令来方便地选择要阅读、编辑或者打印的页面;否则,如果PS文件中没有DSC信息,则Previous Page、Goto Page都不能使用,只能使用 Next Page来选择页面,而且这时如果不是当前文件的最后一页的话,不能使用File菜单里的Select F ile命令来选择另一个文件(选择文件而不显示,通常只是为了打印而不阅读)。这时,状态栏上显示当前打开的PS文件的名字、页数及当前的页码,当鼠标处于工具栏的按钮上方时,显示该按钮的提示,当鼠标在所显示的PS文档里的时候,显示鼠标所在的坐标(以设定的单位来显示,相对与文档本页左上角的位置)。
在阅读PS文件的过程中,View菜单中的命令是最常用的。上面已经说了三个命令,其他的命令及其用法如下: Go Back和Go Forward命令与Previous Page和Next Page命令的作用一样。Red isplay命令重新显示当前页,有时候可能当前页已经修改,但是显示还没有刷新,这就有必要重新显示了,只能用于带 DSC信息的PS文件。Next Page and Home命令将把当前位置移到下一页的头部;相应的,Previ ous Page and Home命令将移到上一页的头部。Full Screen命令以全屏方式显示当前页(没有状态栏、滚动条等),要回到普通方式按Esc键即可。工具栏上还有两个按钮,分别是Skip Forwards5 P ages(向后前进5页)和Skip Backwards5 Pages(向前前进5页),可以用来快速翻页。这里还要提醒的是,对菜单上的每个命令基本都有相应的热键,在阅读PS文件的时候,建议多按热键。按热键当然比选择菜单快多了,方便多了。
1。IE专用(通过frames索引形象定位): document.frames[i].document.getElementById('元素的ID');
2。IE专用(通过IFRAME名称形象定位): document.frames['iframe的name'].document.getElementById('元素的ID');
以上方法,不仅对IFRAME适用,对FRAMESET里的FRAME也同样适用。IE虽然擅于自定标准,但不得不说它很多的设计还是比较体现人性化的。比如这个,它在同样支持下面的标准路径之外,提供了一个简洁且形象化的写法。
3。通用方法: document.getElementById('iframe的ID').contentWindow.document.getElementById('元素的ID')
注意要加上contentWindow,往往出现问题都是因为这个容易被忽略,它代表FRAME和IFRAME内部的窗口对象。
但是,很明显,这种写法非常要命,太长了。如果要操作一系列里面的元素,这样写起来,实在够受的,就算用复制粘贴大法,眼睛看起来也是个问题。
4。通用方法的简写:
对document.getElementById定义一个短名称,稍微熟悉JS的朋友都知道这个方法。在这里它可以发挥双倍的作用,如下例:
var $id=document.getElementById;
$Id('iframe的ID').contentWindow.$Id('元素的ID') //这样就得到了要取的对象
在这一点上,我还是喜欢IE的做法,比较呵护。因为微软不是一个单独的浏览器开发商,它本身也要大量地编写开发HTML/ASP等文档,所以比较能够做到这一点。而其它的浏览器开发商,基本只是站在一个浏览器的立场,把最基本的链路走通就完事了,很少站在开发者立场去设计出一些类似这样既简便又不失语义化的捷径来。很多人动辄说它们“标准”,在有些地方固然有理,但在有些地方,这种标准也不过是一种冷漠。
转载请注明来自赵亮(theforever on csdn)的博客。
最近做了一个项目,其中有一个需求是要将用户上传的视频转换成flv格式,使其能在网上进行观看。发现现在比较主流的视频转换工具是使用mencoder或者ffmpeg。于是开始研究ffmepg和mencoder了。发现貌似mencoder和ffmepg差不多吧。只是参数稍微不同,而且ffmepg的转换速度比mencoder快一点,但是mencoder比ffmepg支持的格式多一点(wmv9,rm,rmvb等)
下面是mencoder的参数:
-oac mp3lame:oac=output audio codec,输出音频编码器,这里用的mp3lame; -lameopts abr:br=56:lame options,是专门针对mp3lame的参数设置,abr:br=56,是设置音
频比特率为56(比特率:每秒钟输出的音频大小,单位kb/s); -ovc lavc:ovc=output video codec,输出视频编码器,lavc表示one of libavcodec’s video codec,输出格式为libavformat之一,编码器当然也是libavcodec之一啦,至于
libavodec里都有哪些编码器,可以查看Mplayer的官方文档; -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:v4mv:trell:cbp:last_pred=3:dia=4:cmp=6:vb_strategy
=1:对lavc进行一些设置,详细介绍如下:
vcodec=flv:指定视频编码器为flv;
vbitrate=500:指定视频比特率为500,这个参数很重要,vbitrate大了可以让视频品质增加,
但会让文件变的很大(可以参考flash8自带的转换工具的参数:低品质为150kb/s,中等品质为
400kb/s,高品质为700kb/s)。
mbd:宏模块选择算法,值为0~2默认为0,值越大转换越缓慢,但在品质和文件大小方面有好处
;
mv0:编译每个宏模块并选择最好的一个,当mbd=0时无效;
v4mv:会稍微增加品质,mbd>0时效果更明显;
trell:量子化网格搜索,对每8×8block找到最优化编码;
cbp:只能和trell一期使用,评估失真的图像块编码;
last_pred=3:与上一帧相比的移动数量预测,值为0~99,1~3比较合适,大于3时对品质的提
高已经无关紧要,但却会降低速度;
dia=4:移动搜索范围,值为-99~6,对于快速转换,-1是个不错的值,如果不是很重视速度,
可以考虑2~4;
cmp=6:值为1~2000,默认为0,设置用于全象素移动预算的比较函数
vb_strategy=1:对动作很大的场景会有帮助,对有些视频,设置vmax_b_frames会有损品质,加
上vb_strategy=1会好点。 以上是对-lavcopts的详细解释,接下来继续说明mencoder的参数: -vf scale=512:-3:-vf表示视频格式,scale是缩放,512:-3表示强制将宽度设置为512,高度
写为-3表示保持高宽比,也可以设置为-1或-2,具体表示什么,有兴趣的可以尝试一下。如果要
强制转化为统一大小,可以直接写-vf scale=640:480,但笔者个人建议用-3来保持高宽比。-vf
里还有expand和crop参数,例如:-vf scale=512:384,expand=512:384:::1,crop=512:384:0:0
,expand表示膨胀,crop表示裁剪; -ofps 12:输出视频的帧频,一般,用于flash播放的视频帧频高了没有没有意义,反而会增加
视频文件大小,但如果ofps设置的不合适,比如源视频帧频不是ofps的整数倍,可能会导致转换
后的视频、音频不同步,似乎可以将这一参数改为-noskip来解决这一问题; -srate 22050:音频采样率一般为22050或44100。
首先,写了一个简单的批处理文件,看下转换效果
f://ffmpeg.exe -i e://test//111.mpg -ab 128 -acodec libmp3lame -ac 1 -ar 22050 -r 29.97 -b 512 -y e://test//zz.
关于KDJ指标的MQL4的实现 在看我这篇文章之前,先看看关于KDJ的相关资料和背景。下面的链接可以参考。 http://www.shenmeshi.com/Business/Business_20070523005553.html 简单的说,KDJ 有四个要计算的东西。RSV ,K, D, J RSV: 中文翻译过来就是 未成熟值,这个值实际上也不神秘。 它其实就是著名的威廉指数。计算公式如下: 设:周期为 Period RSV[i] = (close[i] - low[i, Period]) / (high[i, Period] - low[i, Period]) 这个计算也是这个指标的核心部分,K D J 这三个参数都依赖与 RSV. 我举个例子,关于如果计算 RSV 假设,下面是一个日线 9 8 7 6 5 4 3 2 1 0 (i) 表示离今天的天数 3 1 2 1 2 3 4 1 2 4 (price) 表示价格 最右边的就是今天的价格,为 4元 我设置 周期为 Period = 3 low[0, 3] = min(price[0], price[1], price[2]) 往前数3天,包括今天,然后求价格的最小值 low[0, 3] = min(4, 2 , 1) = 1 同样: high[0, 3] = max (4, 2, 1) = 4 close[i] 就是当天收盘价格 close[0] = 4 带入上面的公式就可以求出 RSV RSV[i] = (4 - 1)/ (4 - 1) * 100 = 100 这个RSV 是和超买超买相关的一个值。 有了这RSV,其他的就很容易计算 K[i] = (2/3) * K[i + 1] + (1/3) * RSV[i] 注意,如果i 表示今天,那么 i+ 1 就表示昨天 D[i] = (2/3) * D[i + 1] + (1/3) * K[i] J[i] = 3D[i] - 2K[i] 你会发现这样一个事实,那就是如果 RSV[i] 大了 20, 那么只有 1/3 被传递到 K[i] 只有 1/9 被传递到 D[i], 所以,后面的K , D 的变化节奏会比 RSV 慢一些。 // +------------------------------------------------------------------+
设计宗旨:
专注于优雅地编写SQL和易读性保持细小和灵活 一些代码示例:
Java代码 public void testAtStyleExpression(){ LikeSql sql=DML.select("id,name" ) .from("user" ) .where(AtExp.at("(name =@name or id=@id) and gender=@gender" ) .set("id" , 1 ) .set("name" , "John" ) .set("gender" , "M" )); String eSql="SELECT id,name FROM user WHERE (name ='John' or id=1) and gender='M'" ; String eTpl="SELECT id,name FROM user WHERE (name =? or id=?) and gender=?" ; assertEquals(eSql,sql.toString()); assertEquals(eTpl,sql.toTemplate()); } public void testAtStyleExpression(){ LikeSql sql=DML.select("id,name") .from("user") .where(AtExp.at("(name =@name or id=@id) and gender=@gender"
nutch搏斗之一 问题描述: 在用nutch1.0做generate 包括5亿url的crawldb时,它默认按照64M分块,分成777个map task,在运行的后期出现 Could not find taskTracker/jobcache/job_200903231519_0017/attempt_200903231519_0017_r_000051_0/output/file.out in any of the configured local directories 异常。 解决办法: 减小task数目,改成按照crawldb里面文件个数划分的策略: Java代码 public static class InputFormat extends SequenceFileInputFormat<WritableComparable, Writable> { /** Don't split inputs, to keep things polite. */ public InputSplit[] getSplits(JobConf job, int nSplits) throws IOException { FileStatus[] files = listStatus(job); FileSystem fs = FileSystem.get(job); InputSplit[] splits = new InputSplit[files.length]; for (int i = 0; i < files.length; i++) { FileStatus cur = files[i]; splits[i] = new FileSplit(cur.
当我们为nutch的架构发愁的时候,nutch的开发人员送来了nutchbase。我一些简单的测试表明,在hadoop0.20.1和hbase0.20.2上,稍加修改可以运行起来。 它的优点很明显:架构合理. 开发者是这样说的,引用自jira http://issues.apache.org/jira/browse/NUTCH-650 A) Why integrate with hbase? All your data in a central location No more segment/crawldb/linkdb merges. No more "missing" data in a job. There are a lot of places where we copy data from one structure to another just so that it is available in a later job. For example, during parsing we don't have access to a URL's fetch status. So we copy fetch status into content metadata.
1、QSound
QSound提供对平台音频设备的访问.直接继承QObject。
Qt提供了在大多数GUI应用程序中通常都需要的操作:异步播放声音文件。这用一个单呼叫就能简单的完成。
QSound::play("mysounds/bells.wav");
另外,可以创建一个QSound对象然后使用play()槽播放文件.
QSound bells("mysounds/bells.wav");
bells.play();
成员函数:
QSound::QSound ( const QString & filename, QObject * parent = 0) 构造一个QSound能够快速的通过一个名为filename的文件来播放声音。 这也许会比静态函数play使用更多的内存。但它也可能更立即的(依赖平台音响设备而定)的播放。
父类parent被传递给了QObject的构造函数。 QSound::~QSound () 销毁声音对象。
QString QSound::fileName () const 返回与声音有关的文件名。 bool QSound::isAvailable () [静态] 如果在该平台上存在声音设备便返回真,否则返回假。应用程序要么当声音是十分重要时选择报告用户要么就默默的操作而不麻烦用户了 如果没有有效的声音设备,所有的QSound操作工作安静且快速。
bool QSound::isFinished () const 当声音播放完成时返回真,否则返回假。 int QSound::loops () const 返回声音将播放的次数。 int QSound::loopsRemaining () const 返回声音将循环的次数。该值在每次声音循环后会减少。 该函数在窗口下不支持并且总是返回循环的总数。 void QSound::play ( const QString & filename ) [静态] 播放一个叫做filename的文件中的声音。 void QSound::play () [槽] 这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。 开启声音播放。该数数立即返回。依靠平台的音频设备,其它的声音也许被停止,也许被新的声音混合。 在任何时候声音可以再次播放,可能混合或者替代先播放的声音。 void QSound::setLoops ( int l ) 当它播放时设置声音重复一次。超过-1的值也许会引起声音的死循环。 在Windows中, 不同于1的循环次数的声音将总是死循环。 void QSound::stop () [槽] 停止声音播放。
在 Commons Math中的 analysis.polynomials包中有所有的与多项式函数相关的类和接口定义。这一篇主要从这个包分析,来研究一下多项式函数的应用。 Polynomials包中没有 interface的定义,下属含有 5个类: PolynomialFunction、 PolynomialFunctionLagrangeForm、 PolynomialFunctionNewtonForm、 PolynomialSplineFunction和 PolynomialsUtils。其中主要的只有 PolynomialFunction和 PolynomialSplineFunction,正如 api doc中的介绍, PolynomialFunction类是 Immutable representation of a real polynomial function with real coefficients——实数多项式的表示; PolynomialSplineFunction类是 Represents a polynomial spline function.——样条曲线多项式的表示。另外两个表示拉格朗日和牛顿形式的多项式函数。而 PolynomialsUtils类中提供了几个构造个别(比如切比雪夫多项式)多项式的静态方法。 我觉得最常用的应该就是实数系数的多项式了,因此以 PolynomialFunction类为例来进行分析。实数系数的多项式函数形如: f(x) = ax^2 + bx + c。 PolynomialFunction类实现了 DifferentiableUnivariateRealFunction接口,因此必须实现 value()和 derivative()方法,并且实现该接口也表明这是一元可微分的实数函数形式。 PolynomialFunction类定义了一组 final double coefficients[]作为多项式系数,其中 coefficients[0]表示常数项的系数, coefficients[n]表示指数为 n的 x^n次项的系数。因此,这个类所表达的多项式函数是这样的: f(x)=coeff[0] + coeff[1]x + coeff[2]x^2 + … + coeff[n]x^n。它的构造方法是 PolynomialFunction(double [])就是接受这样的 coefficients数组作为系数输入参数来构造多项式的。这个是很好表达也很方便理解的。那么它的 value(double x)方法是通过调用 double evaluate(double [] coefficients, double argument)实现的,本质用 Horner's Method求解多项式的值,没有什么技术难点,非常好理解的一个给定参数和函数求值过程。剩余定义的一些加减乘等操作,都是通过一个类似public PolynomialFunction add(final PolynomialFunction p)这样的结构实现的。求导数的方法 derivative()是通过这样的一个微分操作实现的。见源码: 1 protected static double [] differentiate( double [] coefficients) {
一、TC原理介绍 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制。 Linux流量控制的基本原理如下图所示。 [img]http://dl.iteye.com/upload/attachment/368610/244035e7-de5d-3e58-a71f-5a86b94d699e.gif[/img] 接收包从输入接口(Input Interface)进来后,经过流量限制(Ingress Policing)丢弃不符合规定的数据包,由输入多路分配器(Input De-Multiplexing)进行判断选择:如果接收包的目的是本主机,那么将该包送给上层处理;否则需要进行转发,将接收包交到转发块(Forwarding Block)处理。转发块同时也接收本主机上层(TCP、UDP等)产生的包。转发块通过查看路由表,决定所处理包的下一跳。然后,对包进行排列以便将它们传送到输出接口(Output Interface)。一般我们只能限制网卡发送的数据包,不能限制网卡接收的数据包,所以我们可以通过改变发送次序来控制传输速率。Linux流量控制主要是在输出接口排列时进行处理和实现的。 二、TC规则 1、流量控制方式 流量控制包括以下几种方式: SHAPING(限制) 当流量被限制,它的传输速率就被控制在某个值以下。限制值可以大大小于有效带宽,这样可以平滑突发数据流量,使网络更为稳定。shaping(限制)只适用于向外的流量。 SCHEDULING(调度) 通过调度数据包的传输,可以在带宽范围内,按照优先级分配带宽。SCHEDULING(调度)也只适于向外的流量。 POLICING(策略) SHAPING用于处理向外的流量,而POLICIING(策略)用于处理接收到的数据。 DROPPING(丢弃) 如果流量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。 2、流量控制处理对象 流量的处理由三种对象控制,它们是:qdisc(排队规则)、class(类别)和filter(过滤器)。 QDISC(排队规则) QDisc(排队规则)是queueing discipline的简写,它是理解流量控制(traffic control)的基础。无论何时,内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc(排队规则)把数据包加入队列。然后,内核会尽可能多地从qdisc里面取出数据包,把它们交给网络适配器驱动模块。最简单的QDisc是pfifo它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。不过,它会保存网络接口一时无法处理的数据包。 QDISC的类别如下: (1)、CLASSLESS QDisc(不可分类QDisc) 1>无类别QDISC包括: [p|b]fifo 使用最简单的qdisc,纯粹的先进先出。只有一个参数:limit,用来设置队列的长度,pfifo是以数据包的个数为单位;bfifo是以字节数为单位。 pfifo_fast 在编译内核时,如果打开了高级路由器(Advanced Router)编译选项,pfifo_fast就是系统的标准QDISC。它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。而三个波段(band)的优先级也不相同,band 0的优先级最高,band 2的最低。如果band里面有数据包,系统就不会处理band 1里面的数据包,band 1和band 2之间也是一样。数据包是按照服务类型(Type of Service,TOS)被分配多三个波段(band)里面的。 red red是Random Early Detection(随机早期探测)的简写。如果使用这种QDISC,当带宽的占用接近于规定的带宽时,系统会随机地丢弃一些数据包。它非常适合高带宽应用。 sfq sfq是Stochastic Fairness Queueing的简写。它按照会话(session--对应于每个TCP连接或者UDP流)为流量进行排序,然后循环发送每个会话的数据包。 tbf tbf是Token Bucket Filter的简写,适合于把流速降低到某个值。 2>不可分类QDisc的配置 如果没有可分类QDisc,不可分类QDisc只能附属于设备的根。它们的用法如下: tc qdisc add dev DEV root QDISC QDISC-PARAMETERS 要删除一个不可分类QDisc,需要使用如下命令: tc qdisc del dev DEV root 一个网络接口上如果没有设置QDisc,pfifo_fast就作为缺省的QDisc。 (2)、CLASSFUL QDISC(分类QDisc) 可分类的QDisc包括: CBQ CBQ是Class Based Queueing(基于类别排队)的缩写。它实现了一个丰富的连接共享类别结构,既有限制(shaping)带宽的能力,也具有带宽优先级管理的能力。带宽限制是通过计算连接的空闲时间完成的。空闲时间的计算标准是数据包离队事件的频率和下层连接(数据链路层)的带宽。 HTB HTB是Hierarchy Token Bucket的缩写。通过在实践基础上的改进,它实现了一个丰富的连接共享类别体系。使用HTB可以很容易地保证每个类别的带宽,虽然它也允许特定的类可以突破带宽上限,占用别的类的带宽。HTB可以通过TBF(Token Bucket Filter)实现带宽限制,也能够划分类别的优先级。 PRIO PRIO QDisc不能限制带宽,因为属于不同类别的数据包是顺序离队的。使用PRIO QDisc可以很容易对流量进行优先级管理,只有属于高优先级类别的数据包全部发送完毕,才会发送属于低优先级类别的数据包。为了方便管理,需要使用iptables或者ipchains处理数据包的服务类型(Type Of Service,ToS)。 CLASS(类) 某些QDisc(排队规则)可以包含一些类别,不同的类别中可以包含更深入的QDisc(排队规则),通过这些细分的QDisc还可以为进入的队列的数据包排队。通过设置各种类别数据包的离队次序,QDisc可以为设置网络数据流量的优先级。 FILTER(过滤器) Filter(过滤器)用于为数据包分类,决定它们按照何种QDisc进入队列。无论何时数据包进入一个划分子类的类别中,都需要进行分类。分类的方法可以有多种,使用fileter(过滤器)就是其中之一。使用filter(过滤器)分类时,内核会调用附属于这个类(class)的所有过滤器,直到返回一个判决。如果没有判决返回,就作进一步的处理,而处理方式和QDISC有关。需要注意的是,filter(过滤器)是在QDisc内部,它们不能作为主体。 3、操作原理 类(Class)组成一个树,每个类都只有一个父类,而一个类可以有多个子类。某些QDisc(例如:CBQ和HTB)允许在运行时动态添加类,而其它的QDisc(例如:PRIO)不允许动态建立类。允许动态添加类的QDisc可以有零个或者多个子类,由它们为数据包排队。此外,每个类都有一个叶子QDisc,默认情况下,这个叶子QDisc使用pfifo的方式排队,我们也可以使用其它类型的QDisc代替这个默认的QDisc。而且,这个叶子叶子QDisc有可以分类,不过每个子类只能有一个叶子QDisc。 当一个数据包进入一个分类QDisc,它会被归入某个子类。我们可以使用以下三种方式为数据包归类,不过不是所有的QDisc都能够使用这三种方式。 tc过滤器(tc filter) 如果过滤器附属于一个类,相关的指令就会对它们进行查询。过滤器能够匹配数据包头所有的域,也可以匹配由ipchains或者iptables做的标记。 服务类型(Type of Service) 某些QDisc有基于服务类型(Type of Service,ToS)的内置的规则为数据包分类。 skb->priority 用户空间的应用程序可以使用SO_PRIORITY选项在skb->priority域设置一个类的ID。 树的每个节点都可以有自己的过滤器,但是高层的过滤器也可以直接用于其子类。 如果数据包没有被成功归类,就会被排到这个类的叶子QDisc的队中。相关细节在各个QDisc的手册页中。 4、命名规则 所有的QDisc、类和过滤器都有ID。ID可以手工设置,也可以有内核自动分配。ID由一个主序列号和一个从序列号组成,两个数字用一个冒号分开。 QDISC 一个QDisc会被分配一个主序列号,叫做句柄(handle),然后把从序列号作为类的命名空间。句柄采用象10:一样的表达方式。习惯上,需要为有子类的QDisc显式地分配一个句柄。 类(CLASS) 在同一个QDisc里面的类分享这个QDisc的主序列号,但是每个类都有自己的从序列号,叫做类识别符(classid)。类识别符只与父QDisc有关,和父类无关。类的命名习惯和QDisc的相同。 过滤器(FILTER) 过滤器的ID有三部分,只有在对过滤器进行散列组织才会用到。详情请参考tc-filters手册页。 5、单位 tc命令的所有参数都可以使用浮点数,可能会涉及到以下计数单位。 1》带宽或者流速单位: kbps 千字节/秒 mbps 兆字节/秒 kbit KBits/秒 mbit MBits/秒 bps或者一个无单位数字 字节数/秒 2》数据的数量单位: kb或者k 千字节 mb或者m 兆字节 mbit 兆bit kbit 千bit b或者一个无单位数字 字节数 3》时间的计量单位: s、sec或者secs 秒 ms、msec或者msecs 分钟 us、usec、usecs或者一个无单位数字 微秒 三、TC命令 tc可以使用以下命令对QDisc、类和过滤器进行操作: add 在一个节点里加入一个QDisc、类或者过滤器。添加时,需要传递一个祖先作为参数,传递参数时既可以使用ID也可以直接传递设备的根。如果要建立一个QDisc或者过滤器,可以使用句柄(handle)来命名;如果要建立一个类,可以使用类识别符(classid)来命名。 remove 删除有某个句柄(handle)指定的QDisc,根QDisc(root)也可以删除。被删除QDisc上的所有子类以及附属于各个类的过滤器都会被自动删除。 change 以替代的方式修改某些条目。除了句柄(handle)和祖先不能修改以外,change命令的语法和add命令相同。换句话说,change命令不能一定节点的位置。 replace 对一个现有节点进行近于原子操作的删除/添加。如果节点不存在,这个命令就会建立节点。 link 只适用于DQisc,替代一个现有的节点。 例: tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ] tc class [ add | change | replace ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ] tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id tc [-s | -d ] qdisc show [ dev DEV ] tc [-s | -d ] class show dev DEV tc filter show dev DEV 四、具体操作 Linux流量控制主要分为建立队列、建立分类和建立过滤器三个方面。 1、基本实现步骤为: (1) 针对网络物理设备(如以太网卡eth0)绑定一个队列QDisc; (2) 在该队列上建立分类class; (3) 为每一分类建立一个基于路由的过滤器filter; (4) 最后与过滤器相配合,建立特定的路由表。 2、环境模拟实例: 流量控制器上的以太网卡(eth0) 的IP地址为192.
所谓「动态DNS」:是指不具固定IP的主机,利用动态DNS服务,帮助主机可以随著IP的改变去对应网域名称与IP的关系。
理解:动态DNS是IP与域名的脊梁。
实例说明:
当我启用了动态DNS功能後,每次我的主机开机,TWNIC之动态DNS伺服器,将会自动去取得并对应我的主机当时上线的IP,假设此次我的主机开机时所取得IP是211.72.210.250,此时利用动态DNS服务,会将我的yourname.tw自动设定对应到211.72.210.250去
理解:动态dns具备自动且动态解析域名对应的ip。
服务对象:
凡已注册有.com.tw/.org.tw/.net.tw/.idv.tw/.club.tw/.ebiz.tw/.game.tw/.tw(泛用型)之英文网域名称者,不论所属受理注册机构皆可使用本服务,相关服务之设定请至您网域名称所属之受理注册机构网站进行。
理解:服务对象,互联网域名
动态域名的功能,就是实现固定域名到动态IP地址之间的解析。用户每次上网得到新的IP地址之后,安装在用户计算机里的动态域名软件就会把这个IP地址发送到动态域名解析服务器,更新域名解析数据库。Internet上的其他人要访问这个域名的时候,动态域名解析服务器会返回正确的IP地址给他。 因为绝大部分Internet用户上网的时候分配到的IP地址都是动态的,用传统的静态域名解析方法,用户想把自己上网的计算机做成一个有固定域名的网站,是不可能的。而有了动态域名,这个美梦就可以成真。用户可以申请一个域名,利用动态域名解析服务,把域名与自己上网的计算机绑定在一起,这样就可以在家里或公司里搭建自己的网站,非常方便。
理解:简单的说就是:作为一个web服务器,在为动态IP的情况下,访客访问一个网址,通过一个【动态域名服务器】把正确的IP地址传给访客,使得他们能够打开这个网页。
IE网页截图是IE编程中的经典问题。 IE9 beta发布之后我收到很多关于这方面的问题。 最近我把IE和Windows中这部分相关的代码重新架构了一下,使它们能够在IE9开启硬件加速的情况下完美兼容原来GDI函数。 趁着记忆还fresh, 写一个总结以供大家参考。
主要有以下3个接口可以实现IE网页截图。 1) HRESULT IHTMLElementRender::DrawToDC(HDC hDC)
MSDN参考: http://msdn.microsoft.com/en-us/library/aa752273(VS.85).aspx
简单代码示例:
IHTMLDocument3 *pDoc = ...; //得到IHTMLDocument3指针 IHTMLElement *pDocElement = NULL; pDoc->get_documentElement(&pDocElement ); IHTMLElementRender *pRender = NULL; pDocElement ->QueryInterface(IID_IHTMLElementRender, (void **) &pRender); pDocElement->DrawToDC(hImageDC); 注意事项: Quirks 模式下,documentElement不存在, 请使用BODY元素。 优点: 可以画某个特定的HTML元素
缺点: 需要判断是不是Quirks模式下,进而决定拿documentElement元素还是BODY元素的的指针;
只能按目前屏幕显示大小截取,不支持缩放; 在有些情况就是当网页由frames 组成或者是个内嵌的doc/pdf文档,该可能会失败;
2) HRESULT IViewObject::Draw( DWORD dwAspect, LONG lindex, void * pvAspect, DVTARGETDEVICE * ptd, HDC hicTargetDev, HDC hdcDraw, const LPRECTL lprcBounds,
const LPRECTL lprcWBounds, BOOL (*) (DWORD) pfnContinue, DWORD dwContinue )
在线视频播放 flowplayer,下载地址:http://flowplayer.org/
要求是视频资源必须是flv
codes: 只是模板,用于生成html的模板
注意:flv视频的位置必须处于某项目下
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- TemplateBeginEditable name="doctitle" -->
<title>无标题文档</title>
<!-- TemplateEndEditable -->
<!-- TemplateBeginEditable name="head" -->
<!-- TemplateEndEditable -->
<!-- flowplayer -->
<!-- include flowplayer JavaScript file that does Flash embedding and provides the Flowplayer API.
-->
<mce:script type="text/javascript" src="/MySite/flowplayer/flowplayer-3.2.4.min.js" mce_src="MySite/flowplayer/flowplayer-3.2.4.min.js"></mce:script>
<!-- some minimal styling, can be removed -->
<link rel="stylesheet" type="
Thinkpad分为W、T、X、R、L、SL、E七个系列,后缀有i、p、t、s等, 其中: W——图形工作站 T——Thinkpad的代表机型,如果经济情况没问题,这是首选 X——便携机型 R——T系列的低价位版本,价格便宜,质量上乘,是Thinkpad销量最大的机型。 L——目前国内没有大面积上市,不了解,据说是用来替代R的。 SL、E——从质量上讲,这两个型号不算Thinkpad。 后缀的i——低配版。R61i,就是R61的低配版本,外壳、材质和结构与R61完全相同,但CPU较低。 后缀的p——高性能版,与i相反,如R61p。现在的Thinkpad没有带p尾缀的。 后缀的t——旋转屏幕,且手写。有X200t,X201t。 后缀的s——超薄,有T400s和T410s。 转载于:https://blog.51cto.com/wuhaoshu/440170
关于“[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序”的解决方法集合。
问题现象:
-在vs.net 2003 下通过odbc 连接mssql6.5 可以正常取得数据。
-转至vs.net 2005 下用同样的方法,用odbc 去取MSSQL6.5 出错误,错误信息如下:
[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 解决方法:
在管理工具里面 -》点数据源ODBC -》 系统DSN -》添加 选SQL 然后找到你要连接的数据库`~~ 在连就OK了
这里的系统DSN 的配置要跟 用户DSN 里的配置 一样。
--配置完后,测试通过.
在vs.net 2003 vb.net下通过odbc 连接informix,
提示:[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
导致问题的原因,是原来的2.6版本的没卸载,直接装了3.5版本的客户端造成的环境配置问题,环境参数问题,将C:/autoexec.bat(自启动文件) 文件中的path中的与IBM informix路径相关的路径全都删除,重新安装3.5版本就OK了。
下面的是在visual studio 2005 中编写上,但运行这后,就出出上面的问题“ERROR [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 ”就在“AconnStr.Open();”打住了,数据库我用的是access 2000的。 <%@ Page Language= "C# " ContentType= "txet/html "AutoEventWireup= "true " CodeFile= "OleDbConnection.aspx.cs " Inherits= "
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.1.2 192.168.1.101 10
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.1.0 255.255.255.0 192.168.1.101 192.168.1.101 10
192.168.1.101 255.255.255.255 127.0.0.1 127.0.0.1 10
192.168.1.255 255.255.255.255 192.168.1.101 192.168.1.101 10
224.0.0.0 240.0.0.0 192.168.1.101 192.168.1.101 10
255.255.255.255 255.255.255.255 192.168.1.101 192.168.1.101 1
Default Gateway: 192.168.1.2
Network Destination 目的网段 Netmask 子网掩码 Interface 到达该目的地的本路由器的出口ip(表示信息是从计算机A的这个IP地址送出)。
Gateway 下一跳路由器入口的ip,路由器通过interface和gateway定义一调到下一个路由器的链路,通常情况下,interface和gateway是同一网段的
如果目的计算机的IP地址与 Netmask执行逻辑AND运算后的结果,等于在Network Destination处的值,则会将信息转发给Gateway处的IP地址。
但是如果Gateway处的IP地址等于计算机A自己的IP地址,则表示此信息将直接传送给目的计算机,不需要再送给其他的路由器,例如目的计算机是与计算机A在同一个网络内。
Metric 跳数,该条路由记录的质量,一般情况下,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由 第一条 0.0.0.0 0.0.0.0 192.168.1.2 192.168.1.101 10
缺省路由:意思就是说,当一个数据包的目的网段不在你的路由记录中,那么,你的路由器该把那个数据包发送到哪里!缺省路由的网关是由你的连接上的default gateway决定的 该路由记录的意思是:当我接收到一个数据包的目的网段不在我的路由记录中,我会将该数据包通过192.
性能测试之内存篇(windows)
要监视内存不足的状况,请从以下的对象计数器开始:
Memory\ Available Bytes
Memory\ Pages/sec
Available Bytes剩余的可用物理内存,单位是兆字节(参考值:>=10%)。表明进程当前可使用的内存字节数。Pages/sec 表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以释放[url=]工作[/url]集空间的页面数。
如果 Available Bytes 的值很小(4 MB 或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。如果 Pages/sec 的值为 20 或更大,那么您应该进一步研究页交换活动。Pages/sec 的值很大不一定表明内存有问题,而可能是运行使用内存映射文件的程序所致。
操作系统经常会利用磁盘交换的方式提高系统可用的内存量或是提高内存的使用效率。下列四个% S4 p7 ~7 H' o0 q! }8 B 指标直接反映了操作系统进行磁盘交换的频度。9 Z! o- {6 M2 j8 O( I Page Faults/sec/ o* H7 Q* B; L/ y8 w. M1 ] 当处理器在内存中读取某一页出现错误时,就会产生缺页中断,也就是 page Fault。如果这个页位于内存的其他位置,这种错误称为软错误,用Transition Fault/sec 来衡量;如果这个页位于硬盘上,必须从硬盘重新读取,这个错误成为硬错误。硬错误会使系统的运行效率很快将下来。Page Faults/sec这个计数器就表示每秒钟处理的错误页数,包括硬错误和软错误。 Page Input/sec7 f) d( l# [# Z, a 表示为了解决硬错误而写入硬盘的页数(参考值:>=Page Reads/sec)9 v, K+ O1 L! c Page Reads/sec; z+ ^* C"
PHP中define函数的使用 来源:68design.net 2007年10月12日 08:59 网友评论:0条 点击: 1938 PHP预先定义了几个常量,并提供了一种机制在运行时自己定义。常量和变量基本上是一样的,不同的是:常量必须用DEFINE函数定义,常量一旦定义好,就不能被重新定义了。
PHP中预先定义好的常量: __FILE__ 当前正在处理的脚本文件名。如果使用在一个被包含的文件中,那么它的值就是这个被包含的文件,而不是包含它的文件名。 __LINE__ 正在处理的文件的当前行数。 PHP_VERSION 表示PHP处理器的当前版本,如:'3.0.8-dev'。 PHP_OS PHP处理器所在的操作系统名字,如:'Linux'。 TRUE 真值 FALSE 假值 可以用DEFINE函数定义更多的常量。 如,定义常量: <?php define("CONSTANT", "Hello world."); echo CONSTANT; // outputs "Hello world." ?> 用 __FILE__ 和 __LINE__ 的举例 <?php function report_error($file, $line, $message) { echo "An error occured in $file on line $line: $message."; } report_error(__FILE__,__LINE__, "Something went wrong!"); ?>
第1章 EJB开发手册
1.1. 简介
1.1.1. Enterprise JavaBean简介
1.1.1.1. 作为组件模型的EJB
1.1.1.1.1. 特征
1.1.1.1.2. 使用EJB组件模型的优势
1.1.1.2. EJB组件模型
1.1.1.2.1. 客户端类型
1.1.1.2.2. EJB组件模型的组成部分
1.1.1.3. EJB的类型
1.1.2. Session Bean
1.1.2.1. 什么是Session Bean
1.1.2.2. Session Bean的生存时间
1.1.2.3. 会话状态
1.1.2.3.1. 无状态的Session Bean
1.1.2.3.2. 有状态的Session Bean
1.1.3. Entity Bean
1.1.3.1. 什么是Entity Bean
1.1.3.1.1. Session Bean与Entity Bean
1.1.3.1.2. 容器管理持久性(Container-managed Persistence,CMP)
1.1.3.1.3. 容器管理关系(Container-managed Relationship,CMR)
1.1.3.1.4. 容器管理关系的方向
1.1.3.2. Entity Bean的特征
1.1.3.2.1. 持久性
1.1.3.2.2. 持久业务数据的对象表示
1.1.3.2.3. 表示相同的底层数据的多个Entity Bean实例
1.1.3.2.4. 可查找的Entity Bean
<ejb-jar><!--EJB发布描述器的根元素,它包含一个可选的EJB-JAR文件的描述,可选显示的名称,可选小图标的文件名,可选的大图标的文件名,必须的所有被包含的enterprise bean 的结构信息 ,可选的应用装配描述器,可选的针对当前ejb-jar文件的ejb-client-jar 文件的名称 --> <description>A short description</description><!--ejb-jar 文件的描述性的说明 --> <display-name>A name</display-name><!--ejb-jar 文件显示的名称 --> <small-icon>employee-service-icon16x16.jpg</small-icon><!--small-icon 元素包含小图标(16 x 16)的名字,这个名称是在ejb-jar文件的相对路经,文件必须是jpg或者是gif格式,文件名必须以.jpg.或者gif为后缀,图标可以被工具使用--> <large-icon>employee-service-icon32x32.jpg</large-icon><!--large-icon元素包含小图标(32 x 32)的名字,这个名称是在ejb-jar文件的相对路经,文件必须是jpg或者是gif格式,文件名必须以.jpg.或者gif为后缀,图标可以被工具使用 --> <enterprise-beans><!--enterprise-beans元素包含了多个enterprise beans的声明描述 --> <session><!--Session元素声明了一个session bean.声明由以下这些组成:一个可选的描述符,可选的显示名称;可选的小图标文件名,可选的大图标文件名,在发布描述符中分配给这个企业bean的名字,当前sessionBean的home及remote接口的名称,sessionBean的实现类的名,sessionBean的状态管理类型,sessionBean的事务类型,一个可选的bean的环境条目,一个可选的引用的EJB的声明,一个可选的安全角色的引用声明,一个可选的资源工厂的引用声明,那些称为可选的元素当它们描述的内容为空时,可以将它们省略掉的 --> <description>A short description</description> <display-name>A name</display-name><!--要显示的名称,这个名字可以被别的工具引用到 --> <small-icon>employee-service-icon16x16.jpg</small-icon> <large-icon>employee-service-icon32x32.jpg</large-icon> <ejb-name>EmployeeService</ejb-name><!-- ejb-name元素指明了企业bean的名称,它是由ejb-jar 文件的编写者命名的,这个名称在同一个ejb-jar文件中必须是唯一的,企业bean的代码不依赖于它,与它隔离的,所以企业bean的名称可以在应用装配的过程中改变而不会影响企业bean的功能.在发布描述器中的ejb-name与应用发布者即将分配给企业bean的home接口的JNDI的名称没有结构性的关系.名称必须定义的有意义 --> <home>com.aardvark.payroll.PayrollHome</home><!-- home元素包含企业bean的具有完全的路经(具有完整的包名)的home接口 --> <remote>com.wombat.empl.EmployeeService</remote><!--remote元素包含企业bean的具有完全的路经(具有完整的包名)的remote接口 --> <ejb-class>com.wombat.empl.EmployeeServiceBean</ejb-class><!-- ejb-class元素包含企业bean的具有完全的路经(具有完整的包名)的实现类 --> <session-type>Stateful/Stateless</session-type><!-- session-type元素描述 sessionbean是stateful的还是stateless的,必须是两者中的一种. --> <transaction-type>Bean/Container</transaction-type><!-- transaction-type元素的值必须是Bean和Container中的一个,也就是说事务类型必须它们中的一种. --> <env-entry><!--env-entry元素包含了企业bean的环境条目(environment entries)的声明,声明的内容包括可选的描述符,环境条目的名称,及可选的值 --> <description>A short description</description> <env-entry-name>minAmount</env-entry-name><!--一个企业bean 的 environment entry的名称 --> <env-entry-type>java.lang.String</env-entry-type><!--env-entry-type元素包含了具有`完全限制的企业bean代码期望得到的Java类型值,别的合法的类型值: java.lang.Boolean, java.
Spring的起源和背景 Rod Johson在2002年编著的《Expert one to one J2EE design and development》一书中,对Java EE正统框架臃肿、低效、脱离现实的种种现状提出了质疑,并积极寻求探索革新之道。以此书为指导思想,他编写了interface21框架,这是一个力图冲破Java EE传统开发的困境,从实际需求出发,着眼于轻便、灵巧,易于开发、测试和部署的轻量级开发框架。Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。同年他又推出了一部堪称经典的力作《Expert one-to-one J2EE Development without EJB》,该书在Java世界掀起了轩然大波,不断改变着Java开发者程序设计和开发的思考方式。在该书中,作者根据自己多年丰富的实践经验,对EJB的各种笨重臃肿的结构进行了逐一的分析和否定,并分别以简洁实用的方式替换之。至此一战功成,Rod Johnson成为一个改变Java世界的大师级人物。 传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现Write Once及Run Anywhere的承诺。Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务等。 Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而与它们无缝地整合。 Spring简介 Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 ◆目的:解决企业应用开发的复杂性 ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ◆范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 ◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为 IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 ◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 ◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。 ◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。 所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。 为什么需要Spring 你可能正在想“Spring不过是另外一个的framework”。当已经有许多开放源代码(和专有) J2EE framework时,我们为什么还需要Spring Framework? Spring是独特的,因为若干个原因: ◆它定位的领域是许多其他流行的framework没有的。Spring关注提供一种方法管理你的业务对象。 ◆ Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。因此从你的学习中,你可得到最大的价值。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。 ◆它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。 Spring对你的工程来说,它不需要一个以上的framework。Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构。它也涉及到其他framework没有考虑到的内容。 Spring带给我们什么 ◆方便解耦,简化开发 通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。 ◆AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。 ◆声明式事务的支持 在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。 ◆方便程序的测试 可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。 ◆方便集成各种优秀框架 Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支持。 ◆降低Java EE API的使用难度 Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。 ◆Java 源码是经典学习范例 Spring的源码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。 Spring框架的好处 在我们进入细节以前,让我们看一下Spring可以给一个工程带来的一些好处: ◆Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB。如果你仅仅使用了Struts或其他的包含了J2EE特有APIs的framework,你会发现Spring关注了遗留下的问题,。 ◆Spring能消除在许多工程上对Singleton的过多使用。根据我的经验,这是一个主要的问题,它减少了系统的可测试性和面向对象特性。 ◆Spring能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种一致的方法来进行配置。曾经感到迷惑,一个特定类要查找迷幻般的属性关键字或系统属性,为此不得不读Javadoc乃至源编码吗?有了Spring,你可很简单地看到类的JavaBean属性。倒置控制的使用(在下面讨论)帮助完成这种简化。 ◆Spring能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零。 ◆Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。 ◆使用Spring构建的应用程序易于单元测试。 ◆Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。 ◆Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适于许多web应用。例如,Spring能使用AOP提供声明性事务而不通过使用EJB容器,如果你仅仅需要与单个的数据库打交道,甚至不需要JTA实现。 ■Spring为数据存取提供了一致的框架,不论是使用JDBC或O/R mapping产品(如Hibernate)。 Spring确实使你能通过最简单可行的解决办法解决你的问题。这些特性是有很大价值的。 总结起来,Spring有如下优点: ◆低侵入式设计,代码污染极低 ◆ 独立于各种应用服务器,可以真正实现Write Once,Run Anywhere的承诺 ◆Spring的DI机制降低了业务对象替换的复杂性 ◆Spring并不完全依赖于Spring,开发者可自由选用Spring框架的部分或全部 Spring能做什么? Spring提供许多功能,在此我将快速地依次展示其各个主要方面。 首先,让我们明确Spring范围。尽管Spring覆盖了许多方面,但我们已经有清楚的概念,它什么应该涉及和什么不应该涉及。 Spring的主要目的是使J2EE易用和促进好编程习惯。 Spring不重新开发已有的东西。因此,在Spring中你将发现没有日志记录的包,没有连接池,没有分布事务调度。这些均有开源项目提供(例如 Commons Logging 用来做所有的日志输出,或Commons DBCP用来作数据连接池),或由你的应用程序服务器提供。因为同样的的原因,我们没有提供O/R mapping层,对此,已有有好的解决办法如Hibernate和JDO。 Spring的目标是使已存在的技术更加易用。 例如,尽管我们没有底层事务协调处理,但我们提供了一个抽象层覆盖了JTA或任何其他的事务策略。 Spring没有直接和其他的开源项目竞争,除非我们感到我们能提供新的一些东西。例如,象许多开发人员,我们从来没有为Struts高兴过,并且感到在MVC web framework中还有改进的余地。在某些领域,例如轻量级的IoC容器和AOP框架,Spring有直接的竞争,但是在这些领域还没有已经较为流行的解决方案。(Spring在这些区域是开路先锋。) Spring也得益于内在的一致性。 所有的开发者都在唱同样的的赞歌,基础想法依然是Expert One-on-One J2EE设计与开发的那些。 并且我们已经能够使用一些主要的概念,例如倒置控制,来处理多个领域。 Spring在应用服务器之间是可移植的。 当然保证可移植性总是一次挑战,但是我们避免任何特定平台或非标准化,并且支持在WebLogic,Tomcat,Resin,JBoss,WebSphere和其他的应用服务器上的用户。 Spring的下载和安装 下载和安装Spring请按如下步骤进行。 (1)登录http://www.
1、创建一个工程 bbs
2、 创建一个文件用来连接数据库 conn.php
<?php
$conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误");
mysql_select_db("bbs", $conn);
mysql_query("set names 'GBK'"); //使用GBK中文编码;
?>
3、创建一个文件来新增 留言add.php
<?php
include("conn.php");
if($_POST['submit']){
$sql = "INSERT INTO message (id,user,title,content,lastdate) "
."values('','$_POST[user]','$_POST[title]','$_POST[content]',now())";
mysql_query($sql);
echo "发表成功";
}
?>
<form action="add.php" method="post">
用户:<input type="text" size="10" name="user" /><br/>
标题:<input type="text" name="title" /><br/>
内容:<textarea name="content"></textarea><br/>
<input type="submit" name="submit" value="发布留言"/>
</form>
4、创建一个文件,用来查看列表 list.php
<?php
include("conn.php");
?>
<table width=500 border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="
WDK,目前MS把DDK改名为WDK,可是用win7版本的WDK,版本号7600.16385.1。VisualStudio2008,只是作为一个简单的代码编辑器,使用它是因为比较熟悉。VisualAssist,在使用了改工具半年后,已经无法离开该工具了,它使得Coding更加方便快捷,提高效率。搭建编译环境,在网上有一些文章介绍在VS中进行驱动代码的编译,个人觉的,没什么必要,直接使用WDK命令行进行编译,也很方便。在VS选项中,把WDK的inc文件夹包含进了,在Coding时可以有提示,和现实的正常。VMware,虚拟机,用于单机调试。WinDbg,内核调试器,在WDK安装时自带安装。virtualKD,用于连接主机与虚拟机。搭建调试环境,使用WinDbg和VMware就可以调试了,是使用Com接口连接的,使用virtualKD工具可以提高一点传输速率。安装相当简单,只需把virtualKD安装目录中的Target目录Copy到虚拟机中,在虚拟机中运行vminstall.exe进行安装。调试中要先运行virtualKD中的vmmon.exe,再开机虚拟机,启动虚拟机中OS。调试技巧:动态加载驱动工具,网上有很多,这里使用InstDrv。在WinDdb调试命令栏中,输入:bu “DriverName”!DriverEntry 就可以在“DriverName”驱动的DriverEntry入口函数设置断点,会直接打开源代码。目前就这些,遇到问题在补充。
转自:http://service.hundsun.com/bbs/space/viewspacepost.aspx?postid=89
谨慎操作 关于卷迁移的整理 作者:高翔 最近在学习HP UNIX,发现HP UNIX中卷的迁移过程和其它的如LINUX,AIX有些不同,所以抽空将三种操作系统的操作步骤做了个整理: ### linux ### 在redhat Linux中LVM信息是同时保存在磁盘上和/etc/lvm.conf里,可以通过vgexport命令来实现vg的迁移。 vgexport只是把/etc/lvm.conf中关于这个VG的信息删除,而不会更改磁盘上的任何数据。磁盘挂到新的机器 上后,只需要修改/etc/lvmconf,这个可以通过vgimport完成。 源端:[@more@] 1,将源端文件系统umount
umount /test
2,将lv和lv inactive
lvchange -an /dev/vg_test/lv_test
vgchange -an vg_test
3,导出vg
vgexport vg_test
目标端:
1,用kudzu检测新的盘
2,导入vg
vgimport vg_test
3,激活vg
vgchange -ay vg_test
4,mount文件系统
###
HP UNIX
###
在HP UNIX上,vgexport只是在/etc/lvmtab里把相关vg的entry删除,重新vgimport就会重新生成,map文件除了能记录
原来lv的名字之外没有任何用处,如果不用map,vgimport后所有lv会使用默认值如:lvol1,lvol2…但不会影响vg中的数据。
源端:
1,将源端文件系统umount
umount /test
2,将vg inactive
vgchange –a n vg_test
3,在源端产生map文件
vgexport -p -s -m /tmp/vg_exp_bak/vg_test.map /dev/vg_test
4,将map文件拷贝到目标端
可以通过在源端export vg 前后通过 strings /etc/lvmtab观察发生的变化.
JSP文件中的html标签如下,在eclipse环境下提示:Invalid location of tag (div)。
<a id="test1" class="mitem" href="#">
<img src="../m1.jpg" width="60"></img>
<div id="a-in-1" class="a-in"><div class="a-in-m"></div><div class="a-in-r"></div></div>
</a>
现象: 在 firefox3.6 下进入页面,或者进入页面有时界面显示乱套。但在 ie,firefox3.0下都显示正常。
解决办法: 将<a></a>标签下的<div></div>标签替换为<span></span>,如下:
<a id="test1" class="mitem" href="#">
<img src="../m1.jpg" width="60"></img>
<span id="a-in-1" class="a-in"><span class="a-in-m"></span><span class="a-in-r"></span></span>
</a>
原因应该是<a></a>与<div></div>标签的组合导致浏览器解析出错。
简单整人,鼠标随机乱动,随机发出错误提示音,到达一定时间后,强行关闭电脑 using System; using System.Diagnostics; using System.Media; using System.Runtime.InteropServices; using System.Threading; namespace wga { static class Program { const int MOUSEEVENTF_LEFTDOWN = 0x2 ; const int MOUSEEVENTF_LEFTUP = 0x4 ; const int MOUSEEVENTF_MIDDLEDOWN = 0x20 ; const int MOUSEEVENTF_MIDDLEUP = 0x40 ; const int MOUSEEVENTF_MOVE = 0x1 ; const int MOUSEEVENTF_ABSOLUTE = 0x8000 ; const int MOUSEEVENTF_RIGHTDOWN = 0x8 ; const int MOUSEEVENTF_RIGHTUP = 0x10 ; [DllImport( "user32.dll" )] static extern int GetSystemMetrics( int nIndex); [DllImport( "
监测工具 我们只需要简单的工具就可以对 Linux 的性能进行监测,以下是 VPSee 常用的工具: 工具 简单介绍 top 查看进程活动状态以及一些系统状况 vmstat 查看系统状态、硬件和系统信息等 iostat 查看CPU 负载,硬盘状况 sar 综合工具,查看系统状况 mpstat 查看多处理器状况 netstat 查看网络状况 iptraf 实时网络状况监测 tcpdump 抓取网络数据包,详细分析 mpstat 查看多处理器状况 tcptrace 数据包分析工具 netperf 网络带宽工具 dstat 综合工具,综合了 vmstat, iostat, ifstat, netstat 等多个信息
Collection接口,包含list和set子接口 Collection和Map接口之间的主要区别在于:Collection中存储了一组对象,而Map存储关键字/值对。 在Map对象中,每一个关键字最多有一个关联的值。 Map:不能包括两个相同的键,一个键最多能绑定一个值。null可以作为键,这样的键只有一个;可以有一个或多个键所对应的 值为null。当get()方法返回null值时,即可以表示Map中没有该键,也可以表示该键所对应的值为null。因此,在Map中不能由get()方法来判断Map中是否存在某个键,而应该用containsKey()方法来判断。 继承Map的类有:HashMap,HashTable HashMap:Map的实现类,缺省情况下是非同步的,可以通过Map Collections.synchronizedMap(Map m)来达到线程同步 HashTable:Dictionary的子类,确省是线程同步的。不允许关键字或值为null 当元素的顺序很重要时选用TreeMap,当元素不必以特定的顺序进行存储时,使用HashMap。Hashtable的使用不被推荐,因为HashMap提供了所有类似的功能,并且速度更快。当你需要在多线程环境下使用时,HashMap也可以转换为同步的。
1.what is the meaning of JVM ? 2.please explain about Reflection concisely. 3.please explain about web.xml 4.please explian about mainifest.mf 5.what technology are used in J2EE platfrom.please list and explain concisely. 6.please explain the relationship between classpath and package,and the relationship between them and java files. 7.what is the differense session Bean and Entity Bean ? 8.please write out the meaning of Aggregation and compesite within UML Relationship,and show their figares.
1.某程序代码如下,当运行java test.ChildClass时,请写出输出结果 (10分) package test; public class A { public A() { System.out.println(”A Create”); } } package test; import test.A; public class B extends A { public B() { System.out.println(”B Create”); } public static void main(String[] args) { A a = new A(); B b = new B(); } } 运行结果: 2. JSP有哪些内置对象,分别有什么作用?(10分) 3. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?(5分) 4.char型变量中能不能存贮一个中文汉字?为什么?(5分) 5.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?(5分) 6. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?(10分) 7.请描述一下Servlet的生命周期(10分) 8. 编程题: 写一个Singleton出来。(15分) 9.UML中有哪些常用图,分别用来做什么?(15分)
提高JAVA的性能,一般考虑如下的四个主要方面: (1) 程序设计的方法和模式 一个良好的设计能提高程序的性能,这一点不仅适用于JAVA,也适用也任何的编程语言。因为它充分利用了各种资源,如内存,CPU,高速缓存,对象缓冲池及多线程,从而设计出高性能和可伸缩性强的系统。 当然,为了提高程序的性能而改变原来的设计是比较困难的,但是,程序性能的重要性常常要高于设计上带来的变化。因此,在编程开始之前就应该有一个好的设计模型和方法。 (2) JAVA布署的环境。 JAVA布署的环境就是指用来解释和执行JAVA字节码的技术,一般有如下五种。即解释指令技术(Interpreter Technology),及时编译的技术(Just In Time Compilier Technology), 适应性优化技术(Adaptive Optimization Technology), 动态优化,提前编译为机器码的技术(Dynamic Optimization,Ahead Of Time Technology)和编译为机器码的技术(Translator Technology). 这些技术一般都通过优化线程模型,调整堆和栈的大小来优化JAVA的性能。在考虑提高JAVA的性能时,首先要找到影响JAVA性能的瓶颈(BottleNecks),在确认了设计的合理性后,应该调整JAVA布署的环境,通过改变一些参数来提高JAVA应用程序的性能。具体内容见第二节。 (3) JAVA应用程序的实现 当讨论应用程序的性能问题时,大多数的程序员都会考虑程序的代码,这当然是对的,当更重要的是要找到影响程序性能的瓶颈代码。为了找到这些瓶颈代码,我们一般会使用一些辅助的工具,如Jprobe,Optimizit,Vtune以及一些分析的工具如TowerJ Performance等。这些辅助的工具能跟踪应用程序中执行每个函数或方法所消耗掉的时间,从而改善程序的性能。 (4) 硬件和操作系统 为了提高JAVA应用程序的性能,而采用跟快的CPU和更多的内存,并认为这是提高程序性能的唯一方法,但事实并非如此。实践经验和事实证明,只有遭到了应用程序性能的瓶颈,从而采取适当得方法,如设计模式,布署的环境,操作系统的调整,才是最有效的。 3.程序中通常的性能瓶颈。 所有的应用程序都存在性能瓶颈,为了提高应用程序的性能,就要尽可能的减少程序的瓶颈。以下是在JAVA程序中经常存在的性能瓶颈。 了解了这些瓶颈后,就可以有针对性的减少这些瓶颈,从而提高JAVA应用程序的性能 4. 提高JAVA程序性能的步骤 为了提高JAVA程序的性能,需要遵循如下的六个步骤。 a) 明确对性能的具体要求 在实施一个项目之前,必须要明确该项目对于程序性能的具体要求,如:这个应用程序要支持5000个并发的用户,并且响应时间要在5秒钟之内。但同时也要明白对于性能的要求不应该同对程序的其他要求冲突。 b) 了解当前程序的性能 你应该了解你的应用程序的性能同项目所要求性能之间的差距。通常的指标是单位时间内的处理数和响应时间,有时还会比较CPU和内存的利用率。 c) 找到程序的性能瓶颈 为了发现程序中的性能瓶颈,通常会使用一些分析工具,如:TowerJ Application Performance Analyzer或VTune来察看和分析程序堆栈中各个元素的消耗时间,从而正确的找到并改正引起性能降低的瓶颈代码,从而提高程序的性能。这些工具还能发现诸如过多的异常处理,垃圾回收等潜在的问题。 d) 采取适当的措施来提高性能 找到了引起程序性能降低的瓶颈代码后,我们就可以用前面介绍过的提高性能的四个方面,即设计模式,JAVA代码的实现,布署JAVA的环境和操作系统来提高应用程序的性能。具体内容将在下面的内容中作详细说明。 e) 只进行某一方面的修改来提高性能 一次只改变可能引起性能降低的某一方面,然后观察程序的性能是否有所提高,而不应该一次改变多个方面,因为这样你将不知道到底哪个方面的改变提高了程序的性能,哪个方面没有,即不能知道程序瓶颈在哪。 f) 返回到步骤c,继续作类似的工作,一直达到要求的性能为止。
二.填空(40分) 1.集合分为___Collection___________和___Map________两个最顶端的接口。 2.获得集合中元素总数的方法是_size()_______。 3.线程在生命周期中要经历5种状态,分别是 新建状态、_可运行状态(或就绪状态)_、_正在运行状态__、阻塞状态和___死亡状态__。 4.如果有一个类MyFrame是Frame的子类,能够被不同包中的类所使用,请写出该类的声明头:___public MyFrame extends Frame_________ 5.下面的类RandomEx从Random扩展,并为其添加一个public int nextInt(int min,int max)方法,以便产生min—max之间的随机数(包含下限min,但不包含上限max),试填空实现这个功能。 class RandomEx extends Random{ public int nextInt(int min,int max){ int result=nextInt( max-min )+( min ); return (result ); } } 6.设表student的结构如下: name varchar2(30), age int, salary number(6,2) 连接对象为conn, String sqlUpdate=”UPDATE studet SET salary = ?, age=? WHERE name = ?”; 现要修改name=”东方人华”这个人的age=25,salary=3546.8, 写出用PreparedStatement 执行sqlUpdate语句的相关代码(按执行顺序) PreparedStatement ps=null; _ps= conn.prepareStatement(sqlUpdate) _______________; __ps.setDouble(1,3546.8) ________________________; __ps.setInt(2,25)___________________________; ___ps.setString(3,”东方人华”)_________________; int affectRow=ps.executeUpdate();//执行,并返回影响的行数 7.假设数组 PPM中存放过去100天某地大气污染指数,下列方法计算过去100天该污染指数 每天在10以上(含10),并且连续出现3天以上(含3天)的次数 //例如: int[] PPM={5,2,10,15,16,15,3,5,6,17,18,17,20,31,20}; 应当返回2 请将程序补充完整。 static public int PpmCount(int[] PPM) { final int PpmValue=10; //污染指数临界值 final int ConDays=3; //连续出现的天数界限值 int TempConDays=0; int GreatDays=0; //累计满足条件的天数 int Length=PPM.
1.进程中创建线程的限制
默认情况下,一个线程的栈要预留1M的内存空间,而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程,但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。
#include "stdafx.h"
#include <windows.h>
#include <process.h>
#include <assert.h>
volatile bool gbExitThread = false;
HANDLE ghDataEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
UINT WINAPI SubThread(void* ptr)
{
int nThreadID = *((int*)ptr);
nThreadID++;
SetEvent(ghDataEvent);
printf("%d线程启动/n", nThreadID);
int i = 0;
while(!gbExitThread)
{
Sleep(10000);
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
int nThreadCount = 10000;
HANDLE* phaThread = new HANDLE[nThreadCount];
int nErr = 0;
for(int i = 0; i < nThreadCount; i++)
{
phaThread[i] = (HANDLE)_beginthreadex(NULL, 0, SubThread, &i, 0, NULL);
if(phaThread[i] == 0)
{
nErr = GetLastError();
if(nErr == 8)
{
printf("
最近在做图像采集的工作,需要处理图像数据,所以学习了一下位图显示,而且只看了设备相关位图DDB。基本上实现了位图的显示、位图数据的处理等功能。这里就记录一下我自己的理解,不一定全都对,仅供参考而已。
要显示位图,需要做如下工作:
CStatic* pStatic=(CStatic*)GetDlgItem(IDC_DISPLAY2);
CDC* pDC=pStatic->GetDC();
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP2);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
dcCompatible.SelectObject(&bitmap);
CRect rect;
pStatic->GetClientRect(&rect);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(), &dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
程序中,创建了一个位图对象bitmap,bitmap.LoadBitmap(IDB_BITMAP2);将一幅位图加载到了bitmap这个对象中,按我的理解,这个对象是存在在内存中的,所以我们对这个对象的操作并不会对原来那幅位图有什么影响。另外,还定义了一个BITMAP结构:bmp。之所以定义这个结构,是为了获得位图的宽度、高度等图像信息,如果我们知道加载的位图的高度、宽度、一个像素占多少字节等信息,那么我们无需定义这个bmp结构,不过为了方便,还是定义一个的好。要显示位图,还要创建与当前DC兼容的DC,当前DC怎么获得?就是下面这两句:
CStatic* pStatic=(CStatic*)GetDlgItem(IDC_DISPLAY2);
CDC* pDC=pStatic->GetDC();
我要将位图在对话框中的静态文本控件中显示,因此定义了一个指向静态CStatic对象的指针,这样,当前DC就需要使用pStatic->GetDC();来获取。然后创建一个与当前DC兼容的DC: dcCompatible.CreateCompatibleDC(pDC);。这个DC创建了之后,就把内存中的位图对象bitmap选入这个DC:dcCompatible.SelectObject(&bitmap);,从而确定这个兼容DC的显示表面的大小。这里要搞清楚一个关系。做了以上各步骤之后,其实与那个位图对象已经没多少关系了,bitmap这个位图对象的相关信息已经在dcCompatible这个保存着了,而要显示的目标区域则由当前DC:pDC所指示出来,这也就是为什么要创建兼容DC,只有两个DC兼容,才能顺利的把图像从dcCompatible复制到pDC中进行显示。我们看到最后的那句
pDC->StretchBlt(0,0,rect.Width(),rect.Height(), &dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
实际上就是起到将dcCompatible中的图像在pDC的区域上显示的作用。这句话中还有有一个参数rect,它是一个CRect对象,用来得到客户区的大小,也就是我们所要显示的区域的大小,在这里也就是静态文本框,一个矩形的区域,所以调用pStatic的成员函数GetClientRect()来获取客户区域。
这样,一幅位图就显示了出来。上述这段程序是对话框中的一个按钮的响应函数。我之前看到有人说,要把画图程序放在OnDraw或者OnPaint之类的函数中去。我觉得其实放在哪里都无所谓,只要知道了要显示位图需要计算机做什么工作,就能顺利将位图显示出来。
学会显示位图之后,就得准备处理位图。做图像采集的时候,获得的是一个指向内存中一块区域的指针pData,这块区域中存储着图像的灰度值。而如果要处理加载的位图,也需要获取其位图数据的指针。因此两者的处理方法是差不多的。这里就以处理加载的位图为例进行说明。
要获取位图数据的指针,可以使用GetBitmapBits(),而要将处理后的数据COPY到位图对象中,则使用SetBitmapBits(),具体的用法可以查阅MSDN。我加载的位图是256色的,它的一个像素数据占4个字节,前三个字节分别表示RGB,第四个字节为保留字节。因此,如果这幅位图宽度是1000个像素,那么其字节宽度就是4000个字节。一般的图像处理都是针对灰度图像,也就是说一个像素的RGB值是相等的,从黑色(0,0,0)到白色(255,255,255)变化。因此,我处理图像的时候,只需要处理它的像素数据的代表R的字节,然后代表G和B的字节就都等于R的值就可以了。下面是代码:
BYTE *pmydata; //定义一个指针用来指向位图图像数据在内存中的存储区域
pmydata=new BYTE[bmp.bmWidthBytes*bmp.bmHeight]; //根据位图的高度宽度初始化一下
bitmap.GetBitmapBits(bmp.bmWidthBytes*bmp.bmHeight,pmydata); //将位图对象的数据COPY到pmydata指向的区域,bitmap是位图对象,bmp是位图结构,可参考上一篇文章的定义
for(int i=0;i<bmp.bmWidthBytes*bmp.bmHeight;i+=4) //这里只是将RGB三个字节的值取平均值,再取个反
{ //因为一个像素有4个字节,故i+=4
BYTE temp=0;
temp=(pmydata[i]+pmydata[i+1]+pmydata[i+2])/3;
pmydata[i]=255-temp;//R值
pmydata[i+1]=255-temp;//G值
pmydata[i+2]=255-temp;//B值
}
这样就实现了图像数据的简单处理,然后将处理的数据COPY回位图对象:
bitmap.SetBitmapBits(bmp.bmWidthBytes*bmp.bmHeight,pmydata); //将处理后的数据COPY进位图对象
随后按照上一篇文章的步骤显示位图即可。
另外要说一下,对于图像采集上来的灰度值数据,一个像素只有一个字节,而上面显示的图像的像素数据则是4个字节,这应该怎么来转换一下呢?我用的方法是定义一个COLORREF数组:
COLORREF* m_ColorData=new COLORREF[width*height];
这个COLORREF实际上就是DWORD,上面这句话定义了一个指向一块存放DWORD类型的数据的指针,也就是说,m_ColorData[i]与m_ColorData[i+1]之间有4个字节的距离,这正好与256色图像的像素数据存放方式相对应。将灰度值数据处理好之后,转化成RGB值:
//将灰度值转换为RGB值进行显示
for(i=0;i<width*height;i++) m_ColorData[i]=RGB( m_bytes[i], m_bytes[i], m_bytes[i]);
1. 什么是参照完整性?
——————–
参照完整性(完整性约束)是数据库设计中的一个重要概念,当数据库中的一个表与一个或多个表进行关联时都会涉及到参照完整性。比如下面这个例子:
文章分类表 - categories
category_id name
1 SQL Server
2 Oracle
3 PostgreSQL
5 SQLite
文章表 - articles
article_id category_id title
1 1 aa
2 2 bb
3 4 cc
可见以上两个表之间是通过category_id,其中categories表有4条记录,articles表有3条记录。
然而可能因为某种原因我们删掉了categories 表中category_id=4的记录,而articles表却还是有一条category_id=4的记录,很明显,category_id=4的这条记录不应该存在在articles表中,这样会很容易造成数据错乱。
相反,外键关系(Foreign Key relationships)讨论的是父表(categories)与子表(articles)的关系,通过引入外键(Foreign Key)这个概念来保证参照完整性(Referential integrity),将使会数据库变的非常简单。比如,要要做到删除categories表中category_id=4记录的同时删除 articles 表中category_id=4的所有记录,如果没有引入外键的话,我们就必须执行2条SQL语句才行;如果有外键的话,可以很容易的用一条SQL语句就可以达到要求。
2. 使用外键的条件
—————–
MySQL只在v3.23.34版本以后才引入外键的,所以在这之前的版本就别想了:),除此之外,还必须具备以下几个条件:
1) 在my.cnf配置文件中打开InnoDB引擎支持。
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/db/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/db/mysql/
innodb_log_arch_dir = /var/db/mysql/
form表单的method属性是用来指定提交方式的
提交方式有7种,常用的有POST,GET,HEAD
默认的提交方式是GET
,通过GET方式提交的数据会显示在地址栏里,通过GET方式只能提交不超过4K的数据。
POST不是默认的方式,必须指定,通过这种方式提交在地址栏是不显示提交数据的,提交的大小是不受限制的,如果要上传文件必须用POST方式
我们的HttpServlet他提高7个对应提交方式的do方法,用不同的方式提交就会自动去执行不同的方法,如果没有对应的do方法就会出405错误。
C#播放背景音乐通常有四种方式:
1.播放系统事件声音
2.使用System.Media.SoundPlayer播放wav
3.使用MCI Command String多媒体设备程序接口播放mp3,avi等
4.使用axWindowsMediaPlayer的COM组件来播放
1.播放系统事件声音
System.Media.SystemSounds.Asterisk.Play(); System.Media.SystemSounds.Beep.Play(); System.Media.SystemSounds.Exclamation.Play(); System.Media.SystemSounds.Hand.Play(); System.Media.SystemSounds.Question.Play(); 2.使用System.Media.SoundPlayer播放wav
System.Media.SoundPlayer sp = new SoundPlayer(); sp.SoundLocation = @"D:/10sec.wav"; sp.PlayLooping(); 3.使用MCI Command String多媒体设备程序接口播放mp3,avi等
using System.Runtime.InteropServices; public static uint SND_ASYNC = 0x0001; public static uint SND_FILENAME = 0x00020000; [DllImport("winmm.dll")] public static extern uint mciSendString(string lpstrCommand, string lpstrReturnString, uint uReturnLength, uint hWndCallback); public void Play() { mciSendString(@"close temp_alias", null, 0, 0); mciSendString(@"open ""E:/Music/青花瓷.mp3"" alias temp_alias", null, 0, 0); mciSendString("
目前,ADSL Modem+宽带路由器上网已成为很多办公室和家庭多机共享上网的首选方案。对于接线正常但只有一台电脑能上网的故障,很多用户都会感到困惑,不知如何去解决。下面以一典型案例向大家介绍解决方法。 一、网络结构 基本情况:ADSL Modem——中达通CT500、宽带路由器——TP LINK TL-R402M、两台安装有WindowsXP操作系统的电脑。 故障状况:在按照宽带路由器说明书连接好各设备,并进行参数设置后,仍然只有一台电脑能上网。 这里先说明一下整个网络的结构。如图所示,ADSL Modem用一根交叉网线连接到宽带路由器的WAN口,两台电脑分别用两根直通网线连接到宽带路由器的LAN口上。 为了方便叙述,我将两台客户端电脑称为PC A和PC B。连接好各设备后接通电源,发现只有PC B电脑能正常上网。观察ADSL Modem、宽带路由器和两台电脑,各个指示灯都正常指示,说明不存在硬件设备上的故障,于是我把主要精力放在路由器和电脑的网络参数设置上。 二、排查故障 1.为了通过WEB方式访问路由器,需要对IP地址进行设置。在PC A电脑上将IP地址设置为与TP LINK 宽带路由器的IP地址相同网段。查看说明书,TP LINK TL-R402M的默认IP地址为192.168.1.1,子网掩码为255.255.255.0。所以须要设置PC A电脑的IP地址为192.168.1.X(X 在2-254范围皆可,这里我设置为192.168.1.2),子网掩码设置为255.255.255.0,默认网关设置为192.168.1.1。 2.打开IE浏览器,输入http://192.168.1.1并回车,输入管理员账号和密码(这里的账号和密码都为admin),进入宽带路由器管理界面。选择“运行状态”菜单,这里显示了路由器LAN口和WAN口的状态情况,最主要的是“WAN口状态”项,该项是显示路由器与外部网络的通信状态,在该项下一定要显示IP地址、子网掩码、DNS服务器、网关等参数,同时在IP地址的右侧还应该显示上网方式(由于我这里是ADSL拨号上网,所以显示上网方式为PPPoE)。如果“WAN口状态”的各项参数都显示正常,表明宽带路由已经通过ADSL Modem拨号连接上了互联网。 3.通过前面的检查,宽带路由器处于正常工作状态,并且能够连接上ADSL Modem拨号上网。继续检查其余参数,发现其中“DHCP服务”已经设置为禁用,我们知道DHCP是动态主机配置协议的缩写,其意义在于提供DHCP 服务的设备有能力将合法的一定范围的IP地址动态分配给需要连接上网络的计算机。这里DHCP服务被设置为禁用,就要求连接上网络的电脑要通过路由器上网就必须要由我们手动分配IP地址。 关闭IE浏览器退出宽带路由管理界面。按上面的步骤1,在PC B这台电脑上设置IP地址与路由器同一网段(这里我设置为192.168.1.3)。在两台电脑上分别打开IE浏览器,发现仍然只有PC B这台电脑能上网。在PC A上用PING命令(ping 192.168.1.1)检查到路由器的连接,发现连接正常。 4.在PC A这台不能打开网页的电脑上,以前一直都是通过电信的PPPoE拨号软件拨号并输入用户名和密码上网的,当现在利用宽带路由器自动拨号上网后,以前的拨号软件就没有存在的必要了,那会不会是IE浏览器的默认连接仍然为以前的拨号连接引起了IE访问网页的故障呢?打开IE浏览器,选择“工具”菜单→“Internet选项”→选择“连接”,发现“拨号和虚拟专用网络设置”中有一项,这就是以前通过拨号软件上网的连接,现在不需要拨号软件连接了,将“拨号和虚拟专用网络设置”中的所有项删除。打开IE,输入地址,网页已经能顺利地在两台电脑中打开了。 总结:路由器的DHCP服务启用后,在客户端的电脑上就不能设置IP地址,而应该选择“自动获得IP地址”。否则,在客户端的电脑上就必须设置IP地址,并且要与宽带路由器的IP地址在同一网段,各客户端IP地址也不能冲突。使用过PPPoE拨号软件拨号上网的计算机,在IE设置中需要将“拨号和虚拟专用网络设置”中的项删除,避免IE使用原来的拨号连接打开网页。
//这个转载的东西,经我实验没有发现错误。就当学习了吧。
//我分析应该不会出错,因为编译器有一套维护cache的机制,否则不累死程序员了
#include <csl.h>
#include <csl_cache.h>
#include <csl_dat.h>
#include <stdio.h>
#pragma DATA_SECTION(external, "quickdata")
char external[352*416]; // 片外
#pragma DATA_SECTION(internal, "quickdata")
char internal[16 * 352]; // 片内
void main()
{
int i, j, id;
char x = 0;
CSL_init(); CACHE_clean(CACHE_L2ALL, 0, 0);
CACHE_setL2Mode(CACHE_128KCACHE); CACHE_enableCaching(CACHE_EMIFA_CE00);
CACHE_enableCaching(CACHE_EMIFA_CE01);
for(i = 0; i < 352 * 416;++i)
{
external[i] = (i & 0xff);
}
DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D);
id = DAT_copy2d(DAT_2D1D, &external[0], internal, 352, 16, 416);
osgi.console可以配置OSGi的控制台的端口,但是存在一个严重的安全问题。如果别人获知端口,直接可以操作服务。安全隐患巨大。 Windows下还好直接配置osgi.console为空,这样没有端口绑定,直接在cmd里面操作,安全得到保证。 但是Linux下就麻烦了,因为Linux下必须绑定一个端口,否则telent的session就不能关闭。不得已只能使用iptables,使用iptables限定只能通过127.0.0.1访问,其他的IP访问全部丢弃。从网上找到了下面的命令行: iptables -A INPUT -p tcp -s 127.0.0.1 --destination-port 12300 -j ACCEPT iptables -A INPUT -p tcp --destination-port 12300 -j DROP 经过测试完全OK!!!
必备技能9.3:为函数传递对象作为参数
对象可以像其它类型的数据一样被作为参数传递给函数。对象传递给函数的时候采用的是C++传统的值传递方式。这就意味着是把对象的一个副本,而不是对象本身传递给函数的。因此,在函数内部对参数所做的修改都不会影响到传递到函数中的实参。下面的程序就演示了这一点:
//传递对象作为函数的参数 #include <iostream> using namespace std; class MyClass { int val; public: MyClass(int i) { val = i; } int getval() { return val; } void setval(int i) { val = i; } }; void display ( MyClass ob ) { cout << ob.getval() << '\n'; } void change(MyClass ob) { ob.setval(100) ; //对传入的实参没有作用 cout << "Value of ob inside change(): "; display( ob ); } int main() { MyClass a(10); cout << "
转自网络
Windows下搭建基于Red5+openmeetings的统一协作系统
一、安装准备:
OpenMeetings是一个多语言可定制的视频会议和协作系统。它支持音频、视频,支持共享左面,文件协作处理,它还包含一个白板,通过白板可以导入各种格式的图片。它基于OpenLaszlo的新流媒体格式和开源的Flash服务器Red5。最重要的,它基于LGPL)开源协议,所以,搭建这样一个平台是完全自由免费的,Red5是基于java的开源流媒体服务器,所以在安装前必须先安装java。
1.下载JDK:
官网下载地址为:http://java.sun.com/javase/downloads/index.jsp。
2.安装:
安装的时候注意安装路径中不要出现空格,默认的会安装在c:/program file中,但是“program file“中有空格,在后面安装red5时会出错,所以最好不要默认安装,可以自定义安装在c:/java中。其它的一路“下一步”即可。
3.配置:
“我的电脑”à右键“属性”à“高级”à“环境变量”在“系统变量”中①添加“JAVA_HOME”和“CLASSPATH”两个变量(大小写无所谓)value值分别为:“JAVA_HOME” value:c:/java/jdk1.6.17(这里是我的计算机上JAVA的安装路径,根据实际情况更改)、 “CLASSPATH”value:.;%JAVA_HOME%/jre/lib/rt.jar(注意前面的“.;”必须有);②修改“PATH”变量,在后面加上“;%JAVA_HOME%/bin”(注意前面的“;”)。
4.测试安装结果:
在“命令提示符”界面下输入#java –version 如能看到版本信息证明安装成功,可以进行下一步了。
如果仅仅是做流媒体视频服务器的话安装上red5就可以了,如果做统一协作系统,还需要下载安装mysql(提供数据库服务支持)openmeetings(开源视频会议系统)、SWFtool(将PDF文档转化成FLASH文档)、ImageMagick(图片格式转换)、Ghostscript(PDF文件转换打印)、openoffice(文档共享)下载地址分别:
Mysql:http://dev.mysql.com/downloads/mysql/5.0.html
Openmeetings:http://code.google.com/p/openmeetings/downloads/list
Swftool:http://www.swftools.com/index.php
ImageMagick:http://www.imagemagick.com.cn/
Ghostscript :http://www.ghostscript.com/
Openoffice:http://zh.openoffice.org/new/index.html
二、安装插件准备环境:
1.安装Mysql:
一路“下一步”即可,注意此处如果修改了mysql默认的监听端口的话,在后面的openmeetings安装过程中也需要更改。安装完成后建立openmeetings数据库(不用建表)注意编码必须是UTF-8格式。
2.安装ImageMagick:
一路“next”即可。
3.安装Ghostscript:
也是一路“next”即可。
4.安装Swftool:
注意安装路径中也不能出现空格,否则在以后测试“文档共享功能”时会出错,建议安装路径设为c:/swftool 或其它,然后一路“next” 即可。
5.安装openoffice:
也是一路“next”即可,安装后在命令提示符界面输入
soffice.exe-headless-nologo-norestore-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager
使其监听8100端口。然后再输入netstat –anp tcp如果在显示的列表中能找到TCP 127.0.0.1:8100 0.0.0.0:0 LISTENING,则表明启动成功。
三、安装openmeetings:
1.安装完以上软件后,解压缩下载的openmeetings压缩包,修改openmeetings/webapps/openmeetings/conf 下的mysql_hibernate.cfg.xml
<hibernate-configuration>
<!-- a SessionFactory instance listed as /jndi/name -->
<session-factory> <!-- User / Password -->
<property name="connection.username">root(Mysql数据库用户名)</property>
<property name="connection.password">******(Mysql数据库密码)</property>
<!-- Database Settings -->
1、一个老太太临死前,拉着老伴的手忏悔:“老头子,我跟你讲实话吧,我们那三个儿子,都不是你的。” 老头子听罢宽慰老伴说:“没事,虽然三个儿子不是我的,但三个孙子肯定是我的……”
2、女孩说:我怀孕了。男人继续低头吃饭,说:我早结扎了。 女孩楞了一会:我和你开玩笑呢。男人抬起头看了她一眼,喝了口水说:我也是。
3、王子路遇一个乞丐,发现和自己长得很像!王子非常鄙视的问乞丐:“你妈曾经在宫里当过宫女吧?”乞丐愤怒回答道:“不,我妈没进过宫,不过我爸以前是宫里的车夫!
4、下课的时候,买了一个梅子罐头,反正就是罐头里的汤是红色的,好像血哦。我喝不下去,就把里边的梅子吃了,罐头汤给男友喝了。我问:“好喝么?”“恩。”这家伙擦擦嘴,然后问我:“下个月还有么?”
5、话说本人向一朋友请教怎么向喜欢的女孩子表白,朋友说了句“这还不简单,说一句我爱你”我说:“这么俗, 她能接受吗?”“朴实无华才好嘛,不接受才SB 呢?”我说“那好,请接受我对你的表白,我爱你”……
6、老师说:“一个长来一个短,一个快来一个慢,短的生来懒得动,长的忙得团团转。猜猜看,这是什么?” 汤姆说:“爸爸和妈妈。”
7、厨师亲切地对猪说:“你想被怎样吃掉?不要怕,百花齐放,百家争鸣,畅所欲言嘛。” 猪:“其实吧。。。我并不想被吃掉。” 厨师:“你看,说跑题了吧?” 猪:。。。
8、每天最开心的事情就是早晨看着老婆抹了化妆水啪啪的拍自己的脸,“啪啪”,“啪啪”,“啪啪”,听了太爽了,我边听边心里默念“叫你让我洗袜子,叫你让我接孩子,叫你不让我喝酒,叫你不叫我玩游戏,打,打,给我使劲打!”
1、八戒很伤心地问唐僧:“师父,我是不是世界上最丑的?”唐僧无奈答道:“不知道,你去问观音吧。”一会儿,八戒开心的回来了,笑眯眯的问:“师父,那个凤姐是谁啊?”
2、有个病人请教医师关于手脚冰冷的问题。
医师:“当我觉得手脚冰冷时,就会抱着我的妻子, 于是就会热起来,觉得温暖….” 病人:“这倒是一个值得一试的方法…. 那….请问尊夫人什么时候比较方便呢?”
3、办公室里,女同事问男同事:“你说,是不是男人结了婚就完蛋了?”男同事听后一愣,回答道:“不知道,不过你跟我结了婚,以后你就可以玩蛋了!
4、我将单车停在一个车棚里,回来的时候车没了,只看到车锁被丢在一边,锁没坏,还能用,我觉得车锁扔掉挺可惜,于是将车锁锁在别人的自行车上就走了。
5、大一上高数课,那是公共课所以我们是大教室,有一次我们教室没有粉笔了,遂叫一同学去隔壁拿点来用,于是后排男生就出去,几秒钟后他出现在我们教室前门” 老师,给我点粉笔。。。”石化的老师:哦,别的教室没粉笔是是吧。 那你回去吧,然后他从前面出去后门进来:老师,别的教室也没有~
6、乞丐来吝啬鬼家门前乞讨。 乞丐:“请给一小块肉。” 吝啬鬼:“没有呀!” 乞丐:“面包屑也行。” 吝啬鬼:“也没有。” 乞丐:“那就给口水喝吧!” 吝啬鬼:“我们连水也没有了。” 乞丐发怒了:“那你为什么还坐在家里?快跟我一起要饭去!”
7、病人对精神病医生说:“我一直觉得我是一只鸟” 医生:“噢,那很严重,从什么时候开始的?” 病人:“从我还是一只小鸟的时候”
8、我花一毛钱发这条短信给你,是为了告诉你——我并不是一个一毛不拔的人。比如这一毛钱的短信就是我送你的生日礼物。
OracleDBConsoleorcl 这个是采用浏览器使用的oracle企业管理器
OracleOraDb10g_home1iSQL*Plus 是isql*plus的服务,要使用isqlplus,必须开启该服务,其它的服务见下面
如果只用cmd中的sqlplus管理oracle的话,必须的就一个OracleServiceORCL 要是还要其它的至少两个:OracleServiceORCL OracleOraDb10g_home1TNSListener 一个数据库服务器,一个监听器(等待客户端工具来连接数据库的程序)
(1)OracleServiceSID 数据库服务,这个服务会自动地启动和停止数据库。如果安装了一个数据库,它的缺省启动类型为自动。服务进程为ORACLE.EXE,参数文件initSID.ora,日志文件SIDALRT.log,控制台SVRMGRL.EXE、SQLPLUS.EXE。 (2)OracleHOME_NAMETNSListener
监听器服务,服务只有在数据库需要远程访问时才需要(无论是通过另外一台主机还是在本地通过 SQL*Net 网络协议都属于远程访问),不用这个服务就可以访问本地数据库,它的缺省启动类型为自动。服务进程为TNSLSNR.EXE,参数文件 Listener.ora,日志文件listener.log,控制台LSNRCTL.EXE,默认端口1521、1526。 (3)OracleHOME_NAMEAgent
OEM代理服务,接收和响应来自OEM控制台的任务和事件请求,只有使用OEM管理数据库时才需要,它的缺省启动类型为自动。服务进程为DBSNMP.EXE,参数文件snmp_rw.ora,日志文件nmi.log,控制台LSNRCTL.EXE,默认端口1748。 (4)OracleHOME_NAMEClientCache 名字缓存服务,服务缓存用于连接远程数据库的Oracle Names 数据。它的缺省启动类型是手动。然而,除非有一台Oracle Names 服务器,否则没有必要运行这个服务。服务进程为ONRSD.EXE,参数文件NAMES.ORA,日志文件ONRSD.LOG,控制台 NAMESCTL.EXE。 (5)OracleHOME_NAMECMAdmin 连接管理服务,是构建Connection Manager服务器所用,只有服务器作为Connection Manager才需要,它的缺省启动类型是手动。服务进程为CMADMIN.EXE,参数文件CMAN.ORA,日志文件CMADM_PID.TRC,控制台CMCTL.EXE,默认端口1830。 (6)OracleHOME_NAMECMan 连接网关服务,是构建Connection Manager服务器所用,只有服务器作为Connection Manager才需要,它的缺省启动类型是手动。服务进程为CMGW.EXE,参数文件CMAN.ORA,日志文件CMAN_PID.TRC,控制台 CMCTL.EXE,默认端口1630。 (7)OracleHOME_NAMEDataGatherer
性能包数据采集服务,除非使用Oracle Capacity Planner 和 Oracle Performance Manager,否则不需要启动,它的缺省启动类型是手动。服务进程为VPPDC.EXE,日志文件alert_dg.log,控制台 vppcntl.exe。 (8)OracleHOME_NAMEHTTPServer
Oracle 提供的WEB服务器,一般情况下我们只用它来访问Oracle Apache 目录下的Web 页面,比如说JSP 或者modplsql 页面。除非你使用它作为你的HTTP服务,否则不需要启动(若启动它会接管IIS的服务),它的缺省启动类型是手动。服务进程为APACHE.EXE,参数文件 httpd.conf,默认端口80。 (9)OracleHOME_NAMEPagingServer
通过一个使用调制解调器的数字传呼机或者电子邮件发出警告(没试过),它的缺省启动类型是手动。服务进程PAGNTSRV.EXE,日志文件paging.log。 (10)OracleHOME_NAMENames
Oracle Names服务,只有服务器作为Names Server才需要,它的缺省启动类型是手动。服务进程NAMES.EXE,参数文件NAMES.ORA,日志文件NAMES.LOG,控制台NAMESCTL.EXE,默认端口1575。 (11)OracleSNMPPeerMasterAgent
SNMP服务代理,用于支持SNMP的网管软件对服务器的管理,除非你使用网管工具监控数据库的情况,否则不需要启动,它的缺省启动类型是手动。服务进程为AGNTSVC.EXE,参数文件MASTER.CFG,默认端口161。 (12)OracleSNMPPeerEncapsulater
SNMP协议封装服务,用于SNMP协议转换,除非你使用一个不兼容的SNMP代理服务,否则不需要启动,它的缺省启动类型是手动。服务进程为ENCSVC.EXE,参数文件ENCAPS.CFG,默认端口1161。 (13)OracleHOME_NAMEManagementServer
OEM管理服务,使用OEM时需要,它的缺省启动类型是手动。服务进程为OMSNTSVR.EXE,日志文件oms.nohup。 一个个解释就不知道了,重要的几个
OracleOraDb10g_home1iSQL*Plus isqlplus服务,开启这个服务你才可以使用isqlplus
OracleOraDb10g_home1TNSListener --tnslistener服务,必须开启,否则系统不能识别你的oracle,也就是像windows的网络连接一样
OracleServiceORCL--oracle服务,你的实例名应该是orcl,必须开启
Microsoft 环回适配器是一种可用于在虚拟网络环境中进行测试的工具,在这样的环境中无法访问网络。另外,如果存在与网络适配器或网络适配器驱动程序的冲突,则必须使用环回适配器。可以将网络客户端、协议和其他网络配置项目绑定到环回适配器上,而网络适配器驱动程序或网络适配器可在稍后仍保留着网络配置信息时安装。环回适配器也可以在无人参与安装过程中安装。
手动安装 <script type="text/javascript"></script> 要在 Windows XP 中手动安装 Microsoft 环回适配器,请按照下列步骤操作: 单击“开始”,然后单击“控制面板”。 如果您在经典视图中,请单击左窗格中的“控制面板”下的“切换到分类视图”。 双击“打印机和其它硬件”,然后单击“下一步”。 在左窗格中的“请参阅”下,单击“添加硬件”,然后单击“下一步”。 单击“是,我已经连接了此硬件”,然后单击“下一步”。 在列表的底部,单击“添加新的硬件设备”,然后单击“下一步”。 单击“安装我手动从列表选择的硬件”,然后单击“下一步”。 单击“网络适配器”,然后单击“下一步”。 在“制造商”框中,单击“Microsoft”。 在“网络适配器”框中,单击“Microsoft 环回适配器”,然后单击“下一步”。 单击“完成”。 成功安装该适配器后,与其他任何适配器一样,您可以手动配置其选项。如果 TCP/IP 属性配置为使用 DHCP,则该适配器最终将使用一个 autonet 地址 (169.254.x.x/16),因为该适配器并没有与任何物理媒体实际相连接。
Oracle10g安装以前检查先决条件"Microsoft LoopBack Adapter配置为系统的主网络适配器"的问题解决 很早以前就装过,好像也遇到过类似问题,当时没管他,直接点下一步了,这次得认真点了,不然以后因为安装的问题惹麻烦就不值得了。 安装时,提示 正在检查网络配置需求... 检查完成。此次检查的总体结果为: 未执行 <<<< 建议案: Oracle 支持在具有 DHCP 分配的 IP 地址的系统上进行安装。但在安装之前, 必须将 Microsoft LoopBack Adapter 配置为系统的主网络适配器。有关在配置有 DHCP 的系统上安装软件的详细信息, 请参阅 Installation Guide。 原因,我的机器IP是自动获取的,即IP是路由器使用DHCP动态分配的。 下面找到的解决方案 安装oracle10g前,控制面板-添加硬件-选“是,我已经连接了此设备”点击下一步-在列表中选择添加新的硬件设备-选“安装我充从手动。。。”-接下来的列表中选择 “Microsoft loopback adapter ” 并将此网络连接设置为固定IP如 192.168.0.xxx,完事儿了再安装oracle 10g。 这时出现一个假的本地连接,不停的在获取IP,其实没用,只是能让racle通过检验(具体为什么我也在找,可是没有满意回答的话贴出来),设置一个固定的ip,哈哈,去监测吧,保证通过!!
当写成两遍或以上的Write()给服务端接收有可能只能接收到一条信息,即下面的“客户端数据提交1/n”,应在服务端的接收段和客户端接收段编写相应延时代码,以达到数据完全接收。
Server Code:
while (!done)
{
TcpListener listener = new TcpListener(8000);
listener.Start();
byte[] bytes = new byte[1024];
int bytesRead = 0;
TcpClient client = new TcpClient();
NetworkStream ns = null;
Console.Write("正在侦听端口...");
client = listener.AcceptTcpClient();
Console.WriteLine("/n处理连接请求...");
ns = client.GetStream();
bytes = new byte[1024];
//延时获取全部数据
Delay(0.1);//
bytesRead = ns.Read(bytes, 0, bytes.Length);
Console.WriteLine(Encoding.BigEndianUnicode.GetString(bytes,0,bytesRead));
.....
}
Client Code:
TcpClient client=new TcpClient("192.168.8.88",8000); NetworkStream ns=client.GetStream(); byte[] byteTime=Encoding.BigEndianUnicode.GetBytes("客户端数据提交1/n"); ns.Write(byteTime,0,byteTime.Length); ns.WriteTimeout = 10;
byte[] clientIp = Encoding.BigEndianUnicode.GetBytes("客户端数据提交2/n客户端IP地址:" + Request.