一 : 激光陀螺在军事上有什么应用?
激光陀螺在军事上有什么应用?
激光陀螺在军事上有什么应用?
激光陀螺是最新出现的一种陀螺,它的基本原理是:使用环形激光器使之在惯性空间转动,产生正反两种激光束,激光束随惯性转动产生拍频效应,从而达到陀螺仪所要求的各种稳定和转速指标。激光陀螺与传统的机电陀螺相比,最大的特点是不需要转动部件,所以耐冲击力强,坚固可靠,使用寿命较长。由于接通电源就能产生激光,所以不存在怠速反应,起动时间短,而且运行过程中的稳定性好。激光陀螺的结构十分简单,功耗很小,易于维护,造价低廉。最重要的一点,就是激光陀螺能够直接输出数字控制信号,而不是像以前那样先输出模拟信号,再将其转换为数字信号。能够直接输出数字信号,就能够直接与计算机系统相连,这对于实现自动化或智能化控制非常重要。
??一般情况下,航空平台或精确制导武器常用的精确导航器件主要是全球导航定位系统(GPS)和惯性导航系统(INS)。激光陀螺出现之后,成为新一代航空器、导弹、灵巧炸弹等测控系统的核心部件。
??激光陀螺捷联系统应用于火箭系统之后,效能明显提高。过去,由于箭机运算速度的限制,无法精确计算火箭的实时速度和位置,只能将大量的数据处理工作放在地面进行,给设计和事后报轨带来大量的工作。采用激光陀螺之后,在飞行过程中,不断地计算火箭的实时速度和位置,利用实时速度、位置进行火箭制导方程的运算,以控制火箭沿标准弹道飞行,将载荷送入预定的轨道,从而简化了设计,达到了快速报轨的要求。
??巡航导弹或精确制导炸弹通常采取复合式制导方式,常见的复合式制导又多为GPS/INS。1999年5月8日美国B-2A隐身战略轰炸机袭击我驻南使馆使用的联合直接攻击弹药(JDAM),就是采用GPS/INS制导的GBM-31精确制导炸弹。海湾战争期间美军使用的“战斧”巡航导弹则是采用的惯性+地形匹配+景像匹配复合制导方式。
??GPS全球定位系统由于具有不可替代的高性能,所以仍将是未来精确制导武器的主要制导方式。但是,与之相匹配的其它制导方式,随着技术的不断进步将有所改变,激光陀螺就是一个范例。从1998年开始,美国“战斧”式巡航导弹开始改进制导系统和任务规划系统。其中,惯性导航系统开始选用环形激光陀螺代替传统的机械陀螺,不再采用地形匹配制导方式,而是采用抗干扰性能更好的GPS接收机,装一台前视电视摄像机或红外成像装置,以提高目标捕获和毁伤判定能力,从而将任务规划时间从过去的十几天缩短到一个小时左右。
??美国在激光陀螺的研制及应用方面始终居世界领先地位,目前已经在很多高技术武器装备中将其与GPS制导系统联合使用。F-15E对地攻击战斗机的LN-93型惯导装置中采用了LG-9028型环形激光陀螺,B-52战略轰炸机也正在把陈旧的惯性导航系统改进为环形激光陀螺惯性导航系统。
??日本在引进美国速率捷联控制系统以后,开始在自行研制的运载火箭上使用全惯性控制技术,提高卫星的入轨精度。在TR1和M5火箭上,率先使用了光导纤维构成光路的激光陀螺,组成了不仅适用于火箭也适用于导弹的高精度、简单可靠的控制系统。高精度固体空间运载火箭的研制成功,说明日本已经具备研制洲际弹道导弹的能力。
??英国皇家海军的三艘新型“机敏”级攻击型核潜艇将分别装备2套改进型北约船用惯性导航系统,该系统采用了环状激光陀螺系统。该惯导系统将于今年底开始装配,能为武器控制和作战管理系统提供精确的导航数据及姿态方位数据。此外,英国AS90式自行榴弹炮也选用了美国霍尼韦尔和辛格两公司联合制造的组合式定向定位系统,它的核心部分是一个环形激光陀螺。该装置能自动测地和自动校准,随时准确地测出炮车自身的位置和方向。因此,装有惯性动态基准装置的AS90式自行榴弹炮,可以取消为一般自行火炮配备的测地器材和测地分队。惯性动态基准装置解决了火炮的测地和校准问题,再加上炮塔控制计算机和外部通信设备,每门自行榴弹炮就成了一个完整的射击单位,大大提高了火炮在战场上的独立作战能力和快速反应能力,并将导致火炮使用原则的改变。瑞士120毫米迫击炮系统中也装有激光陀螺导航与定位系统,在发射时自动提供精确的方位和武器定位。
??俄罗斯在激光陀螺的研制方面也处于较为先进的水平,目前主要应用于作战飞机和弹道导弹的制导与控制。俄罗斯S-37飞机使用了数字式多通道自动控制设备,一体化自动指挥和导航系统。在导航系统中,激光陀螺仪惯性导航系统成为核心组件。这种系统还广泛应用于苏-30MK、苏-32FN和苏-34战斗机等多种飞机上。印度空军引进的俄制飞机或自行研制的轻型战斗机上也装有环形激光陀螺导航仪。
??随着激光陀螺与GPS制导装置在一系列高技术武器装备中的推广使用,武器装备的精确程度将日益提高,从而使未来作战样式出现一系列重大变化,精确战、远战、非接触作战将成为主要的作战样式。
二 : PHPWrapper在SAE上的应用
PHP Wrapper在SAE上的应用一、PHP Wrapper是什么
自PHP4.3开始,PHP开始允许用户通过stream_wrapper_register()自定义URL风格的协议。用户使用fopen(),copy()等文件系统函数对封装协议进行操作时,PHP会调用注册协议时所提供的类中相应的函数。
PHP手册中给了一个例子,它将VariableStream类注册为var://协议,通过这个协议,用户可以使用文件系统函数直接读写全局变量。例如,用户可以通过“var://foo” 读写 $GLOBALS['foo'] 。二、SAE为什么需要PHP Wrapper
出于性能和安全方面的考虑,SAE平台上禁用了本地文件读写和对外的数据抓取。相应的,我们提供了对应的服务来做同样的事情。
由于新服务的接口和PHP本身的接口不太一样,专门为我们平台开发的程序当然不会存在问题,但是大量已有的程序和开源项目,就面临着繁杂的迁移工作。而使用PHPWrapper对我们的服务的接口进行封装之后,用户就可以更方便地将程序迁移到SAE平台。三、如何写PHP Wrapper
要通过PHP Wrapper封装一个协议,首先,我们需要写一个 streamWrapper 类,类名可自定义,类的格式为:streamWrapper {
public resource $context ;
__construct ( void )
public bool dir_closedir ( void )
public bool dir_opendir ( string $path , int $options )
public string dir_readdir ( void )
public bool dir_rewinddir ( void )
public bool mkdir ( string $path , int $mode , int $options )
public bool rename ( string $path_from , string $path_to )
public bool rmdir ( string $path , int $options )
public resource stream_cast ( int $cast_as )
public void stream_close ( void )
public bool stream_eof ( void )
public bool stream_flush ( void )
public bool stream_lock ( mode $operation )
public bool stream_open ( string $path , string $mode , int$options , string &$opened_path )
public string stream_read ( int $count )
public bool stream_seek ( int $offset , int $whence = SEEK_SET)
public bool stream_set_option ( int $option , int $arg1 , int $arg2)
public array stream_stat ( void )
public int stream_tell ( void )
public int stream_write ( string $data )
public bool unlink ( string $path )
public array url_stat ( string $path , int $flags )
}
类中各方法说明:
streamWrapper::__construct — 构造函数,仅在stream_open前被调用
streamWrapper::dir_closedir — 关闭目录句柄,响应closedir()函数
streamWrapper::dir_opendir — 打开目录句柄,响应opendir()函数
streamWrapper::dir_readdir — 从目录句柄读取条目,响应readdir()函数
streamWrapper::dir_rewinddir — 倒回目录句柄,响应rewinddir()函数
streamWrapper::mkdir — 创建目录,响应mkdir()函数
streamWrapper::rename — 目录或文件重命名,响应rename()函数
streamWrapper::rmdir — 删除目录,响应rmdir()函数
streamWrapper::stream_cast — 检索基础资源,响应stream_select()函数
streamWrapper::stream_close — 关闭资源,响应fclose()函数
streamWrapper::stream_eof — 检查文件指针是否已经在文件末尾,响应feof()函数
streamWrapper::stream_flush — 清除输出缓存,响应fflush()函数
streamWrapper::stream_lock — 咨询文件锁定,响应flock()函数
streamWrapper::stream_open — 打开文件或URL为流,响应fopen()函数
streamWrapper::stream_read — 从流中读取内容,响应fread(), fgets()函数
streamWrapper::stream_seek — 在流中定位指针,响应fseek()函数
streamWrapper::stream_set_option — 改变流设置
streamWrapper::stream_stat — 检索文件资源的信息,响应fstat()函数
streamWrapper::stream_tell — 检索流中指针的位置,响应ftell()函数
streamWrapper::stream_write — 向流中写入内容,响应fwrite(), fputs()函数
streamWrapper::unlink — 删除文件,响应unlink()函数
streamWrapper::url_stat — 检索文件的信息,响应所有stat()相关的函数,例如file_exists(),is_dir(), is_file(), filesize(), fileinode()等等详细说明请参考PHP手册:http://cn2.php.net/manual/en/class.streamwrapper.php写好streamWrapper类之后,使用stream_wrapper_register () 将这个类注册到Wrapper中,就可以开始使用了。函数使用方法为:
bool stream_wrapper_register ( string $protocol , string $classname[, int $flags = 0 ] )
例如:
stream_wrapper_register("saemc", "SaeMemcacheWrapper");由于SAE平台不支持对本地文件的写操作,因此Smarty之类的一些需要在本地写文件的开源项目就没办法直接在SAE平台上使用,而有了saemcWrapper,用户就可以将Smarty编译的模板保存在MC中,很方便的将Smarty迁移到SAE平台上来。
在附件中我们为大家提供了SAE上Memcache Wrapper的实现代码,大家可以下载此附件进行测试。
在测试之前,需要先在本地启动一个端口为22222的Memcached服务:
memcached -m 10 -p 22222 -u nobody -l 127.0.0.1
然后使用下面代码就可以测试了://包含附件代码,注册saemc Wrapper
include_once('wrapper.php');//测试 saemc Wrapper
$fp = fopen( "saemc://test.txt", "w+" ) or die("fopenfaild!");fwrite( $fp, "line1(www.61k.com)\n" ) ordie("fwrite line1 faild!");
fwrite( $fp, "line2\n" ) or die("fwrite line2 faild!");
fwrite( $fp, "line3\n" ) or die("fwrite line3 faild!");var_dump(ftell($fp));
fseek( $fp, 0 );
while ( !feof( $fp ) ) {
$c = fgets( $fp ) or die("fgets faild!");
var_dump($c);
}
fclose( $fp );var_dump(file_get_contents("saemc://test.txt"));
var_dump(file_put_contents("saemc://path/test.txt", "helloworld!\n"));
var_dump(file_put_contents("saemc://path/test.txt", "helloworld!\n", FILE_APPEND));
var_dump(file_get_contents("saemc://path/test.txt"));
var_dump(copy("saemc://path/test.txt","saemc://path/test_new.txt"));
var_dump(file_get_contents("saemc://path/test_new.txt"));
var_dump(unlink("saemc://path/test.txt"));
var_dump(file_get_contents("saemc://path/test.txt"));
var_dump(rename("saemc://path/test_new.txt","saemc://path/test.txt"));
var_dump(file_get_contents("saemc://path/test.txt"));
echo "====test include====\n";
include_once("saemc://path/test.txt");测试页面的输出结果:
int(18)
string(6) "line1
"
string(6) "line2
"
string(6) "line3
"
string(18) "line1
line2
line3
"
int(13)
int(13)
string(26) "hello world!
hello world!
"
bool(true)
string(26) "hello world!
hello world!
"
bool(true)
bool(false)
bool(true)
string(26) "hello world!
hello world!
"
====test include====
hello world!
hello world!
我们提供的 MemcacheWrapper并没有实现目录操作的一些方法和Memcache的Timeout,大家可以参考PHP手册,尝试实现目录操作,或者通过context使这个Wrapper支持Memcache的Timeout。
另外,大家可以到下面这个地址查看SAEStdlib中sae_include的源码,在其中还有我们为Storage服务封装的saestorWrapper和为Fetchurl服务重新封装的http Wrapper的实现:
http://stdlib.sinaapp.com/?f=sae_include.function.php四、写Wrapper时的一些注意事项
1. 构造函数
streamWrapper类很特别,它的构造函数并不是每次都调用的。只有在你的操作触发了stream_open相关的操作时才会调用,比如你用file_get_contents()了。而当你的操作触发和stream无关的函数时,比如file_exists会触发url_stat方法,这个时候构造函数是不会被调用的。2. 读实现
Wrapper里边有Position和Seek等概念,但是很多服务其实是一次性就读取全部数据的,这个可以在stream_open的时候一次性读回,放到一个属性中,以后seek和tell的时候直接操作属性里边存放的数据就可以了。3. 追加写实现
有很多服务是一次性写入所有数据,不支持追加写的功能(比如Memcache),这就需要我们自己在Wrapper中来实现追加写。可以将整个value一次性读取出来,将需要追加写的数据追加在读取出来的内容后面之后,再一次性写回。
但是这种追加写的实现方式性能会比较差,尤其是内容体积较大之后,一次性读取所有内容会非常消耗资源,因此在某些服务中我们不得不舍弃对追加写的支持。4. url_stat的实现
在streamWrapper类的实现中,url_stat的实现是个难点。必须正确的实现url_stat才能使is_writable和is_readable等查询文件元信息的函数正常工作。
而我们需要为我们的虚设备伪造这些值。以mc为例,我们给大家一些参考数据:url_stat应该返回一个数组,分13个项,内容如下:
dev 设备号 - 写0即可;
ino inode号 - 写0即可;
mode 文件mode - 这个是文件的权限控制符号,稍后详细说明;
nlink link - 写0即可;
uid uid - Linux上用posix_get_uid可以取到,windows上为0;
gid gid - Linux上用posix_get_gid可以取到,windows上为0;
rdev 设备类型 - 当为inode设备时有值;
size - 文件大小;
atime - 最后读时间 格式为unix时间戳;
mtime - 最后写时间;
ctime - 创建时间;
blksize - blocksize of filesystem IO 写零即可;
blocks - number of 512-byte blocks allocated 写零即可;其中mode的值必须写对:
如果是文件,其值为:
0100000 + 文件权限,如 0100000 + 0777。
如果是目录,其值为:
040000 + 目录权限,如 0400000 + 0777。5. 关于stat的缓存
PHP会在同一个页面的执行过程中对文件的元信息进行缓存。
根据PHP文档对 clearstatcache() 这个方法的说明得知:在使用 stat(), lstat(),file_exists(), is_writable(), is_readable(), is_executable(),is_file(), is_dir(), is_link(), filectime(), fileatime(),filemtime(), fileinode(), filegroup(), fileowner(), filesize(),filetype(), 或 fileperms() 方法查询文件信息时,PHP会将文件的stat的缓存以提高性能。clearstatcache()方法可以用来清除这个缓存,当unlink()会自动清除stat缓存。
而实际上,PHP只有在对本地文件进行unlink,rename和rmdir操作时会清除stat缓存,而在通过其他的wrapper进行unlink,rename和rmdir操作时,并不会清除stat缓存。因此在写wrapper时我们要自己在unlink等方法中通过clearstatcache()来清除stat缓存。附件下载地址: http://apidoc-demo.stor.sinaapp.com/wrapper.php
三 : 与网友在网上谈军事
与网友在网上谈军事
(2008年)
这是我在五年前与网友在网上的对话,也许有一些现实意义:
朋友:你好,兵妹妹。很荣幸成为朋友。我对军事、历史比较感兴趣。有时间可以讨论一些问题。你是当的哪个兵种?
海虹:我是海军,欢迎常来!
朋友:好的。海虹妹妹。你现在还经常上舰船吗?海虹?你是军医?现在是什么军衔了?( 文章阅读网:www.61k.com )
海虹:我不是军医,海军上校军衔。
朋友:海虹认为我们现在面临的军事危机大吗?我们现在是否能够游刃的应对来自周边及美国的军事威胁?我非常敬重坦然面对死亡的军人。向海虹妹妹致敬!!!
海虹:我相信我军有能力对付来自各方的挑战,我相信我军官兵依然有为国捐躯的战斗意志!
朋友:我也这样认为,美眉。看了今年的阅兵,我认为我军还有解放战争时期的严明的纪律。我非常认同这样的军队,我为我们的军队骄傲。
海虹:谢谢!
朋友:海虹上校。很高兴有你这样的高干妹妹,真的是非常荣幸!!哈。。你上吗?有时间上聊
海虹:对不起!我不用
朋友:你现在工作吗?在线不忙的话,聊聊。。。
你的座右铭“大道至简,大医至爱;适者有寿,仁者无敌!”
我的座右铭“中庸之道,太极之风;适者生存,勇者必胜!”
海虹:我们各有千秋!
朋友:参考愚兄的才还没法和你比。我只是对救世之道有些兴趣。才能菲薄,才疏学浅。
海虹:天下兴亡匹夫有责!
朋友:此言有理。作为一百姓,感谢保家卫国的兵妹妹等卫士保卫祖国的贡献。
海虹:谢谢!
朋友:早上好,上校。飞人向您报到,请指示!".
近期有出海巡防任务吗?可以再发一些你们训练或出海巡防的照片吗?我比较喜欢。
海虹:你好!周末快乐!我近期不出海。
朋友:上校。您是兴趣广泛的军人。您对医学的研究有多深?对皮肤病的治疗有研究吗?
上校妹妹,你的级别和少将一样不?你们部队对毛泽东思想的学习研究,有专门的课题吗?我认为毛泽东的思想理论涵盖的军事、社会等很多方面的领域。尤其是军事战略思想非常值得部队的战术研究借鉴的。
海虹:我们主要是学习毛泽东的军事战略思想、哲学思想和方法论,学习战例。
我的军衔比少将低2级。
朋友:那已经是一个很大的范畴了。在军事战略的研究领域非常有研究价值。现代战争决定战争胜利的因素,装备水平占百分之50(因为现代科技的某些方面远超过人的能力,所以我认为比过去的比重应当提高百分之20),其余的就是战略、领导因素了(这个是人的因素,在任何时候的战争都会起到主导作用,尤其是一个伟大的战略家)。
朋友:早上好,上校。你们的军舰对百姓开放吗?有没有机会能让我上你们的军舰参观?有机会的话告诉我一下。我梦寐以求此机会。。。
海虹:我们的军舰是对老百姓开放的,一般是持单位介绍信,到基地群联处联系,具体安排登舰参观时间。
朋友:上校,我要是个人参观的话,你能不能介绍我去??如果可能的话我是想带孩子参观。
海虹:个人参观不好安排,特别是带孩子上舰,很可能发生意外。
朋友:明白,谢谢
朋友:早上好,上校。现在cctv1放的《沧海》电视剧是讲海军和国民党作战的。我对海战的了解不多,我看了这个电视剧也使我深受感动,海军作战和地面部队一样精彩。我认为不论哪种作战,有一点是相同的。就是不能死搬教条,必须灵活作战,抓住战机才能取胜。。。
海虹:是的,战争有规律,没有教条,是斗智斗勇。
朋友:早上好。上校。敢问现在部队上考核指挥官的抓有利战机是用什么方法?
海虹:考核指挥官的抓有利战机没有教条,这是个临机问题。
朋友:我是说你们通过实际模拟战争演练考核,还是通过作为知识理论来考核。是不是两者兼具?
海虹:部队对军事干部的考核,主要是通过模拟战争演练考核。
朋友:你好,上校。现代战争的精髓是海空协同联合作战,不论是近海的防御战还是远海的攻击战,海空军的配合作战非常重要。我们现在的海空联合作战的战略战术是怎样的?协同作战的能力在世界上应当是排在前面的吧?(个人兴趣,只是和您交流一下)
海虹:现在海军已经部分达到了C4I。
朋友:早上好,上校。对于“德新海号”被劫,我以为和索马里政府投资合作可以(有消息说和当地政府谈判解决)。但是我们绝对不能和海盗妥协,那是一个填不满的坑。。。您认为呢?
海虹:是的,谢谢!近几天忙组织会务,现已就绪,今天下午开会,终于可以稍稍休息一下了,向老朋友打个招呼!
朋友:您好,上校。欢迎回来。我有一个观点:现代战争里,空军的作用是最重要的。不论是国家防御战,还是境外的决战,空军绝对是决胜主力(中国有一点例外)。你认为呢?当然,对于境外的远洋作战,海军与空军的配合自然就是决胜的必然因素了。
早上好,上校。近期强国网上有文章说我们现在已经有激光雷达攻击武器了,是真的吗?我看了那文,我感到了骄傲和自豪。不知道是不是真的有了那样先进的武器。不知道为什么这个消息没有保密?
海虹:中国敢于示强,是因为有胜券在手,有把握在不对称的战争中,克敌制胜。至于具体到某种武器,我想在国家没有公开之前,都是小道消息。
朋友:上校,你为什么分享《老子读透了中国人的心理:懒汉万岁》?
早上好,上校。强国网有文章称,我国已经研制成功人造黑洞,将使飞机真正原型。这什么一个问题,我们的军事科学取得了长足的进步,是不是呀。。。
海虹:你好!网上的信息有多少是准确的?就我所知的一些我军的主战装备的网上参数,有很多是失实的,与我和实际操作、驾驶人员处了解的情况是不一致的。
朋友:你好,上校。我军的海军作战能力与美军相比有多大差距?从装备上看我们是差的远了些,可是作战能力,我们应该不会差的太远吧?
海虹:我们海军与美军的作战是一种非对称战斗,在特定的条件下,以我局部优势对美军的局部劣势,稳操胜券。当然,战机是稍纵即逝的,需要谋略。论中国军人的战斗意志,我们肯定是在美军之上。我们一直以美军为蓝军,对美军的作战思想和基本战法,我们已经非常熟悉。
朋友:你所在的师团(或者军区范围内)的战舰有能打卫星的导弹吗?我们的导弹能找着太空中美军的卫星吗?(我只是个人兴趣,绝对保密)
海虹:我海空军具有部分反导能力,在上世纪九十年代末,已经可以用于实战。
朋友:你好,上校。谢谢你,很高兴你把我们的交流放到博客里,我们的交流快可以出本书了。不过很惭愧,我才疏学浅。有些问题可能看的很肤浅。。。
海虹:你的提问很有代表性,谢谢你给我的机会。
四 : 在Windows上的MySQL UDF开发应用
曾以为Windows版本的MySQL存在不能使用UDF的BUG诸提交了一个bug报告。不过似乎发现是我搞错了,MySQL的技术支持人员给了非常完美的解答,同大家分享一下。下边是原文回复。
用户你好。抱歉,这并不是一个bug。下面我粘贴一个以前为某个客户做的简例,假设你有了VC++,源码分发,并且有一个正常
运行的MySQL服务器。
我将创建一个UDF它将一个名字:
注意:例子非常简陋,目的是让你了解该如何处理手头的UDF。
- 打开 mysqld.dsw 工作区。
- 添加新项目到这个工作区
- Project name: my_udf // 项目名称:my_udf
- 选择 Win32 Dynamic-Link Library // Win32动态连接库
- 点击 OK
- 选择 An Empty DLL project // 一个空DLL项目
- 点击 Finish
- 点击 OK
- 添加新文件 my_udf.cpp 到项目中:
以下为引用的内容: #include #include #include extern "C" { char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); // 兼容C } char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) { char * me = "my name"; return me; // 调用此UDF将返回 my name } - 按 Ctrl+N 来创建一个新文件。 - 选择 text 类型 - File name: my_udf.def file://文件名:my_udf.def - 按照下边的内容编辑文件。 LIBRARY UDF_EXAMPLE DESCRIPTION 'Example Using UDF with VC++' VERSION 1.0 EXPORTS my_name - 右击my_udf项目并选择Settings - 点 C/C++ 选项卡 - 选择 General - 添加宏 HAVE_DLOPE 到预处理器定义 - 选择 Preprocessor - 添加头文件路径: Additional Include directories 例如: ../include - 按 F7 去编译成 DLL. - 复制 my_udf.dll 到环境变量path定义过的目录 比如 winntsystem32 。 - 打开mysql客户端 C:mysql-udfbin>mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 2 to server version: 3.23.52-max-nt Type 'help;' or 'h' for help. Type 'c' to clear the buffer. mysql> CREATE FUNCTION my_name RETURNS STRING SONAME "my_udf.dll"; Query OK, 0 rows affected (0.08 sec) mysql> select my_name(); mysql> drop function my_name; Query OK, 0 rows affected (0.00 sec) |
以下是MySQL技术人员的回信原文:
以下为引用的内容: Sorry this isn't a bug. Below I pasted a sample I did sometime ago for another user: Ok. Assuming you have VC++ and the source distribution and a server running, I will create a UDF that returns a name: Note: the sample is ugly, but the purpose here is to show you how to handle the UDF. - Open the mysqld.dsw workspace. - Add New project to the workspace - Project name: my_udf - Select Win32 Dynamic-Link Library - Click OK - Select An Empty DLL project - Click Finish - Click OK - Add a new file called my_udf.cpp to the project: #include #include #include extern "C" { char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); } char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) { char * me = "my name"; return me; } - Type Ctrl+N for to create a new file. - Select text type - File name: my_udf.def - Edit the above file with the below contents: LIBRARY UDF_EXAMPLE DESCRIPTION 'Example Using UDF with VC++' VERSION 1.0 EXPORTS my_name - Right Click the my_udf project and select Settings - Click the C/C++ tab - Select General in the Category Combo - Add the macro HAVE_DLOPEN to the PreProcessor definition - Select Preprocessor in the Category Combo - Add the include path to the text box: Additional Include directories e.g: ../include - Press F7 for to build the DLL. - Copy the my_udf.dll to the environment path directory: winntsystem32 for example. - Start the mysql client and issue: C:mysql-udfbin>mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 2 to server version: 3.23.52-max-nt Type 'help;' or 'h' for help. Type 'c' to clear the buffer. mysql> CREATE FUNCTION my_name RETURNS STRING SONAME "my_udf.dll"; Query OK, 0 rows affected (0.08 sec) mysql> select my_name(); mysql> drop function my_name; Query OK, 0 rows affected (0.00 sec) |
五 : 衣服上DIY布贴画 布贴画在衣服上的应用
布贴画在衣服上的应用。一条普通的裙子,在裙摆处DIY布贴画后,立即变得活泼并且有个性。如果衣服不小心勾破了,那么用布贴画还可以遮挡破损部位。
(www.61k.com。
布贴材料准备:
待装饰的衣服,这里是一条小女孩的裙子;
各种颜色的碎布;
针线、剪刀、热熔胶、纸、笔。
布贴制作方法:
1)设计图案。在白纸上画出自己喜欢的图案,也可以在电脑上设计完成后打印出来。本例是在纸上画了几栋卡通房子。图案画好后就剪出纸样,每栋房子用的布料都不一样,所以每栋房子都单独剪纸样。
2)裁剪布料。给每栋房子选配一种布料(为了节约,这里用做衣服剩下的碎布),把纸样固定在选定的布料上裁剪。注意,裁剪的时候布料下边要多留1.5厘米的缝份,用于包缝裙子下摆。
3)缝制布贴。裁剪下来的各种房子布片,按顺序叠放在裙子上,用热熔胶固定(建议用喷胶枪操作),再用不同颜色的缝纫线在布贴上车缝明线,这个例子中房子轮廓、窗户轮廓都缝了明线,另外还在裙子下摆也车缝了一圈明线。通过这三个步骤就可以制作完成个性化的装饰布贴。
本文标题:
激光在军事上的应用-激光陀螺在军事上有什么应用? 本文地址:
http://www.61k.com/1068531.html