2012年5月16日

长尾效应

摘要: 百科名片长尾效应长尾效应,英文名称Long Tail Effect。“头”(head)和“尾”(tail)是两个统计学名词。正态曲线中间的突起部分叫“头”;两边相对平缓的部分叫“尾”。新竞争力从人们需求的角度来看,大多数的需求会集中在头部,而这部分我们可以称之为流行,而分布在尾部的需求是个性化的,零散的小量的需求。而这部分差异化的,少量的需求会在需求曲线上面形成一条长长的“尾巴”,而所谓长尾效应就在于它的数量上,将所有非流行的市场累加起来就会形成一个比流行市场还大的市场。目录长尾效应概述基本内容长尾理论与长尾效应实例验证传统行业——若隐若现的长尾效应总结语展开编辑本段长尾效应概述简单概述 长.阅读全文

posted @ 2012-05-16 13:40 myphoebe 阅读(8) 评论(0) 编辑

2012年4月25日

Android拍照、录像、录音代码范例

View Code
  1 package com.cons.dcg.collect;
  2 
  3 import java.io.File;
  4 import java.text.SimpleDateFormat;
  5 import java.util.*;
  6 import android.app.*;
  7 import android.content.Intent;
  8 import android.database.Cursor;
  9 import android.net.Uri;
 10 import android.os.AsyncTask;
 11 import android.os.Bundle;
 12 import android.os.Environment;
 13 import android.provider.MediaStore;
 14 import android.view.*;
 15 import android.widget.*;
 16 
 17 public class RecordActivity extends Activity implements OnClickListener {
 18 
 19         private static final int RESULT_CAPTURE_IMAGE = 1;// 照相的requestCode
 20         private static final int REQUEST_CODE_TAKE_VIDEO = 2;// 摄像的照相的requestCode
 21         private static final int RESULT_CAPTURE_RECORDER_SOUND = 3;// 录音的requestCode
 22        
 23         private String strImgPath = "";// 照片文件绝对路径
 24         private String strVideoPath = "";// 视频文件的绝对路径
 25         private String strRecorderPath = "";// 录音文件的绝对路径
 26 
 27         @Override
 28         protected void onCreate(Bundle savedInstanceState) {
 29                 super.onCreate(savedInstanceState);
 30                 this.setContentView(R.layout.problem_report);
 31         }
 32 
 33         @Override
 34         protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 35                 super.onActivityResult(requestCode, resultCode, data);
 36                 switch (requestCode) {
 37                 case RESULT_CAPTURE_IMAGE://拍照
 38                         if (resultCode == RESULT_OK) {
 39                                 Toast.makeText(this, strImgPath, Toast.LENGTH_SHORT).show();
 40                         }
 41                         break;
 42                 case REQUEST_CODE_TAKE_VIDEO://拍摄视频
 43                         if (resultCode == RESULT_OK) {
 44                                 Uri uriVideo = data.getData();
 45                                 Cursor cursor=this.getContentResolver().query(uriVideo, null, null, null, null);
 46                                 if (cursor.moveToNext()) {
 47                                         /** _data:文件的绝对路径 ,_display_name:文件名 */
 48                                         strVideoPath = cursor.getString(cursor.getColumnIndex("_data"));
 49                                         Toast.makeText(this, strVideoPath, Toast.LENGTH_SHORT).show();
 50                                 }
 51                         }
 52                         break;
 53                 case RESULT_CAPTURE_RECORDER_SOUND://录音
 54                         if (resultCode == RESULT_OK) {
 55                                 Uri uriRecorder = data.getData();
 56                                 Cursor cursor=this.getContentResolver().query(uriRecorder, null, null, null, null);
 57                                 if (cursor.moveToNext()) {
 58                                         /** _data:文件的绝对路径 ,_display_name:文件名 */
 59                                         strRecorderPath = cursor.getString(cursor.getColumnIndex("_data"));
 60                                         Toast.makeText(this, strRecorderPath, Toast.LENGTH_SHORT).show();
 61                                 }
 62                         } 
 63                         break;
 64                 }
 65         }
 66        
 67        
 68 
 69         /**
 70          * 照相功能
 71          */
 72         private void cameraMethod() {
 73                 Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 74                 strImgPath = Environment.getExternalStorageDirectory().toString() + "/CONSDCGMPIC/";//存放照片的文件夹
 75                 String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg";//照片命名
 76                 File out = new File(strImgPath);
 77                 if (!out.exists()) {
 78                         out.mkdirs();
 79                 }
 80                 out = new File(strImgPath, fileName);
 81                 strImgPath = strImgPath + fileName;//该照片的绝对路径
 82                 Uri uri = Uri.fromFile(out);
 83                 imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
 84                 imageCaptureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
 85                 startActivityForResult(imageCaptureIntent, RESULT_CAPTURE_IMAGE);
 86 
 87         }
 88 
 89         /**
 90          * 拍摄视频
 91          */
 92         private void videoMethod() {
 93                 Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
 94                 intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
 95                 startActivityForResult(intent, REQUEST_CODE_TAKE_VIDEO);
 96         }
 97 
 98         /**
 99          * 录音功能
100          */
101         private void soundRecorderMethod() {
102                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
103                 intent.setType("audio/amr");
104                 startActivityForResult(intent, RESULT_CAPTURE_RECORDER_SOUND);
105         }
106 
107         /**
108          * 提示信息
109          * @param text
110          * @param duration
111          */
112         private void showToast(String text, int duration) {
113                 Toast.makeText(ProblemReport.this, text, duration).show();
114         }
115 }

posted @ 2012-04-25 19:09 myphoebe 阅读(30) 评论(0) 编辑

Android Media Recorder录音播放源代码

View Code
 1 package irdc.ex07_11;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 import java.util.ArrayList;
 6 
 7 import android.app.Activity;
 8 import android.content.Intent;
 9 import android.media.MediaRecorder;
10 import android.net.Uri;
11 import android.os.Bundle;
12 import android.os.Environment;
13 import android.view.View;
14 import android.widget.AdapterView;
15 import android.widget.ArrayAdapter;
16 import android.widget.CheckedTextView;
17 import android.widget.ImageButton;
18 import android.widget.ListView;
19 import android.widget.TextView;
20 import android.widget.Toast;
21 
22 public class EX07_11 extends Activity
23 {
24   private ImageButton myButton1;
25   private ImageButton myButton2;
26   private ImageButton myButton3;
27   private ImageButton myButton4;
28 
29   private ListView myListView1;
30   private String strTempFile = "ex07_11_";
31   private File myRecAudioFile;
32   private File myRecAudioDir;// 得到Sd卡path
33   private File myPlayFile;
34   private MediaRecorder mMediaRecorder01;
35 
36   private ArrayList<String> recordFiles;
37   private ArrayAdapter<String> adapter;// 用于ListView的适配器
38   private TextView myTextView1;
39   private boolean sdCardExit;
40   private boolean isStopRecord;
41 
42   /** Called when the activity is first created. */
43   @Override
44   public void onCreate(Bundle savedInstanceState)
45   {
46     super.onCreate(savedInstanceState);
47     setContentView(R.layout.main);
48     //主要是4个控制按钮(录制,停止,播放,删除)
49     myButton1 = (ImageButton) findViewById(R.id.ImageButton01);
50     myButton2 = (ImageButton) findViewById(R.id.ImageButton02);
51     myButton3 = (ImageButton) findViewById(R.id.ImageButton03);
52     myButton4 = (ImageButton) findViewById(R.id.ImageButton04);
53     //列表出指定文件夹中所有amr格式音频文件
54     myListView1 = (ListView) findViewById(R.id.ListView01);
55     myTextView1 = (TextView) findViewById(R.id.TextView01);
56 
57     myButton2.setEnabled(false);
58     myButton3.setEnabled(false);
59     myButton4.setEnabled(false);

布局文件main.xml

View Code
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical" android:layout_width="fill_parent"
 4     android:layout_height="fill_parent" android:background="@drawable/white">
 5     <LinearLayout android:id="@+id/LinearLayout01"
 6         android:layout_width="wrap_content" android:layout_height="wrap_content">
 7         <ImageButton android:id="@+id/ImageButton01"
 8             android:layout_width="wrap_content" android:layout_height="wrap_content"
 9             android:src="@drawable/record">
10         </ImageButton>
11         <ImageButton android:id="@+id/ImageButton02"
12             android:layout_width="wrap_content" android:layout_height="wrap_content"
13             android:src="@drawable/stop">
14         </ImageButton>
15         <ImageButton android:id="@+id/ImageButton03"
16             android:layout_width="wrap_content" android:layout_height="wrap_content"
17             android:src="@drawable/play">
18         </ImageButton>
19         <ImageButton android:id="@+id/ImageButton04"
20             android:layout_width="wrap_content" android:layout_height="wrap_content"
21             android:src="@drawable/delete">
22         </ImageButton>
23     </LinearLayout>
24     <TextView android:id="@+id/TextView01" android:layout_width="wrap_content"
25         android:layout_height="wrap_content" android:textColor="@drawable/black">
26     </TextView>
27     <ListView android:id="@+id/ListView01" android:layout_width="wrap_content"
28         android:layout_height="wrap_content" android:background="@drawable/black">
29     </ListView>
30 </LinearLayout>

my_simple_list_item.xml文件

View Code
1 <?xml version="1.0" encoding="utf-8"?>
2 <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
3     android:id="@+id/myCheckedTextView1" android:layout_width="fill_parent"
4     android:layout_height="fill_parent" android:textColor="@drawable/white" /> 

权限设置

<uses-permission android:name="android.permission.RECORD_AUDIO" />

posted @ 2012-04-25 19:08 myphoebe 阅读(127) 评论(1) 编辑

Android调用Google Map

Google为android的开发者提供了一套相当完善的地图应用接口,开发者可以很方便的使用这些接口来做一些LBS应用程序。 

我所使用的开发环境是eclipse,另外再用ADT工具安装Google Maps library组件(这个库是Google APIs add-on的一部分,要确保开发环境里已经安装了这个库)。 

具体调用 google map 的流程为:网上申请Maps API Key=>创建一个MapActivity=>在地图上添加自定义图层 

 

 

一.如何获得Maps API Key?

1.在命令行里用keytool命令生成一个MD5 certificate fingerprint 

$ keytool -list -alias alias_name -keystore my-release-key.keystore

 

根据提示输入密码等信息,然后可以得到如下MD5 certificate fingerprint   

Certificate fingerprint (MD5): 94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98

只有获得了这个MD5 certificate fingerprint才可以在注册页面获取key.

 

2.注册Maps API Key

打开http://code.google. com/android/maps-api-signup.html 

 

在这个页面输入你的MD5 certificate fingerprint就可以获取Maps API Key.这里我们得到的key为   

08dkmLW5o********PgzGDxT9mb1JKOoV3Rhrlw

 

 

 

二、创建一个MapActivity

1.在eclipse中创建一个名字为HelloGoogleMaps的android工程。因为我们要调用地图API,所以在选择Build Target的时候一定要选择Google APIs。

2.编辑XML文件。

mail.xml 

<?xml version="1.0" encoding="utf-8"?>  
<com.google.android.maps.MapView  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:id="@+id/mapview"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:clickable="true"  
    android:apiKey="08dkmLW5o********PgzGDxT9mb1JKOoV3Rhrlw"  
/> 

 

  

android:apiKey即是我们刚才申请得到的Maps Key,这里一定不能出错,否则可能会无法得到map tiles。

3.修改AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
      package="com.HelloGoogleMaps"  
      android:versionCode="1"  
      android:versionName="1.0">  
        
    <uses-permission android:name="android.permission.INTERNET" />  
          
    <application android:icon="@drawable/icon" android:label="@string/app_name">   
        <activity android:name=".HelloGoogleMaps"    
                  android:theme="@android:style/Theme.NoTitleBar"  
                  android:label="@string/app_name">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
        <uses-library android:name="com.google.android.maps" />  
    </application>   
  
    <uses-sdk android:minSdkVersion="8" />  
  
</manifest>  

 

 

因为map tiles来自于google map server,所以我们需要加上

<uses-permission android:name="android.permission.INTERNET" /> 让application可以访问internet.

另外再application标签下面需要添加<uses-library android:name="com.google.android.maps" /> 指明我们要用到google map的library。

4.创建一个继承自MapActivity的类。

    package com.HelloGoogleMaps;  
      
    import android.os.Bundle;  
    import com.google.android.maps.MapActivity;  
    import com.google.android.maps.MapView;  
      
    public class HelloGoogleMaps extends MapActivity {  
        /** Called when the activity is first created. */  
        @Override  
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main);  
              
            MapView mapView = (MapView) findViewById(R.id.mapview);  
            mapView.setBuiltInZoomControls(true);  
        }  
      
        @Override  
        protected boolean isRouteDisplayed() {  
            // TODO Auto-generated method stub  
            return false;  
        }  
    }  

 

完成了以上步骤,运行程序就可以看到自己的activity可以显示google map了。

 

三、添加自定义图层

我们调用google map的目的是为了在map上面显示自己想显示的内容,比如显示用户当前的位置(需要调用GPS) ,或是将某一个兴趣点(Point Of Interest)在地图上显示出来等。这样就需要在google map上面添加自定义的图层了。 

1.创建一个继承自ItemizedOverlay的class 

 

    import java.util.ArrayList;  
      
    import android.app.AlertDialog;  
    import android.content.Context;  
    import android.graphics.drawable.Drawable;  
      
    import com.google.android.maps.ItemizedOverlay;  
    import com.google.android.maps.OverlayItem;  
      
    public class ZPoiItem extends ItemizedOverlay {  
          
        private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();  
        private Context mContext;  
          
        public ZPoiItem(Drawable defaultMarker) {  
            super(boundCenterBottom(defaultMarker));  
        }  
        public ZPoiItem(Drawable defaultMarker, Context context) {  
            super(defaultMarker);  
            mContext = context;  
        }  
          
        public void addOverlay(OverlayItem overlay) {  
            mOverlays.add(overlay);  
            populate();  
        }  
          
        @Override  
        protected OverlayItem createItem(int i) {  
            // TODO Auto-generated method stub  
            return mOverlays.get(i);  
      
        }  
      
        @Override  
        public int size() {  
            // TODO Auto-generated method stub  
            return mOverlays.size();  
        }  
      
        @Override  
        protected boolean onTap(int index) {  
    //    OverlayItem item = mOverlays.get(0);//OverlayItem item = mOverlays.get(index);  
    //    AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);  
    //    dialog.setTitle(item.getTitle());  
    //    dialog.setMessage(item.getSnippet());  
    //    dialog.show();  
          return true;  
        }  
    }  

 

 

创建好了ZPoiItem类,回到HelloGoogleMaps类,添加变量

 

private MapController mMapController 

 

该变量用于控制地图的,比如设置地图中心点,设置地图比例尺等。

然后在onCreate函数的末尾添加如下代码:

 

    mMapController = mapView.getController();  
      
    List<Overlay> mapOverlays = mapView.getOverlays();  
            Drawable drawable = this.getResources().getDrawable(R.drawable.star_big_on);//star_big_on is an icon id.  
            ZPoiItem itemizedoverlay = new ZPoiItem(drawable);  
      
            GeoPoint point = new GeoPoint(1288515,103853388); //a poi in Singapore      
            mMapController.setCenter(point);//set map center   
            mMapController.setZoom(12);//set map scale  
            mMapController.animateTo(point);  
              
            OverlayItem overlayitem = new OverlayItem(KeywordSearchResultActivity.mSelPoint, "Hola, Mundo!", "I'm in Mexico City!");  
            itemizedoverlay.addOverlay(overlayitem);  
            mapOverlays.add(itemizedoverlay);  

 

 

至此已完成了在google map上添加自定义图层。效果图如下:

 

 

 

后 记:值得一提的是,android的map软件需要签名以后才能发布给其他手机,这个签名过程用eclipse的GUI可以很方便的完成,右键工程根目录 选择Android Tools->Export signed application package...,进入签名设置界面,根据提示一步步完成签名。用签好名的.apk安装到手机里可以看到如上所示的结果。Google map的API非常丰富,开发者可以利用这些函数接口编写各种各样的LBS软件或是其他基于地图的应用软件。Foursuqare就是一个不错的调用 google map的LBS软件。

posted @ 2012-04-25 19:06 myphoebe 阅读(20) 评论(0) 编辑

java.lang.Exception: 回复中的公用密钥与 keystore 不符

用keytool命令导入证书时报,keytool错误: java.lang.Exception: 回复中的公用密钥与 keystore 不符
 
 
你的home目录下是否还有.keystore存在
Anddy (架构师) 2010-03-19

1、导入的证书是否正确?

2、导入证书的格式是否正确?(keytool 不可以直接导入p7b格式的证书)
xiaolongfeixiang (资深架构师) 2010-03-19
keytool工具使用详解
1、生成密钥,并以证书文件保存

keytool -genkey -alias bogus -keysize 512 -validity 3650 -keyalg RSA -dname "CN=bogus.com, OU=XXX CA, O=Bogus Inc, L=Stockholm, S=Stockholm, C=SE" -keypass boguspw -storepass boguspw -keystore sean.cert

2、 产生密钥
D:\>keytool -genkey -alias wenger -keysize 1024 -keypass abcdef -keystore myKeys
tore -storepass abcdef -dname "CN=chen sr, OU=tanglab, O=lab, L=gz, ST=gd, C=cn"

3、 导出密钥,用证书的形式保存
D:\>keytool -export -alias wenger -file mycert.cert -keystore myKeystore -storepass abcdef
保存在文件中的认证 <mycert.cert>

JDK中keytool常用命令
-genkey      在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
-alias       产生别名
-keystore    指定密钥库的名称(产生的各类信息将不在.keystore文件中
-keyalg      指定密钥的算法  
-validity    指定创建的证书有效期多少天
-keysize     指定密钥长度
-storepass   指定密钥库的密码
-keypass     指定别名条目的密码
-dname       指定证书拥有者信息 例如:  "CN=sagely,OU=atr,O=szu,L=sz,ST=gd,C=cn"
-list        显示密钥库中的证书信息      keytool -list -v -keystore sage -storepass ....
-v           显示密钥库中的证书详细信息
-export      将别名指定的证书导出到文件  keytool -export -alias caroot -file caroot.crt
-file        参数指定导出到文件的文件名
-delete      删除密钥库中某条目          keytool -delete -alias sage -keystore sage
-keypasswd   修改密钥库中指定条目口令    keytool -keypasswd -alias sage -keypass .... -new .... -storepass ... -keystore sage
-import      将已签名数字证书导入密钥库  keytool -import -alias sage -keystore sagely -file sagely.crt
             导入已签名数字证书用keytool -list -v 以后可以明显发现多了认证链长度,并且把整个CA链全部打印出来。

1.证书的显示
-list
[-v | -rfc] [-alias <alias>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-provider <provider_class_name>]
例如:keytool -list -v -alias RapaServer -keystore cacerts -storepass 12345678
keytool -list -v -keystore d2aapplet.keystore -storepass 12345678 -storetype IAIKKeystore
2.将证书导出到证书文件
例如:keytool -export -keystore monitor.keystore -alias monitor -file monitor.cer
将把证书库 monitor.keystore 中的别名为 monitor 的证书导出到 monitor.cer 证书文件中,它包含证书主体的信息及证书的公钥,不包括私钥,可以公开。
keytool -export -keystore d2aApplet.keystore -alias RapaServer -file Rapa.cert -storetype IAIKKeystore
3.将keystore导入证书中
这里向Java默认的证书 cacerts导入Rapa.cert
keytool -import -alias RapaServer -keystore cacerts -file Rapa.cert -keystore cacerts
4.证书条目的删除
keytool 的命令行参数 -delete 可以删除密钥库中的条目,如: keytool -delete -alias RapaServer -keystore d2aApplet.keystore ,这条命令将 d2aApplet.keystore 中的 RapaServer 这一条证书删除了。
5.证书条目口令的修改
使用 -keypasswd 参数,如:keytool -keypasswd -alias RapaServer -keystore d2aApplet.keystore,可以以交互的方式修改 d2aApplet.keystore证书库中的条目为 RapaServer 的证书。
Keytool -keypasswd -alias RapaServer -keypass 654321 -new 123456 -storepass 888888 -keystore d2aApplet.keystore这一行命令以非交互式的方式修改库中别名为 RapaServer 的证书的密码为新密码 654321,行中的 123456 是指该条证书的原密码, 888888 是指证书库的密码。


http://blog.csdn.net/guo_rui22/archive/2009/03/01/3947716.aspx
lovewhzlq (CTO) 2010-03-19
如果.keystore存在那么把他删除掉,后再执行

或者删除"%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS 再执行

posted @ 2012-04-25 19:02 myphoebe 阅读(17) 评论(0) 编辑

2012年4月11日

要想35岁以前成功 必备9大好习惯(转)

导读:习惯的力量是惊人的。习惯能载着你走向成功,也能驮着你滑向失败。如何选择,完全取决于你自己。

1.习惯的力量:35岁以前养成好习惯

你想成功吗?那就及早培养有利于成功的好习惯。

习惯的力量是惊人的,35岁以前养成的习惯决定着你是否成功。

有这样一个寓言故事:

引用
一位没有继承人的富豪死后 将自己的一大笔遗产赠送给远房的一位亲戚,这位亲戚是一个常年靠乞讨为生的乞丐。这名接受遗产的乞丐立即身价一变,成了百万富翁。新闻记者便来采访这名幸 运的乞丐:"你继承了遗产之后,你想做的第一件事是什么?"乞丐回答说:"我要买一只好一点的碗和一根结实的木棍,这样我以后出去讨饭时方便一些。"



可见,习惯对我们有着绝大的影响,因为它是一贯的,在不知不觉中,经年累月地影响着我们的行为,影响着我们的效率,左右着我们的成败。

一个人一天的行为中,大约只有5%是属于非习惯性的,而剩下的95%的行为都是习惯性的。即便是打破常规的创新,最终可以演变成为习惯性的创新。

根据行为心理学的研究结果:3周以上的重复会形成习惯;3个月以上的重复会形成稳定的习惯,即同一个动作,重复3周就会变成习惯性动作,形成稳定的习惯

引用
亚里士多德说:"人的行为 总是一再重复。因此,卓越不是单一的举动,而是习惯。""人的行为总是一再重复。因此,卓越不是单一的举动,而是习惯。"所以,在实现成功的过程中,除了 要不断激发自己的成功欲望,要有信心、有热情、有意志、有毅力等之外,还应该搭上习惯这一成功的快车,实现自己的目标。

 

引用
有个动物学家做了一个实 验:他将一群跳蚤放入实验用的大量杯里,上面盖上一片透明的玻璃。跳蚤爱跳,于是很多跳蚤都撞上了盖上的玻璃,不断地发叮叮冬冬的声音。过了一阵子, 动物学家将玻璃片拿开,发现竟然所有跳蚤依然在跳,只是都已经将跳的高度保持在接近玻璃即止,以避免撞到头。结果竟然没有一只跳蚤能跳出来--依它们的能 力不是跳不出来,只是它们已经适应了环境。

后来,那位动物学家就在量杯下放了一个酒精灯并且点燃了火。不到五分钟,量杯烧热了,所有跳蚤自然发挥求生的本能,每只跳蚤再也不管头是否会撞痛 (因为它们以为还有玻璃罩),全部都跳出量杯以外。这个试验证明,跳蚤会为了适应环境,不愿改变习性,宁愿降低才能、封闭潜能去适应。



我想,人类之于环境也是如此。人类在适应外界大环境中,又创造出适合于自己的小环境,然后用习惯把自己困在自己所创造的环境中。所以,习惯决定着你的活动空间的大小,也决定着你的成败。养成好习惯对于你的成功非常重要。

心理学巨匠威廉·詹姆士说:"播下一个行动,收获一种习惯;播下一种习惯,收获一种性格;播下一种性格,收获一种命运。"

2.35岁以前成功必备的9大习惯

好习惯会使成功不期而至。我认为下面9个好习惯是成功必备的:

(1)积极思维的好习惯

引用
有位秀才第三次进京赶考, 住在一个经常住的店里。考试前两天他做了三个梦:第一个梦是梦到自己在墙上种白菜,第二个梦是下雨天,他戴了斗笠还打着伞,第三个梦是梦到跟心爱的表妹脱 光了衣服躺在一起,但是背靠着背。临考之际做此梦,似乎有些深意,秀才第二天去找算命的解梦。算命的一听,连拍大腿说:"你还是回家吧。你想想,高墙上种 菜不是白费劲吗?戴斗笠打雨伞不是多此一举吗?跟表妹脱光了衣服躺在一张床上,却背靠背,不是没戏吗?"秀才一听,心灰意冷,回店收拾包裹准备回家。店老 板非常奇怪,问:"不是明天才考试吗?今天怎么就打道回府了?"秀才如此这般说了一番,店老板乐了:"唉,我也会解梦的。我倒觉得,你这次一定能考中。你 想想,墙上种菜不是高种吗?戴斗笠打伞不是双保险吗?跟你表妹脱光了背靠背躺在床上,不是说明你翻身的时候就要到了吗?"秀才一听,更有道理,于是精神振 奋地参加考试,居然中了个探花。



可见,事物本身并不影响人,人们只受到自己对事物看法的影响,人必须改变被动的思维习惯,养成积极的思维习惯。

怎样才算养成了积极思维的习惯呢?当你在实现目标的过程中,面对具体的工作和任务时,你的大脑里去掉了"不可能"三个字,而代之以"我怎样才能"时,可以说你就养成了积极思维的习惯了。

(2)高效工作的好习惯

一个人成功的欲望再强烈,也会被不利于成功的习惯所撕碎,而溶入平庸的日常生活中。所以说,思想决定行为,行为形成习惯,习惯决定性格,性格决定命运。你要想成功,就一定要养成高效率的工作习惯。

确定你的工作习惯是否有效率,是否有利于成功,我觉得可以用这个标准来检验:即在检省自己工作的时候,你是否为未完成工作而感到忧虑,即有焦灼 感。如果你应该做的事情而没有做,或做而未做完,并经常为此而感到焦灼,那就证明你需要改变工作习惯,找到并养成一种高效率的工作习惯。

高效工作从办公室开始:

引用
1)了解你每天的精力充沛期。通常人们在早晨9点左右工作效率最高,可以把最困难的工作放到这时来完成。

2)每天集中一、两个小时来处理手头紧急的工作,不接电话、不开会、不受打扰。这样可以事半功倍。

3)立刻回复重要的邮件,将不重要的丢弃。若任它们积累成堆,反而更费时间。

4)做个任务清单,将所有的项目和约定记在效率手册中。手头一定要带着效率手册以帮助自己按计划行事。一个人一天的行为中,大约只有5%是属于非习惯性的,而剩下的95%的行为都是习惯性的。

5)学会高效地利用零碎时间,用来读点东西或是构思一个文件,不要发呆或做白日梦。

6)减少回电话的时间。如果你需要传递的只是一个信息,不妨发个手机短信。

7)对可能打来的电话做到心中有数,这样在你接到所期待的电话后便可迅速找到所需要的各种材料,不必当时乱翻乱找。

8)学习上网高效搜寻的技能,以节省上网查询的时间。把你经常要浏览的网站收集起来以便随时找到。

9)用国际互联网简化商业旅行的安排。多数饭店和航线可以网上查询和预订。

10)只要情况允许就可委派别人分担工作。事必躬亲会使自己疲惫不堪,而且永远也做不完。不妨请同事帮忙,或让助手更努力地投入。

11)做灵活的日程安排,当你需要时便可以忙中偷闲。例如,在中午加班,然后早一小时离开办公室去健身,或是每天工作10个小时,然后用星期五来赴约会、看医生。

12)在离开办公室之前开列次日工作的清单,这样第二天早晨一来便可以全力以赴。



计划习惯,就等于计划成功。

凡事制定计划有个名叫约翰·戈达德的美国人,当他15岁的时候,就把自己一生要做的事情列了一份清单,被称做"生命清单"。在这份排列有序的清单 中,他给自己所要攻克的127个具体目标。比如,探索尼罗河、攀登喜马拉雅山、读完莎士比亚的著作、写一本书等。在44年后,他以超人的毅力和非凡的勇 气,在与命运的艰苦抗争中,终于按计划,一步一步地实现了106个目标,成为一名卓有成就的电影制片人、作家和演说家。

中国有句老话:"吃不穷,喝不穷,没有计划就受穷。"尽量按照自己的目标,有计划地做事,这样可以提高工作效率,快速实现目标。

(3)养成锻炼身体的好习惯

增强保健意识

计划习惯,就等于计划成功。如果你想成就一番事业,你就必须有一个健康的身体;要想身体健康,首先要有保健意识。

我认识一个大学教师,身体一直很健康。早些时候,我们经常在一起玩。在谈及各人身体状况时,他说肾部偶尔有轻微不适的感觉。我们曾劝他去医院检查 一下,但他自恃身体健康,不以为意。直至后来感觉比较疼痛,其爱人才强迫他去检查。诊断结果是晚期肾癌。虽经手术化疗的等治疗措施,但终未能保住生命,死 时才39 岁。此前,他曾因学校分房、评职称不如意,心情一直抑郁,他的病和情绪有关,但如果他保健意识强,及早去检查,完全有可以进行预防,消患于未萌。保健意识 差,让他付出了生命的代价。

如何落实保健意识呢?一是要有生命第一、健康第一的意识,有了这种意识,你就会善待自己的身体、自己的心理,而不会随意糟踏自己的身体。二是要注 意掌握一些相关的知识。三是要使自己有一个对身体应变机制:定期去医院做身体检查;身体觉得有不适的地方,应及早去医院检查;在有条件的情况下,可以请一 个保健医生,给自己的健康提出忠告。

▲有计划地锻炼身体

锻炼身体的重要性已经越来越多地为人们所接受,但我感觉很多人只停留在重视的意识阶段,而缺乏相应的行动。我认为锻炼既要针对特定工作姿势所能引发的相应疾病有目的地进行,以防止和治疗相应的疾病,更要把锻炼当作一种乐趣,养成锻炼的习惯。

因为工作需要,我经常与客户打交道,并因处理突发事情四处奔忙,这在一定程度起到了锻炼身体的作用,同时,我还每周坚持游泳一到两次,以保证有足够的精力去做工作,去享受生活。

身体锻炼,就像努力争取成功一样,贵在坚持。

除上述两点以,注意饮食结构,合理膳食,以及注意养成好的卫生习惯等,都是养成健康习惯的组成部分。

总之,健康是"革命"的本钱,是成功的保证。健康成就自己。

(4)不断学习的好习惯"万般皆下品,唯有读书高"的年代已经过去了,但是养成读书的好习惯则永远不会过时。

哈利·杜鲁门是美国历史上著名的总统。他没有读过大学,曾经营农场,后来经营一间布店,经历过多次失败,当他最终担任政府职务时,已年过五旬。但 他有一个好习惯,就是不断地阅读。多年的阅读,使杜鲁门的知识非常渊博。他一卷一卷地读了《大不列颠百科全书》以及所有查理斯·狄更斯和维克多·雨果的小 说。此外,他还读过威廉·莎士比亚的所有戏剧和十四行诗等。

杜鲁门的广泛阅读和由此得到的丰富知识,使他能带领美国顺利度过第二次世界大战的结束时期,并使这个国家很快进入战后繁荣。他懂得读书是成为一流 领导人的基础。读书还使他在面对各种有争议的、棘手的问题时,能迅速做出正确的决定。例如,在20世纪50年代他顶住压力把人们敬爱的战争英雄道格拉斯· 麦克阿瑟将军解职。

他的信条是:"不是所有的读书人都是一名领袖,然而每一位领袖必须是读书人。"

美国前任总统克林顿说:在19世纪获得一小块土地,就是起家的本钱;而21世纪,人们最指望得到的赠品,再也不是土地,而联邦政府的奖学金。因为他们知道,掌握知识就是掌握了一把开启未来大门的钥匙。"

每一个成功者都是有着良好阅读习惯的人。世界500家大企业的CEO至少每个星期要翻阅大概30份杂志或图书资讯,一个月可以翻阅100多本杂志,一年要翻阅1000本以上。

世界500家大企业的CEO至少每个星期要翻阅大概30份杂志或图书资讯,一个月可以翻阅100多本杂志,一年要翻阅1000本以上。如果你每天 读15分钟,你就有可能在一个月之内读完一本书。一年你就至少读过12本书了,10年之后,你会读过总共120本书!想想看,每天只需要抽出15分钟时 间,你就可以轻易地读完120本书,它可以帮助你在生活的各方面变得更加富有。如果你每天花双倍的时间,也就是半个小时的话,一年就能读25本书--10 年就是 250本!

我觉得,每一个想在35岁以前成功的人,每个月至少要读一本书,两本杂志。

(5)谦虚的好习惯

一个人没有理由不谦虚。相对于人类的知识来讲,任何博学者都只能是不及格。

引用
著名科学家法拉第晚年,国 家准备授予他爵位,以表彰他在物理、化学方面的杰出贡献,但被他拒绝了。法拉第退休之后,仍然常去实验室做一些杂事。一天,一位年轻人来实验室做实验。他 对正在扫地的法拉第说道:"干这活,他们给你的钱一定不少吧?"老人笑笑,说道:"再多一点,我也用得着呀。""那你叫什么名字?老头?""迈克尔·法拉 第。"老人淡淡地回答道。年轻人惊呼起来:"哦,天哪!您就是伟大的法拉第先生!""不",法拉第纠正说,"我是平凡的法拉第。"



谦虚不仅是一种美德,更是是一种人生的智慧,是一种通过贬低自己来保护自己的计谋。

(6)自制的好习惯

任何一个成功者都有着非凡的自制力。

三国时期,蜀相诸葛亮亲自率领蜀国大军北伐曹魏,魏国大将司马懿采取了闭城休战、不予理睬的态度对付诸葛亮。他认为,蜀军远道来袭,后援补给必定不足,只要拖延时日,消耗蜀军的实力,一定能抓住良机,战胜敌人。

引用
诸葛亮深知司马懿沉默战术 的利害,几次派兵到城下骂阵,企图激怒魏兵,引诱司马懿出城决战,但司马懿一直按兵不动。诸葛亮于是用激将法,派人给司马懿送来一件女人衣裳,并修书一封 说:"仲达不敢出战,跟妇女有什么两样。你若是个知耻的男儿,就出来和蜀军交战,若不然,你就穿上这件女人的衣服。""士可杀不可辱。"这封充满侮辱轻视 的信,虽然激怒了司马懿,但并没使老谋深算的司马懿改变主意,他强压怒火稳住军心,耐心等待。

相持了数月,诸葛亮不幸病逝军中,蜀军群龙无首,悄悄退兵,司马懿不战而胜。



抑制不住情绪的人,往往伤人又伤己如果司马懿不能忍耐一时之气,出城应战,那么或许历史将会重写。

现代社会,人们面临的诱惑越来越多,如果人们缺乏自制力,那么就会被诱惑牵着鼻子走,偏离成功的轨道。

(7)幽默的好习惯

有人说,男人需要幽默,就像女人需要一个漂亮的脸蛋一样重要。

男人需要幽默,就像女人需要一个漂亮的脸蛋一样重要。

引用
美国第16任总统林肯长相 丑陋,但他从不忌讳这一点,相反,他常常诙谐地拿自己的长相开玩笑。在竞选总统时,他的对手攻击他两面三刀,搞阴谋诡计。林肯听了指着自己的脸说:"让公 众来评判吧。如果我还有另一张脸的话,我会用现在这一张吗?"还有一次,一个反对林肯的议员走到林肯跟前挖苦地问:"听说总统您是一位成功的自我设计 者?""不错,先生。"林肯点点头说,"不过我不明白,一个成功的设计者,怎么会把自己设计成这副模样?"林肯就是这种幽默的方法,多次成功地化解了可能 出现的尴尬和难堪场面。



没有幽默的男人不一定就差,但懂得幽默的男人一定是一个优秀的人,懂得幽默的女人更是珍稀动物。

(8)微笑的好习惯

微笑是大度、从容的表现,也是交往的通行证。

引用
举世闻名的希尔顿大酒店, 其创建人希尔顿在创业之初,经过多年探索,最终发现了一条简单、易行、不花本钱的经营秘诀--微笑。从此,他要求所有员工:无论饭店本身遭遇到什么困难, 希尔顿饭店服务员脸上的微笑永远是属于顾客的阳光。这束"阳光"最终使希尔顿饭店赢得了全世界一致好评。



在欧美发达国家,人们见面都要点头微笑,使人们相互之间感到很温暖。而在中国,如果你在大街上向一个女士微笑,那么你可能被说成"有病"。向西方人学习,让我们致以相互的微笑吧。

从古至今,敬业是所有成功人士最重要的品质之一。

(9)敬业、乐业的好习惯

敬业是对渴望成功的人对待工作的基本要求,一个不敬业的人很难在他所从事的工作中做出成绩。

引用
美国标准石油公司有一个叫 阿基勃特的小职员,开始并没有引起人们的特别注意。他的敬业精神特别强,处处注意维护和宣传企业的声誉。在远行住旅馆时总不忘记在自己签名的下方写上"每 桶四美元的标准石油"字样,在给亲友写信时,甚至在打收条时也不例外,签名后总不忘记写那几个字。为此,同事们都叫他"每桶四美元"。这事被公司的董事长 洛克菲勒知道了,他邀请阿基勃特共进晚餐,并号召公司职员向他学习。后来,阿基勃特成为标准石油公司的第二任董事长。

posted @ 2012-04-11 10:26 myphoebe 阅读(14) 评论(0) 编辑

2012年4月10日

解决JQuery和其他库共存

①jQuery在其他库加载之后

这种情况下,将使用JQuery.noConflict()函数来将$变量的控制权移交给其他JavaScript库。

例如:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head>
<script type="text/javascript" src="./prototypes.js"></script>
<!--jQuery库在其他库加载之后-->
<script type="text/javascript" src="./JQuery.js"></script>
<!--通过noConflict函数-->
<script type="text/javascript">
//使用noConflict()方法
JQuery.noConflict();
JQuery(function(){
  JQuery("p").click(function(){
      alert(JQuery(this).text));
  });
});
</script>
</head>
<body>
<p>Hello World!</p>
</body>
</html>

 




②JQuery在其他库导入之前

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!--jQuery库在其他库加载之前-->
<script type="text/javascript" src="./JQuery.js"></script><
script type="text/javascript" src="./prototypes.js"></script>
<!--通过noConflict函数-->
<script type="text/javascript">
JQuery(function(){
 //直接使用jQuery对象,无需noConflict函数
  JQuery("p").click(function(){
      alert(JQuery(this).text());
  });
});
</script>
</head>
<body>
<p>Hello World!</p>
</body>
</html>

 

posted @ 2012-04-10 17:37 myphoebe 阅读(9) 评论(0) 编辑

关于JS中的constructor与prototype

在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下:

我们都知道,在JS中有一个function的东西。一般人们叫它函数。比如下面的代码:

function Person(name)
{
  alert(name);
}
Person('js');//js

 




上面的代码中,Person的表现的确跟一般的函数没有什么区别,接着看下面的代码

function Person(name)
{
   this.name=name;
   this.showMe=function()
        {
           alert(this.name);
        }
};
var one=new Person('JavaScript');
one.showMe();//JavaScript

 



很多人见到了久违的new操作符,于是就叫Person为“类”,可是又没有关键字class的出现,觉得叫“类”有点勉强。于是退而求其次叫 Person为类的构造函数。这些概念好像都没有错,之所以出现这样的情况,可能是因为大家都学习了传统的面向对象语言(c++,c#,java等),还 有一种思维定势吧。为了让javascript也面向对象,要在javascript中找到与传统面向对象语言的影子。

可是按照javascript的说法,function定义的这个Person就是一个Object(对象),而且还是一个很特 殊的对象,这个使用function定义的对象与使用new操作符生成的对象之间有一个重要的区别。这个区别就是function定义的对象有一个 prototype属性,使用new生成的对象就没有这个prototype属性。

prototype属性又指向了一个prototype对象,注意prototype属性与prototype对象是两个不同的东西,要注意区别。在prototype对象中又有一个constructor属性,这个constructor属性同样指向一个constructor对象,而这个constructor对象恰恰就是这个function函数本身。

有点头晕,看下图吧:



不相信可以看下面的代码:

function Person(name)
{
   this.name=name;
   this.showMe=function()
        {
           alert(this.name);
        }
};

var one=new Person('js');

alert(one.prototype)//undefined
alert(typeof Person.prototype);//object
alert(Person.prototype.constructor);//function Person(name) {...};

 



上面的代码证明了one这个对象没有prototype属性。

我们接着看代码:

function Person(name)
{
   this.name=name;
   this.showMe=function()
        {
           alert(this.name);
        }
};

Person.prototype.from=function()
{
  alert('I come from prototype.');
}

var one=new Person('js');

one.showMe();//js,这个结果没有什么好奇怪的
one.from();//I come from prototype.,这个结果有一点奇怪吧

 



要解释这个结果就要仔细研究一下new这个操作符了.var one=new Person('js');这个语句执行的过程可以分成下面的语句:

var one={};
Person.call(one,'js');

 



按照《悟透javascript》书中说的,new形式创建对象的过程实际上可以分为三步:
第一步是建立一个新对象(叫A吧);

第二步将该对象(A)内置的原型对象设置为构造函数(就是Person)prototype 属性引用的那个原型对象;

第三步就是将该对象(A)作为this 参数调用构造函数(就是Person),完成成员设置等初始化工作。

其中第二步中出现了一个新名词就是内置的原型对象,注意这个新名词跟prototype对象不是一回事,为了区别我叫它inobj,inobj就 指向了函数Person的prototype对象。在person的prototype对象中出现的任何属性或者函数都可以在one对象中直接使用,这个 就是javascript中的原型继承了。

又头晕了,上图吧!



这样one对象通过内置的原型对象inobj就可以直接访问Person的prototype对象中的任何属性与方法了。这也就解释了上面的代码 中为什么one可以访问form函数了。因为prototype对象中有一个constructor属性,那么one也可以直接访问 constructor属性。

function Person(name)
{
   this.name=name;
   this.showMe=function()
        {
           alert(this.name);
        }
};

Person.prototype.from=function()
{
  alert('I come from prototype.');
}

var one=new Person('js');

one.showMe();//js,这个结果没有什么好奇怪的
one.from();//I come from prototype.,这个结果有一点奇怪吧
alert(one.constructor);//function Person(name) {...}
alert(Person.prototype.constructor);//function Person(name) {...}

 



接着看继承是如何实现的。

function Person(name)
{
   this.name=name;
   this.showMe=function()
        {
           alert(this.name);
        }
};

Person.prototype.from=function()
{
  alert('I come from prototype.');
}

function SubPerson()
{
}
SubPerson.prototype=new Person();

var subOne=new SubPerson();
subOne.from();//I come from prototype.
alert(subOne.constructor);//function Person(name) {...};
alert(SubPerson.prototype.constructor);//function Person(name) {...};

 



继承的实现很简单,只需要把子类的prototype设置为父类的一个对象即可。注意这里说的可是对象哦!

那么通过prototype属性实现继承的原理是什么呢?还是先看图形说明,然后编写代码进行验证。



注意:红色的方框就是把子类与父类链接起来的地方。这个就应该是传说中的prototype链了吧。下面有代码进行验证。

function Person(name)
{
   this.name=name;
   this.showMe=function()
        {
           alert(this.name);
        }
};

Person.prototype.from=function()
{
  alert('I come from prototype.');
}
var father=new Person('js');//为了下面演示使用showMe方法,采用了js参数,实际多采用无参数
alert(father.constructor);//查看构造函数,结果是:function Person(name) {...};
function SubPer()
{
}
SubPer.prototype=father;//注意这里
SubPer.prototype.constructor=SubPer;

var son=new SubPer();
son.showMe();//js
son.from();//I come from prototype.
alert(father.constructor);//function SubPer(){...}
alert(son.constructor);//function SubPer(){...}
alert(SubPer.prototype.constructor);//function SubPer(){...}

 



根据上图的prototype链,还有代码的结果,我想应该明白为什么使用prototype能够实现

JS中的继承了吧。



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

posted @ 2012-04-10 17:34 myphoebe 阅读(8) 评论(0) 编辑

14款优秀的MySQL客户端

不用我说,大家都知道Mysql是一个怎么样的数据库。虽然它的命运比较坎坷,但是丝毫没有影响到我们对Mysql的热情。不论是个人程序或者网站,还是 企业数据库,Mysql的身影无处不在。无论做什么数据库的开发,一款合适的客户端软件可以让你达到事半功倍的效果。下面就我自己使用mysql客户端的 经验,再参考其他人的情况做如下汇总,希望对你的数据开发有所帮助。

1. EMS MySQL Manager
强大的mysql管理工具,允许用户通过图形界面创建或编辑数据库对象,并提供通过sql语句管理用户和权限,通过图形界面建立sql语句,自动生成html格式的数据库文档,导入/导出数据,查看/编辑blob字段等功能。
官方网站:http://sqlmanager.net/products/mysql/manager
中文下载地址:http://download.pchome.net/development/database/download-10462.html

这款软件给我的感觉是简洁,实用,专业,我现在一直用的这个,强烈推荐你使用。

2. MySQL-Front
mysql数据库的图形工具,主要特性包括多文档界面,语法突出,拖拽方式的数据库和表格,可编辑/可增加/删除的域,可编辑/可插入/删除的记录,可显示的成员,可执行的SQL 脚本,提供与外程序接口,保存数据到CSV文件等。
中文下载地址:http://down.chinaz.com/soft/21500.htm


3. Navicat for MySQL
一套适用于MySQL数据库系统地图形化数据库管理、报告以及监控的工具。新版本具有高性能的、具有商业智能的、强大的备份功能,此外还有许多的改进。含简体中文文件。
官方网站:www.navicat.com
官方下载地址:http://www.navicat.com/en/products/navicat_mysql/mysql_overview.html中文下载地址:http://down.chinaz.com/soft/22655.htm


4. MySqlYog
MySqlYog软件是纯JAVA编写的软件,可以运行于WINDOWS,LINUX,UNIX系统,基本版本可以实现对数据库的基本管理,可视化创建表,视图,触发器,数据库的热备份,恢复,可远程管理系统等功能。
官方网站:http://www.webyog.com
官方下载地址:http://www.webyog.com/en/downloads.php

5. MySQL Browser
MySQL Browser的优点是简单,极其简单,安装之后能够立刻上手,马上就能使用的那种,布局也很简陋,功能也很简陋,简单使用没有问题,尤其是刚开始学习mysql的童鞋,可以尝试一下。
官方下载地址: http://dev.mysql.com/downloads/gui-tools/5.0.html

6. Workbench
MySQL Workbench是一款可视化的数据库设计工具,它将SQL开发、管理和数据库设计、创建和维护融合到一个简单的开发环境中,它源自 fabFORCE.net,是DBDesigner 4的接班人,并且更换了mysql GUI工具绑定。当前的版本是5.2,最开始的版本是5.0, 需要强调的是,MySQL Workbench是被视为DBDesinger 4的继承者来开发的。

下载地址:http://dev.mysql.com/downloads/workbench/


7. Sequel Pro
Sequel Pro是一款免费的开源项目,它是CocoaMySQL 数据库管理系统的继承者, CocoaMySQL是Lorenz Textor脑力劳动的产物, 而Lorenz Textor是从2003年开始,CocoaMySQL主要的开发者。
Sequel Pro用来管理MySQL数据库(本地或者internet),它允许你增加、删除数据库和表,更改字段、索引和视图,过滤table内容,增加、编辑和删除列,执行自定义查询和转存table和整个数据库
它兼容MySQL 3.x, 4 or 5.
官方网站:http://www.sequelpro.com/


8. HeidiSQL
HeidiSQL之前被称为mySQL-Front,是由德国程序员Ansgar Becker和一些在Delhi领域有突出贡献的人开发的一款免费的开源客户端。用HeidiSQL管理数据库, 用户必须通过验证登录一个本地或者远程的MySQL服务器,创建一个会话(session). 在这个会话里,用户可以通过连接MySQL服务器管理MySQL 数据库, 会话结束会断开与服务器的连接。它的特征集对于大部分普通和高级的数据库,表和数据操作来说已经足够了,但是为了让它趋向完美,它依然保持积极的开发状 态。
一个由Java, jHeidi编写的版本,被设计用来工作在Mac和Linux电脑上,不幸的是,这个项目在2010年三月被叫停了。

官方网站:http://www.heidisql.com/


9.phpMyAdmin
PhpMyAdmin是由PHP编写的,目的在于通过Internet管理MySQL, PhpMyAdmin支持对MySQL的大范围的操作,最频繁的使用是数据库的管理、表格、字段、关系、索引、用户、权限。你也可以直接执行SQL语句。

官方网站:http://www.phpmyadmin.net/home_page/


10. SQL Maestro MySQL Tools Family
SQL Maestro Group 提供了完整的数据库管理、开发和大部分流行数据库管理系统的管理工具,通过这个管理界面,你可以执行查询和SQL脚本,管理用户和他们的授权,导入、导出 以及备份数据。 此外,你可以为你选择的表格和查询生成PHP脚本,并且可以将任何兼容ADO的数据库转换成MySQL数据库。
此绑定包含如下组件:
SQL Maestro for MySQL
一个专业的MySQL GUI 管理工具, 支持所有最新的MySQL 5.0 and 5.1特性,比如:视图、存储过程,触发器和表划分。
Data Wizard for MySQL
MySQL数据转存,数据导出、导入工具等
Code Factory for MySQL
一套用来编辑SQL脚本和可视化建立SQL语句的工具。
Service Center for MySQL
方便MySQL数据库维护
PHP Generator for MySQL
生产出高质量的MySQL PHP脚本,有免费版本可用。

官方网站:http://www.sqlmaestro.com/products/mysql/


11. SQLWave
Nerocode SQLWave是一款MySQL GUI客户端工具,设计成自动化和简化数据库开发过程 。它也提供了一个简单的方式去浏览和维护存在的数据库,用不同的方法设计复杂的SQL语句,查询和操纵数据。兼容MySQL 4.x – 6.x。
30天试用版可用。
官方网站:http://www.nerocode.com/


12. dbForge Studio
DbForge Studio for MySQL 提供了可视化的MySQL开发和管理,
有三个版本: 快线版(Express), 标准版(Standard)和 专业 版(Professional).
快线版 是一个免费的应用,提供处理schema对象,用户账户,SQL脚本和查询语句等基本功能
标准版 为数据库管理人员和程序开发人员准备了额外的工具。比如调试器(debugger), 查询构造器(Query Builder), 代码模板(code templates), 对象搜索(object search), 变量导出和维护向导。
专业版是功能最全的版本,并且增加了以下功能:数据库工程,精确对比,数据库结构同步或者数据库内容同步,调试存储过程和脚本,建立复杂的查询 。
dbForge的其他工具包括:
• Schema Compare for MySQL
• Data Compare for MySQL
• Query Builder for MySQL
• Fusion for MySQL

官方网站:http://www.devart.com/dbforge/mysql/studio/


13. DBTools Manager

标准版
专门为个人设计,它拥有最小的特征集,这使得它成为新数据库用户执行基本数据管理最理想的工具,你可以免费使用这个版本,对于商业应用,你可以购买一个许可,它将为你提供更多额外的功能。
企业版
专门为企业使用设计,对于想要寻找一款集成的数据库管理系统的DBA和程序开发人员来说,这个非常合适。你可以在购买之前试用一下,企业版试用版将开放所有的功能,你有20天的时间来决定是否购买它。

两个版本都支持MySQL 3, 4 and 5.

官方网站:http://www.dbtools.com.br/EN/dbmanagerpro/


14. MyDB Studio
MyDB Studio包含MySQL服务器管理的完整工具集,开发人员将十分感激它能创建、编辑、移除数据库对象,数据库同步,数据导入和导出,DBA们也可以使 用MyDB Studio去执行数据库移植,以及数据备份和重新存储。它支持SSH隧道技术,使得您的连接更加安全。

官方网站:http://www.mydb-studio.com

posted @ 2012-04-10 17:29 myphoebe 阅读(11) 评论(0) 编辑

PHP常用工具

PHP现在已经是使用最为广泛的开源服务器端脚本语言之一,当然PHP并不是速度最快的,但它却是最常用的脚本语言。PHP100出品的 EclipsePHP Sutdio 也曾收到广大PHPer好评,但不可能每个人的习惯是一样的,尤其是对与探索的朋友,所以今天PHP100就在这里介绍50个有益的PHP工具,可以大大 提高你的编程工作,希望大家转载此文章时候注明来源

调试工具

测试和优化工具

文档工具

安全工具

图形处理

代码优化

版本控制系统

有用的拓展,使用工具和类

  • SimplePie :PHP RSS 解析程序
  • HTML Purifier :可以用来移除所有恶意代码(XSS),而且还能确保你的页面遵循W3C的标准规范。
  • TCPDF :一个用于快速生成PDF文件的PHP5函数包。
  • htmlSQL :一个是你可以方便的对HTML和XML内容方便的使用类似SQL语句进行检索的PHP类。
  • The Greatest PHP Snippet File Ever (Using Quicktext for Notepad++)
  • Creole :用PHP5编写, 是一个基于真正意义的OO的层,API接口以JDBC为基础。
  • PHPLinq用SQL语法操作PHP数组。
  • PHPMathPublisher:作者是一位法国中学数学老师。


  • phpMyAdmin :可以通过互联网在线控制和操作MySQL。
  • PHPExcel :相当强大的MS Office Excel 文档生成类库。
  • Phormer :一个轻量级,强大的PHP在线相册。
  • xajax PHP Class Library :一个开源的PHP 类库,用来构建WEB上的Ajax 程序。
  • PHP User Class :用户管理。
  • PHP-GTK :为了证明PHP是一种远远超越网络应用程序的有效的工具而开发的。使用PHP-GTK你可以建立独立的GUI(用户图形界面)应用程序。

在线工具和资源

  • Minify! :使用 PHP5 开发的用于合并压缩 js/css 文件的应用程序。合并压缩之后的结果可通过 HTTP gzip/deflate 及一些相关头,优化客户端缓存。
  • HTTP_StaticMerger:自动“合并”CSS和JavaScript文件。
  • PHP Object Generator :一个开源的PHP代码生成器。它能够为你的PHP4/PHP5应用程序生成简洁和可测试的面向对象代码。

    gotAPI/PHP



  • koders :开放源代码搜索。
  • PECL :含有PHP 开发组提供的不同扩展库的信息。

    浏览器中的工具(Firefox插件)

    • FirePHP :是基于Firebug的一个扩展,可以用来在Firebug的console中方便的输出php的调试信息又不影响php程序的正常运行
    • phpLangEditor :是一个用来翻译各种PHP变数的工具.



    • PHP Lookup :是一个内置的搜索栏,以帮助您快速查找引用的PHP语法。
    • PHP Manual Search :一个方便的搜索栏,从您的Web浏览器中搜索官方PHP文档

    PHP框架

    • Dwoo :一个PHP5 的模板引擎。
    • CodeIgniter:帮助你编写Web 应用程序的敏捷开源PHP 框架。

    • YII Framework 一个高性能的基于组件的PHP框架。
    • Solar


      symfony :一个开源的PHP Web框架。目的是加速Web应用的创建与维护。
    • PEAR  
    • Propel :是一个适用于PHP5的OR映射(Object Relational Mapping)框架。它允许你使用对象代替SQL来读写数据库表格中的行。
    • {{macro}} template engine


    • Zend Framework :是一个开放源代码的PHP5 开发框架,可用于来开发web 程序和服务。
    • Qcodo :是一个适用于敏捷开发基于PHP5采用MVC架构与CRUD代码生成功能的框架。
    • SAJAX :Sajax 是一种制作 Ajax 应用程序的模块化方式,通过预定的、动态的函数调用,使得应用程序的开发过程更加平滑。
    • Smarty : 用PHP实现MVC开发模式的逻辑层和表示层的模板引擎。
    • CakePHP :是一个开源的PHP on rails的full-stack框架。
    • Savant2 :是一套直接使用PHP function,但是做了合理的限制的PHP模板引擎。
    • PHPSpec :PHPSpec是一个简单而直观的PHP框架。

    IDEs 和 Editors

    • PHPEclipse相当强大的一个Eclipse下开发PHP的插件,包括的功能有:PHP语法分析,调试,代码格式化,大纲视图,代码模板定制等。
    • PhpED:内部调试器。

       

    • phpDesigner:针对PHP 网页的编写所设计的程序。

       

    • Zend Studio :一个屡获大奖的专业PHP 集成开发环境,具备功能强大的专业编辑工具和调试工具,支持PHP语法加亮显示。

       

    • Aptana PHP :一个开源的IDE ,主要致力于浏览器端的开发。
    • PDT :一个开发工具框架,致力于在Eclipse平台之上提供一个功能完整的PHP集成开发环境。
    • VS.Php :通过安装这个插件,我们可以在Visual Studio .Net这个市场中最流行的IDE中编译、编辑、配置PHP程序。
    • PHPEdit :这款IDE软件提供用于突出语法显示、代码提示、代码识别,一个集成的PHP调试器以及一个帮助生成器工具。

    补充资源

posted @ 2012-04-10 17:17 myphoebe 阅读(18) 评论(0) 编辑