分类目录
文章索引模板

Category: Info

开发Android第二步 - 二月 9, 2010 by yippee

开发Android第二步,安装 java , apache ant, Eclipse 及在模拟器安装编译程序|Google手机综合讨论区 – 威锋网 全球最大的iPhone论坛-WeiPhone威锋网
http://bbs.weiphone.com/read.php?tid=518612



开发Android第二步,安装 java , apache ant, Eclipse 及在模拟器安装编译程序|Google手机综合讨论区 – 威锋网 全球最大的iPhone论坛-WeiPhone威锋网
http://bbs.weiphone.com/read.php?tid=518612
开发Android第二步,安装 java , apache ant, Eclipse 及在模拟器安装编译程序


    管理提醒: 本帖被 loyus 执行加亮操作(2009-10-08)


开发Android第一步,安装SDK 1.6, 模拟器及安装游戏


开发Android第三步,签名证书,真机安装编译程序


开发Android第四步,Android NDK 1.6 及 android gcc toolchain


开发Android第五步,G1 安装 Linux Debian system


开发Android第二步,安装 java , apache ant, Eclipse 及在模拟器安装编译程序


Android SDK 编译及安装程序主要有两个方法,(A) 用 Apache Ant  (B) 用 Eclipse IDE。


首先介绍的 (A) Apache Ant


windows 方法
(1) 下载及安装 (Java SE Development Kit) JDK 6 Update 16
http://java.sun.com/javase/downloads/index.jsp


现时的版本是
Java SE Development Kit 6u16
jdk-6u16-windows-i586.exe


(2) 下载及安装 apache ant  http://ant.apache.org/bindownload.cgi
现时的版本是 apache-ant-1.7.1-bin.zip


安装方法 : 解压后放在 C:\Android\ 下


(3) 修改 PATH 环境变量 ,加上  (可参考 http://bbs.weiphone.com/read.php?tid=499864 )
复制代码


   1. ;C:\Android\android-sdk-windows-1.6_r1\tools;C:\Android\apache-ant-1.7.1\bin;


 


(4) 安装JDK6后, 增加 JAVA_HOME 环境变量 ,為
C:\Program Files\Java\jdk1.6.0_16


(5) Windows 进入command prompt 及建立 C:\Android\Projects\  目录及將示例源代码安装在C:\Android\Projects\ 目录下
复制代码


   1. mkdir C:\Android\Projects
   2. xcopy /s C:\Android\android-sdk-windows-1.6_r1\platforms\android-1.6\samples\*.* C:\Android\Projects\


 


(6) 打开模拟器, 用 HTC Magic skin 缩小至0.8
复制代码


   1. emulator -avd my_avd1.6 -skin HVGA-P-HTCMagic -scale 0.8


 


(7) Windows 进入command prompt 及更新 NotePad 项目
复制代码


   1. cd C:\Android\Projects\samples
   2. android update project –name NotePad –target 2 –path NotePad


 


(8)  模拟器安装 NotePad 项目
复制代码


   1. cd C:\Android\Projects\samples\NotePad
   2. ant debug
   3. ant install


 


(9) 模拟器删除NotePad项目有两个方法


(9.1) 模拟器删除项目方法一, 先在 C:\Android\Projects\samples\NotePad 目录下建立 build.properties 文件, 内容如下
复制代码


   1. # This file is used to override default values used by the Ant build system.
   2. #
   3. # This file must be checked in Version Control Systems, as it is
   4. # integral to the build system of your project.
   5.
   6. # The name of your application package as defined in the manifest.
   7. # Used by the ‘uninstall’ rule.
   8. application-package=com.example.android.notepad
   9.
  10. # The name of the source folder.
  11. #source-folder=src
  12.
  13. # The name of the output folder.
  14. #out-folder=bin


 


用 ant 删除NotePad项目
复制代码


   1. cd C:\Android\Projects\samples\NotePad
   2. ant uninstall


 


(9.2) 模拟器删除项目方法二, 先检查模拟器已安装项目
复制代码


   1. cd C:\Android\android-sdk-windows-1.6_r1\tools;
   2. adb shell ls data/app/*.apk



会看见这句
data/app/com.example.android.notepad.apk


用 adb 删除NotePad项目
复制代码


   1. cd C:\Android\android-sdk-windows-1.6_r1\tools;
   2. adb shell rm data/app/com.example.android.notepad.apk


 


(10) 第(8)点编译方法更可尝试安装其他 Android 书本的源代码项目
http://bbs.weiphone.com/read.php?tid=516048


例如下载Hello Android 的源代码  eband-code.zip


解压后放在 C:\Android\Projects\ 目录下
复制代码


   1. cd C:\Android\Projects\code
   2. android update project –name Sudokuv4 –target 2 –path Sudokuv4
   3. cd C:\Android\Projects\code\Sudokuv4
   4. ant debug
   5. ant install


 


sudoku



删除模拟器安装项目请参考第(9)点


mac / linux 方法


linux最主要分别
(i) 是要安装 apache ant 及 sun java jdk,如果有 debian 可开启 Terminal 用 apt-get 安装
复制代码


   1. sudo apt-get update
   2. sudo apt-get install build-essential ant
   3. sudo apt-get install sun-java6-jdk


 


mac 的 sun java sdk 及 apache ant 在安装 xCode 时已有


(ii) 手工修改环境变量
vi ~/.bash_profile

PATH=~/Android/android-sdk-mac_x86-1.6_r1/tools:”${PATH}”

PATH=~/Android/android-sdk-linux_x86-1.6_r1/tools:”${PATH}”


(iii) 其他的与windows方法相似



(B) Eclipse IDE
Eclipse 是一个完整的 Android 开发环境
(1) 安装 Eclipse 请参考
Google Android SDK 开发范例大全 (第 2 章)
ch02.pdf.zip (1145 K) 下载次数:55


其他源代码项目下载方法 : http://bbs.weiphone.com/read.php?tid=516048


(2) 新 Android 编译项目
File 菜单 -> New 菜单 -> Project 菜单 -> Android Project 选项
创建新项目选项 Create New Project in Workspace
从已有的项目资料来源创建新项目 Create New project from Existing Source (可用作安装其他Android书本的源代码项目)


(3) 改变模拟器选项,例如: -scale 0.8 -skin  HVGA-P-HTCMagic
Run 菜单 -> Run Configurations 菜单 -> Target 选项 -> Additional Emulator Command Line Options 填入选项


(4) 创建及管理 AVD Android Virtual Device (虚拟设备) 包括 Target,skin 及 SD卡
Windows 菜单 -> Android SDK and AVD Manager 菜单


开发Android第二步,安装 java , apache ant, Eclipse 及在模拟器安装编译程序|Google手机综合讨论区 – 威锋网 全球最大的iPhone论坛-WeiPhone威锋网
http://bbs.weiphone.com/read.php?tid=518612
开发Android第二步,安装 java , apache ant, Eclipse 及在模拟器安装编译程序


    管理提醒: 本帖被 loyus 执行加亮操作(2009-10-08)


开发Android第一步,安装SDK 1.6, 模拟器及安装游戏


开发Android第三步,签名证书,真机安装编译程序


开发Android第四步,Android NDK 1.6 及 android gcc toolchain


开发Android第五步,G1 安装 Linux Debian system


开发Android第二步,安装 java , apache ant, Eclipse 及在模拟器安装编译程序


Android SDK 编译及安装程序主要有两个方法,(A) 用 Apache Ant  (B) 用 Eclipse IDE。


首先介绍的 (A) Apache Ant


windows 方法
(1) 下载及安装 (Java SE Development Kit) JDK 6 Update 16
http://java.sun.com/javase/downloads/index.jsp


现时的版本是
Java SE Development Kit 6u16
jdk-6u16-windows-i586.exe


(2) 下载及安装 apache ant  http://ant.apache.org/bindownload.cgi
现时的版本是 apache-ant-1.7.1-bin.zip


安装方法 : 解压后放在 C:\Android\ 下


(3) 修改 PATH 环境变量 ,加上  (可参考 http://bbs.weiphone.com/read.php?tid=499864 )
复制代码


   1. ;C:\Android\android-sdk-windows-1.6_r1\tools;C:\Android\apache-ant-1.7.1\bin;


 


(4) 安装JDK6后, 增加 JAVA_HOME 环境变量 ,為
C:\Program Files\Java\jdk1.6.0_16


(5) Windows 进入command prompt 及建立 C:\Android\Projects\  目录及將示例源代码安装在C:\Android\Projects\ 目录下
复制代码


   1. mkdir C:\Android\Projects
   2. xcopy /s C:\Android\android-sdk-windows-1.6_r1\platforms\android-1.6\samples\*.* C:\Android\Projects\


 


(6) 打开模拟器, 用 HTC Magic skin 缩小至0.8
复制代码


   1. emulator -avd my_avd1.6 -skin HVGA-P-HTCMagic -scale 0.8


 


(7) Windows 进入command prompt 及更新 NotePad 项目
复制代码


   1. cd C:\Android\Projects\samples
   2. android update project –name NotePad –target 2 –path NotePad


 


(8)  模拟器安装 NotePad 项目
复制代码


   1. cd C:\Android\Projects\samples\NotePad
   2. ant debug
   3. ant install


 


(9) 模拟器删除NotePad项目有两个方法


(9.1) 模拟器删除项目方法一, 先在 C:\Android\Projects\samples\NotePad 目录下建立 build.properties 文件, 内容如下
复制代码


   1. # This file is used to override default values used by the Ant build system.
   2. #
   3. # This file must be checked in Version Control Systems, as it is
   4. # integral to the build system of your project.
   5.
   6. # The name of your application package as defined in the manifest.
   7. # Used by the ‘uninstall’ rule.
   8. application-package=com.example.android.notepad
   9.
  10. # The name of the source folder.
  11. #source-folder=src
  12.
  13. # The name of the output folder.
  14. #out-folder=bin


 


用 ant 删除NotePad项目
复制代码


   1. cd C:\Android\Projects\samples\NotePad
   2. ant uninstall


 


(9.2) 模拟器删除项目方法二, 先检查模拟器已安装项目
复制代码


   1. cd C:\Android\android-sdk-windows-1.6_r1\tools;
   2. adb shell ls data/app/*.apk



会看见这句
data/app/com.example.android.notepad.apk


用 adb 删除NotePad项目
复制代码


   1. cd C:\Android\android-sdk-windows-1.6_r1\tools;
   2. adb shell rm data/app/com.example.android.notepad.apk


 


(10) 第(8)点编译方法更可尝试安装其他 Android 书本的源代码项目
http://bbs.weiphone.com/read.php?tid=516048


例如下载Hello Android 的源代码  eband-code.zip


解压后放在 C:\Android\Projects\ 目录下
复制代码


   1. cd C:\Android\Projects\code
   2. android update project –name Sudokuv4 –target 2 –path Sudokuv4
   3. cd C:\Android\Projects\code\Sudokuv4
   4. ant debug
   5. ant install


 


sudoku



删除模拟器安装项目请参考第(9)点


mac / linux 方法


linux最主要分别
(i) 是要安装 apache ant 及 sun java jdk,如果有 debian 可开启 Terminal 用 apt-get 安装
复制代码


   1. sudo apt-get update
   2. sudo apt-get install build-essential ant
   3. sudo apt-get install sun-java6-jdk


 


mac 的 sun java sdk 及 apache ant 在安装 xCode 时已有


(ii) 手工修改环境变量
vi ~/.bash_profile

PATH=~/Android/android-sdk-mac_x86-1.6_r1/tools:”${PATH}”

PATH=~/Android/android-sdk-linux_x86-1.6_r1/tools:”${PATH}”


(iii) 其他的与windows方法相似



(B) Eclipse IDE
Eclipse 是一个完整的 Android 开发环境
(1) 安装 Eclipse 请参考
Google Android SDK 开发范例大全 (第 2 章)
ch02.pdf.zip (1145 K) 下载次数:55


其他源代码项目下载方法 : http://bbs.weiphone.com/read.php?tid=516048


(2) 新 Android 编译项目
File 菜单 -> New 菜单 -> Project 菜单 -> Android Project 选项
创建新项目选项 Create New Project in Workspace
从已有的项目资料来源创建新项目 Create New project from Existing Source (可用作安装其他Android书本的源代码项目)


(3) 改变模拟器选项,例如: -scale 0.8 -skin  HVGA-P-HTCMagic
Run 菜单 -> Run Configurations 菜单 -> Target 选项 -> Additional Emulator Command Line Options 填入选项


(4) 创建及管理 AVD Android Virtual Device (虚拟设备) 包括 Target,skin 及 SD卡
Windows 菜单 -> Android SDK and AVD Manager 菜单


 

标签:
Android-Emulator - 二月 8, 2010 by yippee

Android-Emulator】Android模拟器介绍和基本使用 收藏
注:其中部分内容参考网上资源


1、Android模拟器介绍


Android中提供了一个模拟器来模拟ARM核的移动设备。Android的模拟器是基于QEMU开发的,QEMU是一个有名的开源虚拟机项目(详见http://bellard.org/qemu/),它可以提供一个虚拟的ARM移动设备。Android模拟器被命名为goldfish,用来模拟包括下面一些功能的ARM SoC:


* ARM926ej-S CPU


* Thumb support


* MMC


* RTC


* Keyboard


* USB Gadget


* framebuffer


* TTY driver


* NAND FLASH


Android模拟器所对应的源代码主要在external/qemu目录下。如果你想将Android移植到其他设备上,熟悉它目前所针对的模拟器环境可以提供一些参考。


对于应用程序的开发者,模拟器提供了很多开发和测试时的便利。无论在Windows下还是Linux下,Android模拟器都可以顺利运行,并且Google提供了Eclipse插件,可将模拟器集成到Eclipse的IDE环境。当然,你也可以从命令行启动Android模拟器。


这款模拟器功能非常齐全,电话本、通话等功能都可正常使用(当然你没办法真的从这里打电话)。甚至其内置的浏览器和Google Maps都可以联网。用户可以使用键盘输入,鼠标点击模拟器按键输入,甚至还可以使用鼠标点击、拖动屏幕进行操纵。


当然模拟器毕竟是模拟器,和真实的机子还是存在差别的,


android模拟器和真机的不同之处:


* 不支持呼叫和接听实际来电;但可以通过控制台模拟电话呼叫(呼入和呼出)
* 不支持USB连接


* 不支持相机/视频捕捉


* 不支持音频输入(捕捉);但支持输出(重放)


* 不支持扩展耳机


* 不能确定连接状态


* 不能确定电池电量水平和交流充电状态


* 不能确定SD卡的插入/弹出


* 不支持蓝牙


2、创建和启动Android模拟器


要玩GPhone的模拟器,当然需要先去http://developer.android.com/sdk(如果打不开就用http://androidappdocs.appspot.com/sdk/index.html)上面下载Android 的SDK,解压出来后在SDK的根目录下有一个tools文件夹,里面就是模拟器和一些非常有用的工具。(SDK详细的安装过程请参照 http://blog.csdn.net/magicyu2/archive/2009/11/02/4755747.aspx)


要正确的启动模拟,你必须先要创建一个 AVD( Android Virtual Device 虚拟设备 ) ,你可以利用AVD创建基于不同版本的模拟器,下面就介绍如何创建AVD:


(1) 查看当前支持版本(在列出的版本中我们需要记住id值,这个值在第2步中使用):


magicyu@magicyu-desktop:~$ android list target


你可以看到几个Available Android targets,比如:Name: Android 1.6,他们有各自的id号。


(2) 创建AVD:


magicyu@magicyu-desktop:~$ android create avd -n magicyu -t 2


-n后面接需要创建avd的名字,-t后面接需要创建虚拟器的类型,2即为步骤(1)中得到的类型id号。


(3) 查看是否创建成功(如果成功会显示刚才我们创建的avd信息):


magicyu@magicyu-desktop:~$ android list avd


(4) 启动模拟器:


magicyu@magicyu-desktop:~$ emulator @magicyu 或者


emulator -avd magicyu


其中@和-avd后接的是你创建过的avd名字


(5) 选择启动的皮肤


magicyu@magicyu-desktop:~$ emulator -avd magicyu -skin QVGA


skin后面接所要启动皮肤的类型,所有的类型可以在/ platforms/android-1.*/skins目录下找到,*为所指的版本。如在1.6版本的SDK下有HVGA,QVGA, WVGA800,WVGA854几种。按Ctrl+F11,可以直接改变模拟器的横纵摆放。


当然AVD也可以在Eclipse中创建和启动。关于Eclipse+ADT+SDK的安装请参见http://blog.csdn.net/magicyu2/archive/2009/11/02/4755747.aspx。


运行Eclipse,Window->Android SDK and AVD Manager,就能得到如下的界面,选择新建即可新建一个AVD。


3、Android模拟器的一些工具


(1)adb:


ADB(Android Debug Bridge)是Android 提供的一个通用的调试工具,借助这个工具,我们可以管理设备或手机模拟器的状态还可以进行以下的操作:


a、快速更新设备或手机模拟器中的代码,如应用或Android系统升级;


b、在设备上运行shell命令;


c、管理设备或手机模拟器上的预定端口;


d、在设备或手机模拟器上复制或粘贴文件


一些常用的操作:


进入Shell: adb shell


通过上面的命令,就可以进入设备或模拟器的shell环境中,在这个Linux Shell中,你可以执行各种Linux 的命令,另外如果只想执行一条shell命令,可以采用以下的方式:


adb shell [command]


如:adb shell dmesg会打印出内核的调试信息。


(Android的linux shell做了大量精简,很多linux常用指令都不支持)


上传文件: adb push


下载文件: adb pull


安装程序: adb install


卸载软件: adb shell rm /data/app/


补充一点,通过adb安装的软件(*.apk)都在”/data/app/”目录下,所以安装时不必制定路径,卸载只需要简单的执行”rm”就行。


结束adb: adb kill-server


显示android模拟器状态:


adb devices (端口信息)


adb get-product (设备型号)


adb get-serialno (序列号)


等待正在运行的设备: adb wait-for-device


端口转发: adb forward adb forward tcp:5555 tcp:1234


(将默认端口TCP 5555转发到1234端口上)


查看bug报告: adb bugreport


adb shell sqlite3 访问数据库SQLite3


adb shell logcat -b radio 记录无线通讯日志: 一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录


应用程序配置文件:


“AndroidManifest.xml”中


“”


决定是否应用程序是否显示在Panel上


(2)am指令(在shell内使用am来加载android应用):


am [start|instrument]


am start [-a ]


[-d ]


[-t ]


[-c [-c ] …]


[-e [-e ...]


[-n ] [-D] []


am instrument [-e ]


[-p ]


[-w]


启动浏览器:


am start -a android.intent.action.VIEW -d http://www.google.cn/


拨打电话:


am start -a android.intent.action.CALL -d tel:10086


启动google map直接定位到北京:


am start -a android.intent.action.VIEW geo:00?q=beijing


(3)为模拟器加上SD卡:


emulator -sdcard dcard.img


下面我们再来说说如何创建”sdcard.img”文件:


“tools”目录下还有另外一个很好用的工具mksdcard,一看名字就知道——make sdcard。对,就用它来创建一个“SD卡”。


命令为:


mksdcard 1024M D:dcard.img


OK这样一个容量为1G的SD卡就创建完毕了。


使用SDCard:


创建: mksdcard
(bytes(default),K,M)


连接到模拟器: emulator -sdcard


传文件到SDCard: adb push


(4)Android模拟器打电话发短信


GPhone的模拟器有个特有的号码:15555218135,这个就类似我们实体手机的SIM卡号码啦。要实现拨号,用手机?当然不行!


更简单,三步:


1.打开终端


2.连接: telnet localhost 5554(5554是你打开模拟器后上面显示的数字)


3.命令:gsm call 15555218135


look!是不是模拟器上显示来电了?接听/挂断和实体手机一样。


发短信也一样简单,重复上面1,2两步,第三部命令改一下:


sms send 15555218135 Hellothis is a Message.


4、Android模拟器主要命令参数介绍


emulator [- []] … [-]
下面的表总结了可用的参数


Help


-help打印模拟器参数列表。


-help-all打印所有启动参数明细。


-help-打印指定启动参数的信息。


-help-debug-tags打印所有被-debug 打开的列表。


-help-disk-images打印正在使用的磁盘镜像信息。


-help-environment打印模拟器环境变量信息。


-help-keys打印当前的键盘映射。


-help-keyset-file打印一个自定义的键盘映射文件的定义。


Disk Images


-cache 使用 指定网络缓存分区镜像。


自定义,您可以指定一个当前工作目录的相对路径。如果没有指定缓存文件,模拟器会指定一个零时文件作为缓存文件。更多信息请参考-help-disk-images.


-data 使用作为用户数据磁盘镜像。


自定义,您可以指定一个当前工作目录的相对路径。如果-data没有被使用,模拟器会在指定的目录下寻找名叫”userdata-qemu.img”的镜像文件。默认情况下,模拟器会寻找~/.android (on Linux/Mac)或者C:\Documents and Settings\\Local Settings\Application Data\Android (on Windows)。


如果您使用了-data ,但是文件并不存在,模拟器将创建同名文件。


更多信息请参见运行多个模拟器实例和-help-disk-images。


-image 使用作为系统镜像。


自定义,您可以指定一个当前工作目录的相对路径。默认为/system.img。
-initdata


重写用户数据镜像时,(使用 -wipe-data),复制此文件内容到新用户数据文件镜像中。默认方式下,模拟器拷贝/userdata.img。


自定义,您可以指定一个当前工作目录的相对路径。参见-wipe-data。


更多信息请参见-help-disk-images。


-kernel 使用作为模拟器内核。自定义,您可以指定一个当前工作目录的相对路径。


-nocache启动模拟器时无缓存分区。参见-cache 。


-ramdisk 使用作为虚拟内存镜像。默认为/ramdisk.img. 自定义,您可以指定一个当前工作目录的相对路径。更多信息请参见-help-disk-images。


-sdcard 使用作为SD卡镜像。默认为/sdcard.img. 自定义,您可以指定一个当前工作目录的相对路径。更多信息请参见-help-disk-images。


-system 在指定的下搜索系统、虚拟内存和用户数据镜像文件。为当前路径的相对目录。


-wipe- data重至用户数据镜像文件。(that is the file specified by -datadir and -data or the default file). 模拟器删除所有用户数据,然后复制右-inidata参数指定的数据到镜像文件,在启动之前。参见-initdata. 更多信息请参见-help-disk-images。


Debug


-debug 开启/关闭指定tag的调试信息。


是一个被空格/逗号/纵列所分割的调试组建名称列表。更多信息参见-help-debug-tags。


-debug-开启/关闭指定tag的调试信息。使用-help-debug-tags获得您可以指定为的调试组件列表。


-debug-no-关闭指定tag的调试信息。


-logcat 打开指定tag的日志输出。如果环境变量ANDROID_LOG_TAGS被指定且不为空,她的值将成为日志输出的默认值。


-shell创建一个拥有root权限的命令行窗口。即使模拟器的UI界面无法使用了,您依然可以使用命令行窗口。按Ctr-c键中断模拟器运行。


-shell-serial 打开具有root权限的脚本窗口。必须是一个QEMU类型的设备。参见’serial -dev’在 http://www.bellard.org/qemu/qemu-doc.html#SEC10上关于设备类型的列表信息。这儿有一些例子:


· -shell-serial stdio is identical to -shell


· -shell-serial tcp::4444servernowait 让您的shell可以通过4444端口通讯。


· -shell-serial fdpair:3:6 让模拟器可以使用3 (in)和6(out)磁碟机。


· -shell-serial fdpair:0:1 uses the normal stdin and stdout fds except that QEMU won’t tty-cook the data.


-show-kernel 显示内核信息。


-trace Enable code profiling (press F9 to start) written to a specified file.


-verbose 开启冗长输出。Equivalent to -debug-init. 您可以定义ANDROID_VERBOSE环境变量作为冗长输出参数。定义你想用到的参数,用逗号分割。这样可以省略像-debug-这样的参数。下面是一个设置ANDROID_VERBOSE的例子,它带有-debug-init和 -debug-modem 参数:


ANDROID_VERBOSE=initmodem更多信息参见.


Media
-audio 使用指定的音频后端。


-audio-in 使用指定的音频输入后端。


-audio-out 使用指定的音频输出后端。


-noaudio在当前虚拟机实例中关闭音频支持。


-radio 重新定向收音机接口到本地的字节设备。


-useaudio打开模拟器实例的音频支持。默认为打开。


Network


-dns-server 使用指定的DNS服务器。必须是以逗号分割,多于4个的服务器名或IP地址。


-http-proxy 配置TCP连接使用HTTP/HTTPS代理。


必须符合以下格式:http://:


http://:@: 前缀http://可以被忽略。如果-http-proxy 未被指定,模拟器将寻找http_proxy环境变量,并且自动寻找所有符号格式要求的 值。


-netdelay 设置网络延迟默认值为none。参见Network Delay Emulation中关于的值。


-netfast快捷的 -netspeed full -netdelay none


-netspeed 指定模拟器网络速度为.默认值为full。参见表格Network Speed Emulation 中的值。


-port 指定模拟器网络端口为.控制台端口号必须介于5554和5584之间,并且+1必须留作ADB使用。


-report-console 启动前向第三方同志此模拟器实例的网络端口。 必须是以下几种格式


tcp:[server][max=]


unix:[server][max=]


更多信息参见 -help-report-console
System


-cpu-delay 降低模拟器CPU的速度到。支持0到100的整数。注意与具体的时钟或其他的绝对频率无关。它只表现为一种抽象的,相对于当前模拟器运行状况的速度调节。


-gps 重定向NMEA GPS到字节设备。


使用此参数通知模拟器模拟一个NMEA-compatible GPS,连接到一个扩展的设备或socket端口。格式必须符合QEMU-specific所指定的设备格式。更多信息参见’serial -dev’ 和 http://www.bellard.org/qemu/qemu-doc.html#SEC10.


-nojni在Dalvik运行时关闭JNI检查


-qemu传递参数到qemu。


-qemu -h关闭qemu帮助。


-radio 重定向录音机模块到制定的字符设备。格式必须符合QEMU规定的序列设备。详情参见http://www.bellard.org/qemu/qemu-doc.html#SEC10.


-timezone 设定模拟器时区为,替换为系统时区。必须按照时区格式指定。比如:”America/Los_Angeles”,”Europe/Paris”


-version显示模拟器版本号。


UI


-dpi-device 修改模拟器的分辨率适配物理设备。默认值为165。参见-scale.


-no-boot-anim关闭模拟器启动时的动画。禁用启动动画可以加快启动速度。


-no-window关闭模拟器的绘制窗口。


-scale 调整模拟器窗口。 是介于0.1到3的数字,它是调整屏幕的比例因子。您也可以指定一个DPI值,在添加dpi前缀的情况下。Auto参数告诉模拟器选择自己最合适的尺寸。


-raw-keys关闭Unicode键盘reverse-mapping.


-noskin不使用任何模拟器皮肤。


-keyset 用指定的键盘设置文件代替默认。指定宿主键盘和模拟器之间的键盘映射文件。更多信息参见-help-keyset。


-onion 用图片覆盖屏幕。不支持JPEG,只支持PNG


-onion-alpha 指定onion皮肤透明值(百分比) 默认为50.


-onion-rotation 指定onion皮肤旋转。 必须是 0 1 2 3中的一个。


-skin 启动模拟器,搭配指定皮肤。


-skindir 在指定目录下搜索皮肤


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/magicyu2/archive/2009/11/05/4771811.aspx

标签:
BT 服务器 - 二月 7, 2010 by yippee

菜鸟脱贫 玩转BT 自架BT服务器_服务器 _天极ChinaByte
http://www.yesky.com/446/1836946_2.shtml



西祠胡同社区 – 城市生活社区门户
http://www.xici.net/main.asp?url=/b359377/d20924009.htm



MyBT让你轻松架设BT服务器 – 网易学院·教程
http://tech.163.com/05/0628/11/1NB3G5K700091589.html



BT服务器架设 – 网络购物 – wcw5 – 和讯博客
http://wcw5.blog.hexun.com/15800854_d.html



巧架个人BT服务器-组网技术-eNet网络学院-中国最权威的电脑教程软件资讯网站
http://www.enet.com.cn/article/2005/0119/A20050119383736_3.shtml



[转]BT服务器源码分析_春华秋实_百度空间
http://hi.baidu.com/3600/blog/item/ab02a50f5ccf08eaab64578d.html


 


https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/trunk/SampleApplications/HibernatingTorrent/HibernatingTorrent/HibernatingTorrent/TorrentServer.cs



opentracker – An open and free bittorrent tracker
http://erdgeist.org/arts/software/opentracker/



StarTrack
http://startrack.codeplex.com/SourceControl/list/changesets



PumpkinTorrent
http://pumpkintorrent.codeplex.com/



BT服务器源码分析3:bnbt执行流程 – BT源码分析 – jijian91和小z
http://jijian91.com/blog20071018/bnbt-tracker-analysis.html



Opensource C# BitTorrent library
http://social.msdn.microsoft.com/Forums/en-US/showandtell/thread/1e94d01e-6604-4173-9176-75e93fecdeef
MonoTorrent_


MonoTorrent – 概述 – Projects hosted by qNETp
http://projects.qnetp.net/projects/show/monotorrent



BitTorrent client in C# | The Coffeehouse | Channel 9
http://channel9.msdn.com/forums/Coffeehouse/226454-BitTorrent-client-in-C/



UbuntuHelp:BitTorrent/zh – Ubuntu中文
http://wiki.ubuntu.org.cn/index.php?title=UbuntuHelp:BitTorrent/zh&variant=zh-sg



monotorrent – Project Hosting on Google Code
http://code.google.com/p/monotorrent/source/browse/#svn/trunk/MonoTorrent.GUI%3Fstate%3Dclosed



Browse BitTorrent Files on SourceForge.net
http://sourceforge.net/projects/bittorrent/files/



Browse BitTorrent++ Files on SourceForge.net
http://sourceforge.net/projects/btplusplus/files/



Opensource C# BitTorrent library
http://social.msdn.microsoft.com/Forums/en/showandtell/thread/1e94d01e-6604-4173-9176-75e93fecdeef



BitSharp:C#/MonoのBitTorrentクライアントライブラリ :P 2Pとかその辺のお話
http://peer2peer.blog79.fc2.com/blog-entry-273.html



Cross-platform C#/Mono BitTorrent Client – Ubuntu Forums
http://ubuntuforums.org/showthread.php?t=676308



Mono + Library – SWiK
http://swik.net/Mono+Library



rtorrent + wtorrent – FedoraForum.org
http://forums.fedoraforum.org/showthread.php?t=220910



Hibernating Torrent: A simple torrent server for Windows
http://ayende.com/Blog/archive/2008/04/08/Hibernating-Torrent-A-simple-torrent-server-for-Windows.aspx



局域网内如何架构BT服务器 !急!!…-Python-编程语言–问友源码社区
http://www.winu.cn/ask/question.php?qid=5140



寻找BT服务器程序 (JAVA编写的) Java / J2SE / 基础类 – CSDN社区 community.csdn.net
http://topic.csdn.net/t/20040920/02/3389020.html



 

标签:
肖老师的0BUG FREEPP ASTERISK - 二月 6, 2010 by yippee

留下印象是在 多任务环境下任务间通信模型
原来是 进程间通信,一般建议就用socket方式,TCP、UDP都可以

然后今天看到 从技术问题变成RPWT
实在太有趣了

本书讨论的0bug,可能比大多数人讨论的严厉一点点,即产品卖出钱了,你把钱揣到包包里面,并且落袋为安,不会因为维护再花出去,这个叫做0bug。

不知道他为什么把这个认为更加严厉一点点
产品卖出钱了,你把钱揣到包包里面,并且落袋为安,不会因为维护再花出去
这个更大意义上是商务上的事情
如果商务搞定了,就做一个简单的玩意忽悠验收过去了,然后不用,那也是他声称的0BUG了

2010-01-26 23:25:42 肖舸
  我的server在公网上正跑着呢,两年了,运维部门一个bug都没有报。这算不算0bug?

看了看他的网站 FREEPP
VOIP的,我很不厚道的搜索了几下

这是一个销售的简历
1、 普罗通信FREEPP BOX 产品
针对普罗通信新推出的 FREEPP 产品,进行销售策划,开辟网上销售渠道提高产品认知度,成功售出四套。

这是招聘信息
招聘职位: ASTERISK工程师
1、熟悉ASTERISK、在ASTERISK开发方面有1年以上工作经验;

莫非他说的SERVER就是这个?

标签:, ,
Treeview增加、删除、修改、遍历等操作 - 二月 5, 2010 by yippee

1.使用初步  
   
  (1)下载地址  
  http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/ASP_DOT_NET_ServerControls/WebControls/default.asp  
   
   
  (2)不显示树型的问题  
  首先:下载包分自动安装和手动安装两种包。  
  要下载大小约650K   的自动安装包。  
  其次:TreeView要求客户端浏览器版本为IE5.5及以上,最好要求客户端升级为IE6.0  
   
  (3)关于闪烁  
  将AutoPostBack属性设置为真,SelectedIndexChange才能被执行。不过这样的话刷新的很厉害。不要刷新的话,将AutoPostBack属性设置为FALSE.          
   
  (4)常用的几个属性和方法  
  ~Index   获取树节点在树节点集合中的位置。  
  ~Nodes   获取分配给树视图控件的树节点集合。  
  ~Parent     获取或设置控件的父容器。  
  ~SelectedNode   获取或设置当前在树视图控件中选定的树节点。  
  ~ExpandAll   展开所有树节点。  
  ~Checked   获取或设置一个值,用以指示树节点是否处于选中状态。  
  ~Text   获取或设置在树节点标签中显示的文本。  
  ~Expand   展开树节点。  
  ~Clear   清空树  
  ~Remove   从树视图控件中移除当前树节点。  
   
  (5)常用的几个操作:增加、删除、修改、剪切  
   
  @增加节点:  
                  Dim   tmpNd3   As   New   Microsoft.Web.UI.WebControls.TreeNode()  
                  Dim   NdSel   As   New   Microsoft.Web.UI.WebControls.TreeNode()  
                  ‘NdSel   为当前选定的节点,新节点将作为它的子节点    
                  NdSel   =   Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)  
                  tmpNd3.Text   =   “新增节点”  
                  ‘在树中添加这个新节点  
                  NdSel.Nodes.Add(tmpNd3)  
  @删除节点:  
                  Dim   tmpNd3   As   New   Microsoft.Web.UI.WebControls.TreeNode()  
                  Dim   NdSel   As   New   Microsoft.Web.UI.WebControls.TreeNode()  
                  ‘NdSel   为当前选定的要删除节点,tmpNd3为它的父节点    
                  NdSel   =   Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)  
                  If   (Treepaybasic.SelectedNodeIndex   <>   “0″)   Then  
                          tmpNd3   =   NdSel.Parent  
                          tmpNd3.Nodes.Remove(NdSel)  
                  Else  
                          Treepaybasic.Nodes.Clear()  
                  End   If  
  @修改节点:  
                  Dim   NdSel   As   New   Microsoft.Web.UI.WebControls.TreeNode()  
                  NdSel   =   Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)  
                  NdSel.Text   =   “aaa”  
  @剪切和粘贴  
   
  剪切:  
                  Dim   tmpNd3   As   New   Microsoft.Web.UI.WebControls.TreeNode()  
                  Dim   NdSel   As   New   Microsoft.Web.UI.WebControls.TreeNode()  
                  ‘NdSel   为当前选定的要删除节点,tmpNd3为它的父节点    
                  NdSel   =   Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)  
                  ‘将剪切下来的节点存入session  
                  Session(“node”)   =   NdSel  
                  If   (Treepaybasic.SelectedNodeIndex   <>   “0″)   Then  
                          tmpNd3   =   NdSel.Parent  
                          tmpNd3.Nodes.Remove(NdSel)  
                  End   If  
  粘贴:  
                          Dim   tmpNd3   As   New   Microsoft.Web.UI.WebControls.TreeNode()  
                  Dim   NdSel   As   New   Microsoft.Web.UI.WebControls.TreeNode()  
                  ‘NdSel   为当前要粘贴节点的父节点    
                  NdSel   =   Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)  
                  tmpNd3   =   Session(“node”)  
                  NdSel.Nodes.Add(tmpNd3)  
  2.用递归生成树的算法和数据库设计  
  (1)递归说明  
      程序调用自身的编程方法称为递归(recursion)。在树的生成以及图的遍历中,递归用的很多。经典的算法求   n!   (求n的阶乘)中,用的就是递归方法。递归算法的优点就是简洁,可扩充性好。但是缺点也很明显:低效。因为递归就是程序不断调用自身,对系统的资源消耗比较大。随着节点的增多,执行效率会变的很低。    
      为了解决树在生成过程中的层树不定的问题,同时也是为了让树的扩展性更好。树的生成使用了递归的方法。生成树的代码一旦写成,可以不改动源代码,生成无限级层次的树。树的结构完全由数据库中表的数据决定。  
  (2)数据库设计  
      创建一个数据库,设计树图信息表Treetable,表中属性包含Nodeid、Parentid、Nodename、Address等字段(分别用于表示节点的ID、父节点ID、节点名称、链接地址),其它属性根据实际用户需求和设计而定。节点名称Nodename将在树型控件的节点上显示,Nodeid字段保存节点的唯一标识号,Parentid表示当前节点的父节点ID号(例如有两个节点是父子关系,孩子节点的Parentid值就是其父节点的Nodeid),节点号父子相接组成了一个“链表”,表征并记录了树上节点的层次结构。  
  表具体设计如下:(简化模型,实际使用的要复杂一些)   主键   属性名   类型   长度   可空   属性含义  
  是   Nodeid   int   6   否   节点ID  
    Parentid   int   6   否   父节点ID  
    Nodename   char   50   否   节点名称  
    Address   char   80   可   链接地址  
   
  备注:链接地址   主要是用在:   树在框架中使用的环境。链接可以指向其他框架页中的地址或是带不同的参数。  
           
   
  (3)程序代码  
  ――――――――――――递归函数――――――――――――  
          ‘生成树的函数  
          Private   Sub   inittree(ByRef   Nds   As   Microsoft.Web.UI.WebControls.TreeNodeCollection,   ByVal   parentId   As   Integer)  
                  Dim   dv   As   New   DataView()  
                  Dim   dvrow   As   DataRowView  
                  Dim   tmpNode   As   Microsoft.Web.UI.WebControls.TreeNode  
                  ‘intId为数值型变量,其作用是记录并传递当前记录的ID,做为它子节点的PARENTID值  
                  Dim   intId   As   Integer  
                  dv.Table   =   mySet.Tables(“paybasic”)  
                  ‘parentId传递的是   additem函数中的intId.下面语句的作用是找出当前节点的子孩子集合。    
                  dv.RowFilter   =   “parentID=’”   &   parentId   &   “‘”  
                  ‘如果当前节点有孩子,则遍历所有的孩子,并调用递归函数。  
                  For   Each   dvrow   In   dv  
                          tmpNode   =   New   Microsoft.Web.UI.WebControls.TreeNode()  
                          ‘为当前节点的各个属性赋值。  
                          tmpNode.ID   =   dvrow(“nodeID”)  
                          tmpNode.Text   =   dvrow(“nodename”)  
                          tmpNode.NavigateUrl   =   dvrow(“Address”)  
                          intId   =   dvrow(“parentID”)  
                          ‘添加一个节点  
                          Nds.Add(tmpNode)  
                          ‘调用递归函数  
                          inittree(Nds(Nds.Count   –   1).Nodes,   intId)  
                  Next  
  End   Sub  
  ――――――――――――――――调用递归函数――――――――――――――――――  
  CreateReaderDataSet()  
  inittree(Treepaybasic.Nodes,   999)  
  ―――――――――――――――――生成数据集―――――――――――――――――――  
          ‘生成数据集的函数  
          Private   Sub   CreateReaderDataSet()  
                  ‘在运行时连接,并设置连接属性  
                  MyConn   =   New   System.Data.OleDb.OleDbConnection(“Provider=MSDAORA.1;Data   Source=oracle9;User   ID=user;Password=****;”)  
                  ‘设置SelectCommand命令  
                  myAdapter.SelectCommand   =   New   System.Data.OleDb.OleDbCommand(“select   *   from   treenode”,   MyConn)  
                  ‘填充数据集  
                  myAdapter.Fill(mySet,   “treenode”)  
          End   Sub  
  与数据库相关的节点操作:  
  (1)添加节点  
      1.1   节点的树型添加  
                  //程序的功能是在点击的节点下面添加新节点  
                  Dim   tmpNd3   As   New   Microsoft.Web.UI.WebControls.TreeNode()  
                  Dim   NdSel   As   New   Microsoft.Web.UI.WebControls.TreeNode()  
                  ‘NdSel   为当前选定的要删除节点,tmpNd3为它的父节点    
                  NdSel   =   Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)  
                  ‘要添加的节点的各个属性  
                  tmpNd3.ID   =   111  
                  tmpNd3.Text   =   “aaa”  
                  ‘用nodes.add添加节点  
                  NdSel.Nodes.Add(tmpNd3)  
                         
          1.2   数据库中的节点添加操作  
                          //数据库连接语句在此省略  
                          ‘在运行时连接,并设置连接属性  
                          Dim   insertcomm   =   New   System.Data.OleDb.OleDbCommand()  
                          ‘定义存储命令的各种属性  
                          insertcomm.CommandText   =   “insert   into   treebasic(id,parentid,name)             values(‘”   &   pid   &   “‘,’”   &   parid   &   “‘,’”   &   nodetext   &   “‘)”  
                          insertcomm.Connection   =   MyConn  
                          ‘打开连接、执行命令  
                          MyConn.Open()  
                          insertcomm.ExecuteNonQuery()  
                          MyConn.Close()  
  (2)修改节点  
      2.1   节点属性的树型修改  
                  Dim   tmpNd3   As   New   Microsoft.Web.UI.WebControls.TreeNode()  
                  ‘tmpNd3   为当前选定的节点  
                  tmpNd3   =   Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex)  
                  tmpNd3.Text   =   “aaa”  
      2.2   数据库中的节点属性修改操作  
                          ‘定义修改命令的属性  
                          Dim   updatecomm   =   New   System.Data.OleDb.OleDbCommand()  
                          ‘定义修改命令的各种属性  
                              updatecomm.CommandText   =   “update   treebasic   set   name=’”   &   nodetext   &   “‘   ,remark=’”   &   remark   &   “‘   ,links=’”   &   purl   &   “‘   where   payid=”   &   CInt(pid)   &   “”  
                          updatecomm.Connection   =   MyConn  
                          ‘打开连接、执行命令  
                          MyConn.Open()  
                          updatecomm.ExecuteNonQuery()  
                          MyConn.Close()  
   
   
  查找节点并展开的例子,你看看:  
                  Private   Sub   findandexpand_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)                                                                                                                                                             Handles   Button1.Click  
   
                  ‘Treepaybasic.Nodes(0)   为树的跟节点,从根节点找起  
                  If   (Treepaybasic.Nodes(0).Text   =   Me.TextBox1.Text)   Then  
                          Treepaybasic.SelectedNodeIndex   =   “0″  
                  Else  
                  ‘要找的节点不是根节点,调用递归函数查找  
                          findnode(Treepaybasic.Nodes)  
                  End   If  
                End   Sub  
        ‘查找节点的函数  

标签:
SQLite faq - 二月 4, 2010 by yippee

(1) 如何创建自增字段?



简单的回答:一个声明为 INTEGER PRIMARY KEY 的字段将自动增加。


这里是详细的答案: 从 SQLite 的 2.3.4 版本开始,如果你将一个表中的一个字段声明为 INTEGER PRIMARY KEY,那么无论你何时向该表的该字段插入一个 NULL 值,这个 NULL 值将自动被更换为比表中该字段所有行的最大值大 1 的整数;如果表为空,那么将被更换为 1。比如,假设你有这样的一张数据表:


CREATE TABLE t1(
a INTEGER PRIMARY KEY,
b INTEGER
);

在这张数据表里,声明


INSERT INTO t1 VALUES(NULL,123);

在逻辑意义上等价于:


INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123);

一个新的API函数 sqlite3_last_insert_rowid() 返回最近的插入操作的整形键


注意这个整型键始终比之前插入表中的最后一个键大1。新键相对于表中的已有键来说是唯一的, 但它可能与之前从表中删除的键值重叠。要始终得到在整个表中唯一的键,在INTEGER PRIMARY KEY的声明之前加关键词AUTOINCREMENT.这样被选的键将总是比表中已存在的最大键大1。若可能的 最大键已存在于表中,INSERT操作将失败并返回一个SQLITE_FULL错误码.



(2) SQLite 支持哪些数据类型?



参见 http://www.sqlite.org/datatype3.html.



(3) 为什么能向 SQLite 数据库的整型字段中插入字符串?



这是一个功能,不是一个 bug。你可以在任何字段中放任何信息,而不用管字段声明为什么类型。 你可以往整型字段中插入任意长度的字符串,或者往布尔字段中插入浮点数,或者往字符字段中 插入日期。在 CREATE TABLE 命令中你指定给这个字段的数据类型不会限制插入这个字段的数据。 所有的字段可以插入任意长度的字符串。但对于 INTEGER PRIMARY KEY 字段例外。这种字段只能 存放一个64位的整数,否则会出错。


但SQLite会默认你希望使用声明的字段类型。所以,比如你希望在一个声明为INTEGER的字段 中插入一个字符串,SQLite会试图将其转换为一个整数。如果转换成功,那么整数将被插入,否 则插入字符串,这种特性有时被称作type or column affinity.



(4) 为什么 SQLite 认为表达式 ‘0′==’00′ 为真?



在 2.7.0 之后,表达式不成立。参见文档 datatypes in SQLite version 3



(5) 为什么 SQLite 不允许在同一张表里使用 ‘0′ 和 ‘0.0′ 作为两个不同的行的主键?



你的主键一定是数值类型的,把类型改为 TEXT 就可以了。


每一行必须有一个唯一的主键。作为一个数字类型的字段,SQLite 认为 ‘0′‘0.0′的值是相同的, 因为他们在数字上的比较是相等的(看前面的问题)因此值不是唯一的。



(6) 为什么不能在 Linux box 中读取在 SparcStation 中创建的 SQLite 数据库?



你需要升级你的 SQLite 库到 2.6.3 或更新版本。


x86 处理器是 little-endian 型的而 Sparc 是 big-endian 型的。新版本的 SQLite 解决了这个问题。


注:   big endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian。



(7) 多个应用程序或者同一个应用程序的多个例程能同时存取同一个数据库文件吗?



多进程可以同时打开同一个数据库,也可以同时 SELECT 。但只有一个进程可以立即改数据库。


SQLite使用读/写锁定来控制数据库访问。(Win95/98/ME 操作系统缺乏读/写锁定支持,在低于 2.7.0 的版本中,这意味着在 windows 下在同一时间内只能有一个进程读数据库。在版本 2.7.0 中 这个问题通过在 windows 接口代码中执行一个用户间隔几率读写锁定策略解决了。) 但如果数据库文件在一个 NFS 文件系统中,控制并发读书的锁定机制可以会出错。因为 NFS 的fcntl() 文件锁定有时会出问题。如果有多进程可能并发读数据库则因当避免把数据库文件放在 NFS 文件系统中。 根据微软的文档,如果不运行 Share.exe 后台程序则 FAT 文件系统中的锁定可能不工作。对 Windows 非常有经验的人告诉我网络文件的锁定有许多问题并且不可靠。如果是这样,在2个或以上 Windows 系统中共享一个 SQLite 数据库文件会导致不可预知的问题。


我们知道没有其他的嵌入式 SQL数据库引擎比SQLite支持更多的并发性。 SQLite允许多进程 同时打开和读取数据库。任何一个进程需要写入时,整个数据库将在这一过程中被锁定。但这一般仅耗时 几毫秒。其他进程只需等待然后继续其他事务。其他嵌入式SQL数据库引擎往往只允许单进程访问数据库。


但是,client/server型的数据库引擎 (如 PostgreSQL, MySQL, 以及 Oracle) 通常支持更高的并发度, 并支持多进程同时写入同一个数据库。由于总有一个控制良好的服务器协调数据库的访问,这才保证了以上 特性的实现。如果你的应用需要很高的并发度,你应该考虑使用client/server数据库。事实上,经验告诉 我们大多数应用所需要的并发度比他们的设计者们想象的要少得多。


当 SQLite 尝试操作一个被另一个进程锁定的文件时,缺省的行为是返回 SQLITE_BUSY。你可以用 C代码更改这一行为。 使用 sqlite3_busy_handler()sqlite3_busy_timeout() API函数。


如果两个或更多进程同时打开同一个数据库,其中一个进程创建了新的表或索引,则其它进程可能不能立即看见新的表。其它进程可能需要关闭并重新连结数据库。



(8) SQLite是线程安全的吗?



有时候是的。为了线程安全,SQLite 必须在编译时把 THREADSAFE 预处理宏设为1。在缺省的发行的已编译版本中 Windows 版的是线程安全的,而 Linux 版的不是。如果要求线程安全,Linux 版的要重新编译。


“线程安全”是指二个或三个线程可以同时调用独立的不同的sqlite3_open() 返回的”sqlite3“结构。而不是在多线程中同时使用同一个 sqlite3 结构指针。


一个sqlite3结构只能在调用 sqlite3_open创建它的那个进程中使用。你不能在一个线程中打开一个数据库然后把指针传递给另一个线程使用。这是因为大多数多线程系统的限制(或 Bugs?)例如RedHat9上。在这些有问题的系统上,一个 线程创建的fcntl()锁不能由另一个线程删除或修改。由于SQLite依赖fcntl()锁来进行并发控制,当在线程间传递数据库连接时会出现严重的问题。


也许在Linux下有办法解决fcntl()锁的问题,但那十分复杂并且对于正确性的测试将是极度困难的。因此,SQLite目前不允许在线程间共享句柄。


在UNIX下,你不能通过一个 fork() 系统调用把一个打开的 SQLite 数据库放入子过程中,否则会出错。



(9) 如何列出一个 SQLite 数据库中的所有的表/索引?



sqlite3 命令行程序中你可以用命令 “.tables” 来显示所有的表或者用 “.schema“来显示所有的表结构和索引。但命令后不要跟 LIKE 语句,否则会限制表的显示。


在 C/C++ 程序中 (或使用 Tcl/Ruby/Perl/Python绑定的脚本中)你可以通过访问名为”SQLITE_MASTER的表来实现。每个 SQLite 数据库有一个 SQLITE_MASTER 表,表内有数据库的结构。SQLITE_MASTER表是这样的:


CREATE TABLE sqlite_master (
type TEXT,
name TEXT,
tbl_name TEXT,
rootpage INTEGER,
sql TEXT
);

对于表来说,type字段的值为‘table’name 字段是表的名称。使用以下语句可以等到所有表的列表:


SELECT name FROM sqlite_master
WHERE type=’table’
ORDER BY name;

对于索引来说, type = ‘index’, name 是索引的名称, tbl_name 是索引所属的表的名称。对于表和索引,sql 字段是创建表或索引的原始语句文本。对于自动创建的索引(一般是使用 PRIMARY KEY 或 UNIQUE 创建的),sql字段为 NULL.


SQLITE_MASTER表是只读的。你不能对该表使用 UPDATE, INSERT, 或 DELETE。该表自动由 CREATE TABLE, CREATE INDEX, DROP TABLE 和 DROP INDEX 命令更新。


临时表及其索引不在 SQLITE_MASTER 表中而在 SQLITE_TEMP_MASTER 中出现。SQLITE_TEMP_MASTER 与 SQLITE_MASTER 表一样工作,但只对于创建临时表的程序可见。要得到所在表包括临时表可以使用如下命令:


SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type=’table’
ORDER BY name


(10) SQLite数据库是否有已知的大小限制?



数据库大小被限制在 2TB(241 bytes). 这是理论限制。事实上,你应该把 SQLite数据库的大小限制在100GB以下,以免出现运行性能上的问题。如果你需要储存100GB或更多数据在一个数据库中, 考虑使用为此而设计的企业版数据库吧。


一个数据库的理论行数限制是 264-1,显然你会在达到行数限制之前先超过文件大小的限制。目前一行可以存放 230 bytes 数据。而基本的文件格式可以支持行大小到约 262 bytes.


可能还会有对于表、索引的数目或表和索引中的字段数的限制,但没人知道是多少。事实上,每当新数据库打开时,SQLite需要读取和 分析所有表和索引声明的初始SQL,所以,为了调用 sqlite3_open() 时获得最佳性能,最好减少声明的表的数目。同样的,即使 对于表中字段数没有限制,多于100个也显得太多了。 只有表开头的31个字段会得到优化。你可以在一个索引中放入任意多的字段但超过30字段的索引将不用于优化查询。


表,索引,视图,触发器和字段名称可以任意长,但SQL 函数名 (由 sqlite3_create_function() API创建的)不得超过255个字符。



(11) 在 SQLite 中 VARCHAR 的最大长度是多少?



SQLite不强制VARCHAR的长度。你可以声明一个VARCHAR(10),SQLite一样可以让你存放500个字符在里面。 并且它们会始终完整无缺——决不会被截断。



(12) SQLite 是否支持 BLOB 类型?



SQLite 3.0 版支持在任何字段存放 BLOB 数据,不管字段声明为什么类型。



(13) 如何从一个已存在的 SQLite 数据表中添加/删除字段?



SQLite有有限的ALTER TABLE支持,可以用于添加字段到表的末尾 或更改表名。如果你要对表的结构作更复杂的修改,你需要重新创建表。你可以在一个临时表中备份数据,撤销旧表,重建新表后再恢复数据。


例如,假设你有一个名为 “t1″ 的表,有名为 “a”, “b”, 和 “c” 三个字段,你要删除字段 “c” 。可按如下步骤操作:


BEGIN TRANSACTION;
CREATE TEMPORARY TABLE t1_backup(a,b);
INSERT INTO t1_backup SELECT a,b FROM t1;
DROP TABLE t1;
CREATE TABLE t1(a,b);
INSERT INTO t1 SELECT a,b FROM t1_backup;
DROP TABLE t1_backup;
COMMIT;


(14) 我删除了很多数据但是数据库文件并没有减小,是不是 Bug?



不是的。当你从 SQLite 删除数据之后,未使用的磁盘空间被添加到一个内在的“空闲列表”中用于存储你下次插入的数据。磁盘空间并没有丢失,但是也不向操作系统返回磁盘空间。


如果你删除了大量的数据且想要减小数据库文件,执行 VACUUM命令。VACUUM 命令会清空“空闲列表”,把数据库尺寸缩到最小。注意, VACUUM 会耗费一些时间(在 Linux 系统下大约0.5秒/兆)并且要使用两倍于数据库文件大小的磁盘空间。


对于SQLite version 3.1, 替代VACUUM命令的一个方法是auto-vacuum模式,用 auto_vacuum pragma语法开启该模式。



(15) 是否能将 SQLite 用于商业用途而不用交版权费用?



可以。SQLite 是公开的。代码的任何部分都没有声明所有权。你可以用它来做你想要的任何事情。



(16) 如何插入有单引号(’)的字符串?



使用双单引号即可,例如:


    INSERT INTO xyz VALUES(‘5 O”clock’);


插入数据库的是:5 0′clock。



(17) SQLITE_SCHEMA 错误代表什么?



在 SQLite 版本3中,当一个预处理 SQL 语句不合法不能执行时就会返回一个 SQLITE_SCHEMA 错误。当这个错误发生时,该语句应当用 sqlite3_prepare() API函数重新编译。在 SQLite 版本3中,只有使用 sqlite3_prepare()/sqlite3_step()/sqlite3_finalize() API函数执行 SQL 才会发生这个错误,而使用 sqlite3_exec(). 则不会。这与版本2不同。


大部分发生这个错误的原因是当 SQL 预处理完时数据库已经改变了(可能是被另一个进程改变的)。还可能有如下原因:



  • 对一个数据库进行DETACH操作

  • 对一个数据库进行VACUUM操作

  • 一个用户函数定义被删除或改变了。

  • 一个排序定义被删除或改变了。

  • 一个授权函数改变了。

解决的办法是重新编译并再次尝试执行。所有涉及 sqlite3_prepare()/sqlite3_step()/sqlite3_finalize() API 函数的都应当重新编译。参见下例:


    int rc;
sqlite3_stmt *pStmt;
char zSql[] = “SELECT …..”;

do {
/* Compile the statement from SQL. Assume success. */
sqlite3_prepare(pDb, zSql, -1, &pStmt, 0);

while( SQLITE_ROW==sqlite3_step(pStmt) ){
/* Do something with the row of available data */
}

/* Finalize the statement. If an SQLITE_SCHEMA error has
** occured, then the above call to sqlite3_step() will have
** returned SQLITE_ERROR. sqlite3_finalize() will return
** SQLITE_SCHEMA. In this case the loop will execute again.
*/
rc = sqlite3_finalize(pStmt);
} while( rc==SQLITE_SCHEMA );



(18) 为什么ROUND(9.95,1) 返回 9.9 而不是 10.0? 难道9.95 不该向上进位么?



SQLite 内部使用二进制运算,9.95用 64-bit IEEE 浮点数 ( SQLite 内部使用的) 表示为9.949999999999999289457264239899814128875732421875。所以当你输入 “9.95″时,SQLite 就理解为上述的数字,进而四舍五入得到9.9。这个问题在处理浮点二进制数总会产生。通常的规则是十进制的有限浮点数通常无法表示为二进制有限浮点数,只能由最接近的二进制数来代替。这个近似数会非常接近原数,但总一些细微的不同,所以可能无法得到你预期的结果。

标签:
SQLite内建函数表 - 二月 3, 2010 by yippee

SQLite内建函数表






 

算术函数 
abs(X) 返回给定数字表达式的绝对值。
max(X,Y[,...]) 返回表达式的最大值。
min(X,Y[,...]) 返回表达式的最小值。
random(*) 返回随机数。
round(X[,Y]) 返回数字表达式并四舍五入为指定的长度或精度。
字符处理函数 
length(X) 返回给定字符串表达式的字符个数。
lower(X) 将大写字符数据转换为小写字符数据后返回字符表达式。
upper(X) 返回将小写字符数据转换为大写的字符表达式。
substr(X,Y,Z) 返回表达式的一部分。
randstr()  
quote(A)  
like(A,B) 确定给定的字符串是否与指定的模式匹配。
glob(A,B)  
条件判断函数 
coalesce(X,Y[,...])  
ifnull(X,Y)  
nullif(X,Y)  
集合函数 
avg(X) 返回组中值的平均值。
count(X) 返回组中项目的数量。
max(X) 返回组中值的最大值。
min(X) 返回组中值的最小值。
sum(X) 返回表达式中所有值的和。
其他函数 
typeof(X) 返回数据的类型。
last_insert_rowid() 返回最后插入的数据的ID。
sqlite_version(*) 返回SQLite的版本。
change_count() 返回受上一语句影响的行数。
last_statement_change_count()  

标签:
excel tip 1 - 二月 2, 2010 by yippee

Excel排序技巧汇总
http://www.360doc.com/content/10/0128/13/458330_14582103.shtml



excel筛选怎么用?_百度知道
http://zhidao.baidu.com/question/53340257.html?fr=ala0



Excel筛选功能应用-软件频道-Excel-天极网
http://www.yesky.com/109/1721109.shtml



Excel中文本排序后如何在同样的客户名称前自动标注同样的序号_百度知道
http://zhidao.baidu.com/question/104392173.html



Excel分类汇总问题_百度知道
http://zhidao.baidu.com/question/4593434.html?fr=ala0



Excel分类显示表单数据的技巧 – 新农村商网
http://nc.mofcom.gov.cn/news/10507389.html



在Excel表格中如何设置序号自动排列—杜子电脑学习网
http://www.duzi.cn/article/2007-8-3/14212-1.htm



在excel表格里序号自动排列_远方……_百度空间
http://hi.baidu.com/oursun/blog/item/66f3fa1fe052e7f7e0fe0bf8.html
假定A列为序号,请在A1单元格输入公式:
=row()
将公式向下复制就可以了。
如果第一行为表头,第二行开始是序号1,请将A2单元格公式改为:
=ROW()-1


在EXCEL如何自动添加序号_excel吧_百度贴吧
http://tieba.baidu.com/f?kz=515204308
1.按住鼠标左键拖动选中你要填充序列的前两项或者三项;
2.左键不放将鼠标移动到选中区域边框处,这时鼠标将变成“+”;
3.左键依然不放,拖选你要填充的所有区域;
4.松开左键,序列自动填好


教你用好Excel中的各种序号-MSOFFICE-eNet网络学院-中国最权威的电脑教程软件资讯网站
http://www.enet.com.cn/article/2005/0310/A20050310396971_2.shtml
 自动输入序号  


  Word中有个自动输入序号的功能,其实在Excel中也有这个功能,可以使用函数来实现。点击A2单元格输入公式:=IF(B2=”",”",COUNTA($B$2:B2)),然后把鼠标移到A2单元格的右下方,鼠标就会变成十字形状,按住拖拽填充到A列下面的单元格中,这样我们在B列输入内容时,A列中就会自动输入序号了(如图3)。
  


 

标签:
IScrollInfo wpf - 二月 1, 2010 by yippee

WPF数据绑定之数据模板_Asp.net教程_.Net教程_Vb.net教程_Vc.net_C#编程
http://dotnet.chinaitlab.com/ASPNET/769410_4.html



在WPF中,让button显示为一个Image – cruelchen的日志 – 网易博客
http://cruelchen.blog.163.com/blog/static/786918442009112352149525/



WPF中的传递事件
http://www.360doc.com/content/07/0910/23/37777_734492.shtml



WPF界面设计技巧(2)—自定义漂亮的按钮样式(上)(1) – WPF – 技术应用 – 豆豆网
http://tech.ddvip.com/2008-11/122587195689306.html



wpf textbox控制只输入数字_开始学习_百度空间
http://hi.baidu.com/dlscorpion/blog/item/7be4f9d4fe30712507088ba9.html
e.Handled = true;


WPF数据绑定 – 杨德龙的专栏 – CSDN博客
http://blog.csdn.net/yangdelong/archive/2009/12/17/5026162.aspx



WPF or Silverligth使用WGrid和ScrollViewer自定义GridView控件(附源码) – Richard_jun’s Blog – CSDN博客
http://blog.csdn.net/xingjunli/archive/2009/12/03/4933790.aspx



在Microsoft Expression Blend 2 中绘制圆角矩形按钮 – 大可山博客[GDI+,WPF, .Net图形图像] – CSDN博客
http://blog.csdn.net/johnsuna/archive/2007/08/13/1740781.aspx



使用WPF创建炫亮按钮 – 大可山博客[GDI+,WPF, .Net图形图像] – CSDN博客
http://blog.csdn.net/johnsuna/archive/2007/08/07/1729039.aspx



WPF常见问题的问与答[1] – 大可山博客 – ITPUB个人空间 – powered by X-Space
http://space.itpub.net/14601556/viewspace-528479
Border


Working with a ScrollViewer control in a WPF application
http://www.c-sharpcorner.com/UploadFile/yougerthen/208122008110245AM/2.aspx



跟老外学Silverlight游戏 之四 粒子特效 – {GnieTech} – 博客园
http://www.cnblogs.com/gnielee/archive/2010/01/02/1637921.html



WPF编游戏系列 之二 图标效果 – {GnieTech} – 博客园
http://www.cnblogs.com/gnielee/archive/2009/12/09/1620086.html
//创建模糊BlurEffect对象 BlurEffect newBlurEffect = new BlurEffect();
//设定模糊效果值Radius newBlurEffect.Radius = 5;
//为Image添加Blur效果 image.Effect = newBlurEffect;


教你如何理解WPF中的Template类 – Svn中文网
http://www.svn8.com/dotnet/Csharp/2010011718059.html



WPF控件模板范例_I think therefore I am._百度空间
http://hi.baidu.com/wingingbob/blog/item/0809d335d43cc91691ef3930.html



WPF中的模板 – Lin’s Technology Blog – CSDN博客
http://blog.csdn.net/lin33274/archive/2007/09/10/1779348.aspx



共享空间标题 的日志 — Windows Live
http://eparg.spaces.live.com/?_c11_BlogPart_pagedir=Next&_c11_BlogPart_handle=cns!59BFC22C0E7E1A76!2892&_c11_BlogPart_BlogPart=blogview&_c=BlogPart



BenCon’s WebLog : IScrollInfo in Avalon part I
http://blogs.msdn.com/bencon/archive/2006/01/05/509991.aspx
<Window x:Class=”AnnoyingPanelSample.Window1″


    xmlns=”http://schemas.microsoft.com/winfx/avalon/2005


    xmlns:x=”http://schemas.microsoft.com/winfx/xaml/2005


    Title=”AnnoyingPanelSample”


    xmlns:local=”local”


    >


  <ScrollViewer CanContentScroll=”True”>


    <local:AnnoyingPanel>


      <Button>button</Button>


    </local:AnnoyingPanel>


  </ScrollViewer>


</Window>


 

标签:,
Mouse.MoveTo - 一月 31, 2010 by yippee

Ivo Manolov’s Blog : Introduction to TestApi – Part 1: Input Injection APIs
http://blogs.msdn.com/ivo_manolov/archive/2008/12/15/9223397.aspx



Simulate mouse Enter/Move/Leave on WPF control without real mouse usage
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/0555c1ea-5b0f-4c5e-863c-b54eb510ad40
Point screenCoordinates = this.sayHello.PointToScreen(new Point(0, 0));
Size size = new Size(this.sayHello.ActualWidth, this.sayHello.ActualHeight);


System.Drawing.Point clickLocation =
    new System.Drawing.Point(
        (int)(screenCoordinates.X + size.Width / 2),
        (int)(screenCoordinates.Y + size.Height / 2));


// Move the mouse to the point. Then click
Microsoft.Test.Input.Mouse.MoveTo(clickLocation);


.net中模拟键盘和鼠标操作 – 六十点击量 – 博客园
http://www.cnblogs.com/sixty/archive/2009/08/09/1542210.html



WPF and Silverlight 学习笔记(十四):键盘输入、鼠标输入、焦点处理 – WPF – 拼吾爱程序人生 – 最新编程技术的学习网站
http://www.pin5i.com/showtopic.aspx?topicid=24091&forumpage=1&onlyauthor=1



.net中模拟键盘和鼠标操作
http://www.3648.com/article/20091011/65459.html



wpf中如何模拟键盘输入?
http://topic.csdn.net/u/20090826/09/e39cecbf-97d2-4afd-92b8-6fcbfac94d48.html


http://www.cnblogs.com/sixty/archive/2009/08/09/1542210.html


WPF and Silverlight 学习笔记(十四):键盘输入、鼠标输入、焦点处理 – 龙腾于海 – 博客园
http://www.cnblogs.com/DragonInSea/archive/2009/06/24/1439595.html



how do I programmatically set the selected row? – GridView Forum – WPF Controls
http://www.telerik.com/community/forums/wpf/gridview/how-do-i-programmatically-set-the-selected-row.aspx



Select Row – GridView Forum – WPF Controls
http://www.telerik.com/community/forums/wpf/gridview/select-row.aspx



Vincent Sibal’s Blog : .NET 3.5 SP1 and WPF DataGrid CTP are out now!
http://blogs.msdn.com/vinsibal/archive/2008/08/11/net-3-5-sp1-and-wpf-datagrid-ctp-is-out-now.aspx



Grabing controls from a DataGrid
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/63974f4f-d9ee-45af-8499-42f29cbc22ae



How to programmatically select AND focus a cell in the new WPF Datagrid
http://social.msdn.microsoft.com/Forums/en/wpf/thread/89df8b8f-29b8-4915-b2b6-e153e05f9ca9



Current Row in WPF Data Grid : Microsoft, WPF, SP1
http://www.experts-exchange.com/Microsoft/Development/Microsoft_Programming/WPF_and_Silverlight/Q_23955682.html



Ways to identify which cell was clicked on WPF Grid?
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/27043991-afb4-4caa-9899-ef1db8d9d5f8



Addressing a Single Cell in a WPF Grid
http://visualbasic.about.com/b/2010/01/21/addressing-a-single-cell-in-a-wpf-grid.htm



如何選擇內容不重複的節點, 給 100 份 Web 开发 / JavaScript – CSDN社区 community.csdn.net
http://topic.csdn.net/t/20020325/15/598531.html
selectNodes


Addressing a Single Cell in a WPF Grid
http://visualbasic.about.com/b/2010/01/21/addressing-a-single-cell-in-a-wpf-grid.htm



Grid控件的使用
http://www.myfirm.cn/20084/20080426081856478.html



C#中Hashtable Dictionary的使用方法探索 – alex_kame的日志 – 网易博客
http://blog.163.com/alex_kame/blog/static/1454674820097299374540/



C# Dictionary和HashTable中遍历Keys怎么写? – 为什么
http://www.hbzxr.com/web/36/2027736-1197521.html



C# Dictionary和HashTable中遍历Keys怎么写? – 为什么
http://www.hbzxr.com/web/36/2027736-1197521.html



C# Dictionary<>和HashTable中遍历Keys怎么写?_百度知道
http://zhidao.baidu.com/question/81240445.html



C# Dictionary<>和HashTable中遍历Keys怎么写?_百度知道
http://zhidao.baidu.com/question/81240445.html



Find distinct value in XML – 无所从来 亦无所去 – 博客园
http://www.cnblogs.com/krone/articles/367067.html



How to get row index of the selected cell in WPF grid – Stack Overflow
http://stackoverflow.com/questions/1761968/how-to-get-row-index-of-the-selected-cell-in-wpf-grid



 

标签:
linux apache svn Android - 一月 30, 2010 by yippee

Android 1.6 NDK, Release 1 | Android Developers
http://developer.android.com/sdk/ndk/1.6_r1/index.html



anroid ndk文档翻译之一:android ndk一览 – Android专区 – 搜狐开发者公社 – iPhone,Android,Symbian手机开发者交流专区
http://mi.it.sohu.com/forums/redirect.php?tid=116&goto=lastpost



用YLMF提供的Wubi-hd.exe进Ylmf-linux-Y1.15.iso的LiveCD模式成功|Ylmf OS 学习园地 – 雨林木风交流论坛[WwW.YlmF.Net] – 专业的电脑技术精英培养基地!
http://www.ylmf.net/read.php?tid=1372183



关于linux下APACHE+SVN_筱子未央_百度空间
http://hi.baidu.com/xclist/blog/item/5ef7caf4154d2c64dcc474eb.html



Linux下apache和svn的整合 – - JavaEye技术网站
http://silencon.javaeye.com/blog/455690
安装了apache后,接下来可以和svn整合在一起了
1.先下载svn的tar.gz包
2.解压 tar zxf  svbversion.1.4.0.tar.gz
3.配置  ./configure –with-apxs=/opt/apache/bin/apxs –prefix=/opt/subversion –with-apr=/opt/apr –with-apr-util=/opt/apr-util
4.make(当时make出错)
错误是cannot find lexpat
解决办法是:安装 sudo apt-get install expat
 之后做两个连接:ln -sf /usr/lib/libexpat
                 ln -sf /usr/lib/libexpat.so.1  /usr/lib/libexpat.so
5.再一次编译 make
6.makestall
7.成功之后查看,在apache/modules 里面是否多了2个跟svn相关的.so 文件
  还有就是在apache/conf/httpd.conf 文件的最后是否多了两行Loadmodule 跟是svn的内容
8.到/opt/svbversion1.4.0/bin
 执行 sudo ./svnadmin create /home/svnroot/test1 //创建svn库
9.httpd.conf下添加如下内容
  <Location /svn>
      DAV svn
      SVNPath /home/svnroot/test1
  <Location>
10启动apache


Linux系统RedHat9.0 上配置SVN+APACHE服务参考 – Tech – JavaEye论坛
http://www.javaeye.com/topic/470516



svn 代码库创建 简单手册 – 项目管理 – develop – JavaEye论坛
http://www.javaeye.com/topic/290278



为何父文件夹不能看到版本库? – Windows下Subversion安装使用 – SVN中文论坛 – Powered by Discuz!
http://www.iusesvn.com/bbs/thread-72-1-1.html



解决了svn的问题:”Could not open the requested SVN filesystem”_游戏角色空间_百度空间
http://hi.baidu.com/gamerole/blog/item/562ccaef7b244236acafd5ca.html



svn again Could not open the requested SVN filesystem error after recovery — Windows Live
http://dulltechman.spaces.live.com/Blog/cns!E4697FC9DEE0B7B1!134.entry



–解决了svn的问题:”Could not open the requested SVN filesystem”
http://www.w3china.org/blog/more.asp?name=lhwork&id=32236



TortoiseSVN访问VisualSVN Server:Could not open the requested SVN filesystem。解决方法!! – sahusoft的专栏 – CSDN博客
http://blog.csdn.net/sahusoft/archive/2009/07/26/4381278.aspx



Linux下apache+svn的安装与配置 – itkan的专栏—在路上 – CSDN博客
http://blog.csdn.net/itkan/archive/2008/06/12/2539372.aspx
修改apache配置文件,该文件位于/usr/local/apache/conf/httpd.conf


       //找到下列语句,如果没有则自行添加


      LoadModule dav_svn_module modules/mod_dav_svn.so


      LoadModule authz_svn_module modules/mod_authz_svn.so


       //在后面添加


      <Location /svn>


      DAV svn


      SVNParentPath /home/svnroot/repository/ //svn父目录


      AuthzSVNAccessFile /home/svnroot/repository/authz.conf //权限配置文件,本文件需要自己建立


      AuthType Basic //连接类型设置


      AuthName “Subversion.zoneyump” //连接框提示


      AuthUserFile /home/svnroot/repository/passwd //用户配置文件,通过htpasswd命令添加


      Require valid-user //采用何种认证


      </Location>


7、  权限管理


       (1)增加用户


       # htpasswd -c /home/svnroot/repository/authfile 用户名


       //第一次设置用户时使用-c表示新建一个用户文件。回车后输入用户密码,完成对用户的增加


       # htpasswd  /home/svnroot/repository/authfile 用户名(加入新的用户,就不用-c了)


       (2)权限分配


       # vi /home/svnroot/repository/authz.conf


       [groups]


       admin=useradmin


       devteamcs = useradmin,user1,user2//这里定义了一个用户组


       [/]//对所有的项目,所有的用户都有读权限,admin用户有读写权限


       @admin = rw


       * = r


       [test:/]//对test项目,


       @devteamcs = rw


8、  修改/usr/local/apache/conf/httpd.conf文件,找到以下两行:


       User daemon


       Group daemon


        // 将daemon改为svnroot,组也做相应更改,让apache进程以svnroot的身份运行


       //改完后是这个样子


       User svnroot


       Group svn


9、  启动apache命令


       # /usr/local/apache/bin/apachectl start(restart,stop)


       访问http://localhost/svn/test ,现在需要身份验证,且通过验证后应该可以看到信息


 

标签:, , ,
Transparent CoverFlow wpf - 一月 29, 2010 by yippee

WPF Frame control with source property always on top? – Stack Overflow
http://stackoverflow.com/questions/1727914/wpf-frame-control-with-source-property-always-on-top



How to add a Page to Frame using code in WPF – Stack Overflow
http://stackoverflow.com/questions/138096/how-to-add-a-page-to-frame-using-code-in-wpf



扩展 WPF 动画类(1) – WPF – 技术应用 – 豆豆网
http://tech.ddvip.com/2008-11/122569636688413.html



演练:创建自定义的动画按钮
http://msdn.microsoft.com/zh-cn/library/bb613593.aspx



[WPF] 手把手教你做“咖啡”按钮
http://topic.csdn.net/u/20090124/18/ad42ee0a-8e22-4fc2-8409-9780289a4563.html



演练:使用 Microsoft Expression Blend 创建按钮
http://msdn.microsoft.com/zh-cn/library/bb613598.aspx



演练:使用 XAML 创建按钮
http://msdn.microsoft.com/zh-cn/library/bb613545.aspx



用WPF轻松打造iTunes CoverFlow效果 – this.Study(DateTime.Now) – 博客园
http://www.cnblogs.com/zhouyinhui/archive/2007/09/27/908213.html



WPF Flickr Viewer Using XLINQ – CodeProject
http://www.codeproject.com/KB/WPF/WPFFlickr.aspx



Stream YouTube Videos In WPF – CodeProject
http://www.codeproject.com/KB/WPF/YouViewer.aspx?msg=2807071



Google Image Result for http://devhawk.net/content/binary/WindowsLiveWriter/IronPythonandWPF_EFC4/image_thumb_1.png
http://images.google.com/imgres?imgurl=http://devhawk.net/content/binary/WindowsLiveWriter/IronPythonandWPF_EFC4/image_thumb_1.png&imgrefurl=http://devhawk.net/2008/11/13/IronPython%2BAnd%2BWPF%2BPart%2B1%2BIntroduction.aspx&usg=__nQZkwOjgLCmFEjLcbf-QwBfsn_A=&h=380&w=684&sz=496&hl=en&start=33&tbnid=KUmEc6BIiPSEhM:&tbnh=77&tbnw=139&prev=/images%3Fq%3Dwpf%2Bphoto%2Bviewer%26hl%3Den%26client%3Dfirefox%26rls%3Dorg.mozilla:zh-CN:official%26sa%3DN%26start%3D20%26um%3D1%26newwindow%3D1%26ie%3DUTF-8%26oe%3DUTF-8&um=1



Google Image Result for http://www.therobotgeek.net/images/articles/WPF_Scrolling_Content/wpf_scroll_app_01.jpg
http://images.google.com/imgres?imgurl=http://www.therobotgeek.net/images/articles/WPF_Scrolling_Content/wpf_scroll_app_01.jpg&imgrefurl=http://www.therobotgeek.net/articles/WPF_Scrolling_Content.aspx&usg=__PSY6MwoS9WPnFm55GYYa_Ib8LUA=&h=414&w=440&sz=24&hl=en&start=1&tbnid=XfzP_VOwOI34PM:&tbnh=119&tbnw=127&prev=/images%3Fq%3Dwpf%2Bphoto%2Bscroll%26hl%3Den%26client%3Dfirefox%26rls%3Dorg.mozilla:zh-CN:official%26sa%3DG%26um%3D1%26newwindow%3D1%26ie%3DUTF-8%26oe%3DUTF-8&um=1



WPF: ListBox with WrapPanel, vertical scrolling problem – Stack Overflow
http://stackoverflow.com/questions/818876/wpf-listbox-with-wrappanel-vertical-scrolling-problem



WPF Arrow and Custom Shapes – CodeProject
http://www.codeproject.com/KB/WPF/wpfarrow.aspx



Creating a 3D book-shaped application with speech and ink using WPF 3.5 – CodeProject
http://www.codeproject.com/KB/WPF/3D-BookWriter.aspx



使用WPF创建画图箭头 – wmjcom的专栏 – CSDN博客
http://blog.csdn.net/wmjcom/archive/2009/04/16/4075794.aspx



A WPF Problem Solved Two Very Different Ways – Using XAML Only – Using A Custom Control – CodeProject
http://www.codeproject.com/KB/WPF/WPFProblemSolving.aspx



Styling with ControlTemplates Sample
http://msdn.microsoft.com/en-us/library/ms771597.aspx



ScrollViewer Overview
http://msdn.microsoft.com/en-us/library/ms750665.aspx



Technical Weblog of Eric Charran : Wallpaper Manager 1.0 Update
http://blogs.msdn.com/echarran/archive/2007/08/25/wallpaper-manager-1-0.aspx



9.4.2 页面导航 – 51CTO.COM
http://book.51cto.com/art/200809/91359.htm



小编博客-基于WPF YouTube桌面版Sprink预览
http://www.firingsquad.com.cn/fscn/blogs/toviewa.action?id=10524



Google Image Result for http://p.blog.csdn.net/images/p_blog_csdn_net/johnsuna/PhotoDemo.jpg
http://images.google.com/imgres?imgurl=http://p.blog.csdn.net/images/p_blog_csdn_net/johnsuna/PhotoDemo.jpg&imgrefurl=http://blog.csdn.net/johnsuna/archive/2007/10/16/1827961.aspx&usg=__YxN3jGSOH1MtJNecnLw0_8OOVqM=&h=446&w=572&sz=204&hl=en&start=3&tbnid=YiNfek7EuSzLsM:&tbnh=104&tbnw=134&prev=/images%3Fq%3Dwpf%2B%25E5%259B%25BE%25E7%2589%2587%2B%25E6%25B5%258F%25E8%25A7%2588%25E5%2599%25A8%26hl%3Den%26client%3Dfirefox%26rls%3Dorg.mozilla:zh-CN:official%26um%3D1%26newwindow%3D1%26ie%3DUTF-8%26oe%3DUTF-8&um=1



WPF Picture Viewer Control — Windows Live
http://walterwws.spaces.live.com/Blog/cns!DB04ACF98DCA67D2!412.entry



WPF Image Viewer Sample – 每个强者的内心均有掌握自己的力量 – 博客园
http://www.cnblogs.com/shark2076/archive/2007/11/14/959121.html



DDITDev : Speeding up image loading in WPF using thumbnails
http://blogs.msdn.com/dditweb/archive/2007/08/22/speeding-up-image-loading-in-wpf-using-thumbnails.aspx
thumbnails


Nigel Spencer’s Blog: Thumbnail Solutions
http://blog.spencen.com/2008/01/10/thumbnail-solutions.aspx



WPF ScrollViewer Thumbnail
http://www.thejoyofcode.com/WPF_ScrollViewer_Thumbnail.aspx



Creating thumbnails of a grid/WrapPanel or other UIElement in WPF?
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/649720e4-442c-496e-b611-3bff5659c5b5/



WPF ScrollViewer Thumbnail
http://www.thejoyofcode.com/WPF_ScrollViewer_Thumbnail.aspx



Creating a thumbnail image in WPF (using worker thread and decoding for the target size) — Windows Live
http://rrelyea.spaces.live.com/Blog/cns!167AD7A5AB58D5FE!2294.entry



Image Viewer in WPF
http://www.c-sharpcorner.com/UploadFile/mahesh/WPFImageViewer08112008222707PM/WPFImageViewer.aspx



WPF Converters – Release: WPF Converters V1.0.0.0
http://wpfconverters.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=9346



WPF: Simple Vista Image Viewer » Code Green Software
http://mel-green.com/2009/09/wpf-simple-vista-image-viewer/



Imaging Overview
http://msdn.microsoft.com/en-us/library/ms748873.aspx



演练:使用 WPF 设计器生成视频浏览器
http://msdn.microsoft.com/zh-cn/library/bb546936.aspx



WPF Photo Viewer Demo – WindowsClient.net
http://windowsclient.net/downloads/folders/wpfsamples/entry5106.aspx



Lester’s WPF blog : WPF/E 3D(like) photo app
http://blogs.msdn.com/llobo/archive/2007/02/16/wpf-e-3d-like-photo-app.aspx



Annotating an Image in WPF – CodeProject
http://www.codeproject.com/KB/WPF/AnnotatingAnImageInWPF.aspx



PhotoBooth – CodeProject
http://www.codeproject.com/KB/WPF/WPFPhotoBooth.aspx



ViNull.Com: SilverLight: A simple flickr photo viewer
http://www.vinull.com/Post/2007/10/27/silverlight-a-simple-flickr-photo-viewe.aspx



用WPF窗体打造个性化界面的图片浏览器 – 大可山博客[GDI+,WPF, .Net图形图像] – CSDN博客
http://blog.csdn.net/johnsuna/archive/2008/03/25/2218169.aspx



WPF自定义漂亮的按钮样式 – 设计前沿
http://www.wzsky.net/html/Program/net/100925.html



[趣味编程]时序图可以这样画 – this.Study(DateTime.Now) – 博客园
http://www.cnblogs.com/zhouyinhui/archive/2009/09/02/1558768.html



CoverFlow Default Navigation Panel Template – CoverFlow Forum – Silverlight Controls
http://www.telerik.com/community/forums/silverlight/coverflow/coverflow-default-navigation-panel-template.aspx



用WPF轻松打造iTunes CoverFlow效果 – this.Study(DateTime.Now) – 博客园
http://www.cnblogs.com/zhouyinhui/archive/2007/09/27/908213.html



Multi selection in a CoverFlow view
http://blog.pixelingene.com/?p=320



Adding CoverFlow into WPF?
http://social.msdn.microsoft.com/Forums/en/wpf/thread/224666bd-377c-4990-8448-665e8d1277d9



ElementFlow is now a Panel !!!
http://blog.pixelingene.com/?p=14



The ElementFlow custom control – can do CoverFlow too!
http://blog.pixelingene.com/?p=20



Coding4Fun : You need 20 pieces of flare for your application
http://blogs.msdn.com/coding4fun/archive/2008/03/27/8336076.aspx



Coding4Fun : You need 20 pieces of flare for your application
http://blogs.msdn.com/coding4fun/archive/2008/03/27/8336076.aspx



The ElementFlow custom control – can do CoverFlow too! — Windows Live
http://pavanpodila.spaces.live.com/blog/cns!9C9E888164859398!380.entry



FluidKit
http://fluidkit.codeplex.com/SourceControl/list/changesets



[原创]C#实现虚拟桌面 – 浮华过后,真金始现 – 博客园
http://www.cnblogs.com/huihui0630/archive/2008/11/02/1324871.html



特效天地——水波 – 蝈蝈俊.net – CSDN博客
http://blog.csdn.net/ghj1976/archive/2000/07/28/3071.aspx



Ozzie Rules Blogging : Setting the left & top properties of a WPF Control
http://blogs.msdn.com/charles_sterling/archive/2007/06/11/setting-the-left-top-properties-of-a-wpf-control.aspx



Rituparna’s Blog : Accessibility Issues with WPF Overlay Frame
http://blogs.msdn.com/rituparna/archive/2009/11/13/accessibility-issues-with-wpf-overlay-frame.aspx



Microsoft Windows SDK Blog : Where is UISpy.exe?
http://blogs.msdn.com/windowssdk/archive/2008/02/18/where-is-uispy-exe.aspx



UI Spy (UISpy.exe)
http://msdn.microsoft.com/en-us/library/ms727247.aspx



 

标签:
Transparent Windows in WPF - 一月 28, 2010 by yippee

基础内容:使用 WPF 在路径中呈现文本
http://msdn.microsoft.com/zh-cn/magazine/dd263097.aspx



HOW TO:建立文字裝飾
http://msdn.microsoft.com/zh-tw/library/ms752372.aspx



More WPF Animations
http://dotnetslackers.com/articles/wpf/morewpfanimations.aspx
void SkewButton_Click(object sender, RoutedEventArgs e) 
02.{ 
03.    double skew = 30; 
04.    if (Trans_SkewButton.AngleX == 30) 
05.        skew = 0; 
06.  
07.    Trans_SkewButton.AngleX = skew; 
08.    Trans_SkewButton.AngleY = skew; 
09.}   


WPF: Synchronizing animations (part 1: Using built-in features)
http://www.galasoft.ch/mydotnet/articles/article-2007060701.aspx



Animate multiple transforms from C# – WPF | Corey Schuman
http://www.85turns.com/2007/12/18/animate-multiple-transforms-from-c-wpf/



Dax Pandhi’s nAesthetic – XAML/WPF Experiment: Zoom Functionality
http://www.nukeation.net/2006/02/13/XAMLWPF+Experiment+Zoom+Functionality.aspx



动画示例库
http://msdn.microsoft.com/zh-cn/library/ms771741.aspx



WPF中的3D Wireframe – wmjcom的专栏 – CSDN博客
http://blog.csdn.net/wmjcom/archive/2009/03/31/4038397.aspx



wpf问题:在windows中有一个frame用来加载page页,假设page内有一个label,windows的代码程序中如何访问那个label?谢谢!
http://social.microsoft.com/Forums/zh-CN/wpfzhchs/thread/dd0ce16d-fcd3-4feb-919b-7d4d94218b4b/



WPF Reflections
http://itknowledgeexchange.techtarget.com/wpf/



在WPF中使用Window和Page功能创建向导_软件学园_科技时代_新浪网
http://tech.sina.com.cn/s/2009-12-21/07281182019.shtml



WPF和silverlight的区别;WPF项目里建立window和page的区别-ZOL博客
http://blog.zol.com.cn/923/article_922940.html



WPF Grid指定单元格的方式是一个糟糕的设计 – Shuhari – 博客园
http://www.cnblogs.com/shuhari/archive/2009/06/15/wpf_grid_cell.html



wpf Layout布局 (转贴) – sdzct的专栏 – CSDN博客
http://blog.csdn.net/sdzct/archive/2008/09/21/2958391.aspx



WPF控件简单总结(转载)
http://www.360doc.com/content/08/0704/10/25294_1396079.shtml



WPF Frame ScrollViewer
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/cb96b734-8f89-4df8-8353-0d8a25713bff/



Transparent Windows in WPF
http://blogs.interknowlogy.com/johnbowen/archive/2007/06/20/20458.aspx



WPF alignment stretch – Stack Overflow
http://stackoverflow.com/questions/1831286/wpf-alignment-stretch



WPF Grid in ViewBox but dont stretch cells
http://social.msdn.microsoft.com/Forums/fi-FI/wpf/thread/97b7e2e8-380d-4d66-8cec-6ec14ecd6dca



一起学WPF系列(2):第一个WPF应用程序-张玉彬
http://msdn.microsoft.com/zh-cn/dd350162.aspx
StackPanel Orientation


WPF and Silverlight 学习笔记(七):WPF布局管理之StackPanel、WrapPanel、DockPanel(2) – 豆豆网
http://tech.ddvip.com/2009-04/1239362900114458_2.html



StackPanel.Orientation 属性 (System.Windows.Controls)
http://msdn.microsoft.com/en-us/system.windows.controls.stackpanel.orientation(zh-cn).aspx



 

标签:
WPF splash screen - 一月 27, 2010 by yippee

Can I capture a snapshot with MediaElement
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/51a67a51-9880-40ec-9a42-38a547c5392c/



Stefan Olson’s Blog | A better WPF splash screen
http://www.olsonsoft.com/blogs/stefanolson/post/A-better-WPF-splash-screen.aspx



JpegBitmapDecoder Class (System.Windows.Media.Imaging)
http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.jpegbitmapdecoder.aspx



WPF Page切换(支持淡入淡出效果) – nonocast – 博客园
http://www.cnblogs.com/nonocast/archive/2009/09/27/1575189.html



WPF Splash Screen?
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/8dd49fd0-9cc9-43c6-b285-6f119ab8a32e



WPF splash screen for WinForm Application
http://social.msdn.microsoft.com/Forums/en/winforms/thread/713bc90e-ad29-4b77-811b-8ed31b2c2158



WPF Performance and .NET Framework Client Profile : Splash Screen To Improve WPF Application Perceived Cold Startup Performance
http://blogs.msdn.com/jgoldb/archive/2007/12/10/splash-screen-to-improve-wpf-application-perceived-cold-startup-performance.aspx



Managing Your WPF Splash Screen’s Lifecycle
http://www.devx.com/dotnet/Article/40085



WPF Performance and .NET Framework Client Profile : Splash Screen To Improve WPF Application Perceived Cold Startup Performance
http://blogs.msdn.com/jgoldb/archive/2007/12/10/splash-screen-to-improve-wpf-application-perceived-cold-startup-performance.aspx



How to: Get and Set the Main Application Window
http://msdn.microsoft.com/en-us/library/aa350491.aspx



WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示 – 大可山博客[GDI+,WPF, .Net图形图像] – CSDN博客
http://blog.csdn.net/johnsuna/archive/2008/04/27/2335457.aspx
ScaleTransform


WPF Tutorial – Part 1 : Transformations – CodeProject
http://www.codeproject.com/KB/WPF/TransformationsIntro.aspx



WPF 2D Transformations — CodeGuru.com
http://www.codeguru.com/csharp/csharp/cs_misc/userinterface/article.php/c12221



More WPF Animations
http://dotnetslackers.com/articles/wpf/morewpfanimations.aspx



WPF: Synchronizing animations (part 1: Using built-in features)
http://www.galasoft.ch/mydotnet/articles/article-2007060701.aspx



Animate multiple transforms from C# – WPF | Corey Schuman
http://www.85turns.com/2007/12/18/animate-multiple-transforms-from-c-wpf/
Animate


Dax Pandhi’s nAesthetic – XAML/WPF Experiment: Zoom Functionality
http://www.nukeation.net/2006/02/13/XAMLWPF+Experiment+Zoom+Functionality.aspx



Pan, Zoom & Rotate Images With WPF using C# | Dotnetwizard.net | MyDNW.com
http://dotnetwizard.net/coding/pan-zoom-rotate-images-with-wpf-using-c/



WPF – Pan & Zoom Image – Stack Overflow
http://stackoverflow.com/questions/741956/wpf-pan-zoom-image



Animations | Corey Schuman
http://www.85turns.com/category/animations/



动画示例库
http://msdn.microsoft.com/zh-cn/library/ms771741.aspx



Axiom 3D Rendering Engine
http://axiom.codeplex.com/



Animate.NET
http://animatedotnet.codeplex.com/



Animate.NET
http://animatedotnet.codeplex.com/



Beginning a Silverlight Animation framework . Blog . Compiled Experience . Silverlight Development
http://compiledexperience.com/blog/posts/Beginning-a-Silverlight-Animation-framework



 

标签:
FFMpeg mplayer 截图 - 一月 26, 2010 by yippee

Using C# & FFMPEG
http://it.toolbox.com/blogs/rymoore/using-c-ffmpeg-11334



.NET 2.0(C#)调用ffmpeg处理视频的方法 – ACH的专栏 – CSDN博客
http://blog.csdn.net/wenlin1234/archive/2009/10/28/4738452.aspx



How to Extract Video Still Frames with MPlayer | .NET Zone
http://dotnet.dzone.com/news/how-extract-video-still-frames



MPlayer – The Movie Player
http://www.mplayerhq.hu/design7/dload.html



playd: Easy to use mplayer wrapper with playlist support – The FreeBSD Forums
http://forums.freebsd.org/showthread.php?t=4059



Linux下截图命令:scrot – ACKMAN的学习日志 – 歪酷博客 Ycool.com
http://ackman.ycool.com/post.1694324.html



Using MPlayer for the command line
http://www.batushkas.com/desktop-tips/48-using-mplayer-for-the-command-line.html



求救:mencoder可否用来截图? – 多媒体应用 – 中国Linux公社论坛
http://www.linuxfans.org/bbs/thread-165254-1-1.html



mplayer截图功能 – 龙象视听 – NAGA数码社区 网络技术爱好者交流和数码生活时尚网站 – Powered by Discuz!
http://naga.800dragon.net/ebs/viewthread.php?tid=17



linux CLI下看电影截图看图攻略 – Linux学习网
http://www.5dlinux.com/article/1/2009/linux_34052.html



3.1. Command line
http://www5.mplayerhq.hu/DOCS/HTML/en/commandline.html



mplayer+ImageMagick+gimp将视频转成gif – wwthunan@126的日志 – 网易博客
http://blog.163.com/wwthunan@126/blog/static/396261352009101881622263/
mplayer -ss 0:00:20 -endpos 10 file.mov -vo jpeg:outdir=jpegdir


使用mplayer做影片预览图 – yjfkpyu的专栏 – CSDN博客
http://blog.csdn.net/yjfkpyu/archive/2009/01/03/3694990.aspx
 mplayer -ss 84 -noframedrop -nosound -vo png -frames 1 xx.rmvb


ffmpeg和Mencoder使用实例小全 – 牛++的博客,大型牛头王城 – 博客园
http://www.cnblogs.com/niuniu502/archive/2007/06/17/786112.html



视频网站截图转换一网打尽 – Video – yaosansi’s Blog
http://www.yaosansi.com/post/1272.html



Using External Libraries – FFmpeg on Windows
http://ffmpeg.arrozcru.org/wiki/index.php?title=Using_External_Libraries



SharpFFMpeg ffmpeg conversion tutoiral – Stack Overflow
http://stackoverflow.com/questions/1605428/sharpffmpeg-ffmpeg-conversion-tutoiral



C#利用FFMpeg把WMV转换为FLV – 7Keli.com的日志 – 网易博客
http://blog.163.com/da7_1@126/blog/static/10407267820091094395713/



C# ffmpeg实现影视截图 – Video – yaosansi’s Blog
http://www.yaosansi.com/post/1267.html



用ffmpeg从视频中截图(c#源代码)|Svn源代码托管服务|Bug跟踪管理平台
http://www.svnhost.cn/Article/Detail-101.shtml



ffmpeg视频截图功能的C#代码 – u00 – u00 – 和讯博客
http://u00.blog.hexun.com/4080783_d.html



使用FFmpeg从视频中截图的命令 – Java && Flex – BlogJava
http://www.blogjava.net/sl2cj/archive/2007/10/30/55188.html



使用FFmpeg从视频中截图的命令 – Video – yaosansi’s Blog
http://www.yaosansi.com/post/1275.html



 

标签:,