摘要: 程序员世界里有哪些名言警局呢?Jun Auza 列出了一些启迪人心的至理名言,它们大多来自产业界富于经验的人们。下文列出前10个供读者欣赏。 10. "People think that computer science is the art of geniuses but the actual reality is the opposite, just many people doing things that build on each other, like a wall of mini stones."- Donald Knuth10. “人们认为计算机科学是天才的艺术,但事实完全相反阅读全文
posted @ 2010-12-16 23:41 悟道2011 阅读(62) 评论(0) 编辑
摘要: 没有人是完全独立的孤岛,每个人都是整体的一部分。——约翰·多恩对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序。如果在用Google搜索相关示例时幸运的话,可以搜到现成的代码。即使是经验丰富的程序员,通常也会为了节省时间和精力而在网上搜索解决方案。如果不借助搜索技术、网络及集体智慧,现代化高效编程是难以想象的。因此,搜索技巧对高效程序员变得愈发重要。现在,我们不需要了解和记住如何解决众多的编程问题,可以采用搜索技术。我们正变得更加高效、高生产力,并能够解决更多的问题。但这是否意味着在构建软件时,拥有好的搜索技巧就足够了呢?本文将讨论,搜索技巧在程序员知识的形成过程中的作用,以及如何高效阅读全文
posted @ 2010-12-07 10:49 悟道2011 阅读(69) 评论(0) 编辑
public static int AddUser(Entity.UserInfo user)
        {
     int id =
0;
            //使用存储过程实现添加数据
           
//proc_AddUser为存储过程名称
            using (SqlCommand command = new
SqlCommand("proc_AddUser", DBService.Conn))
            {
               
//指定command对象的执行方式
                command.CommandType =
CommandType.StoredProcedure;
               
//指定存储过程的参数并赋值
               
command.Parameters.Add("@uName",SqlDbType.NVarChar,20).Value = user.Name; 

                command.Parameters.Add("@uAge", SqlDbType.Int).Value =
user.Age;
                command.Parameters.Add("@uPass",
SqlDbType.NVarChar, 200).Value = user.Password;
               
//设置输出参数
                command.Parameters.Add("@uId",
SqlDbType.Int).Direction                           

                 =ParameterDirection.Output;   //@uId,@uName等参数必须与数据库存储过程中的参数一致
  //执行
  command.ExecuteNonQuery();
  //获取输出参数的值
               
id = Convert.ToInt32(command.Parameters["@uId"].Value);
           
}
  return id;
        }

 

原文链接:http://renhappy20066.blog.163.com/blog/static/1120807862010220103254236/

posted @ 2012-02-08 11:19 悟道2011 阅读(3) 评论(0) 编辑

設置焦點

如果在單擊某個EditText的時候想讓其他的EditText獲得輸入的焦點,那麼可以使用下面的語句,

getCurrentFocus().setFocusable(false);

getCurrentFocus().setFocusableInTouchMode(false);

而要獲得焦點的EditText

mSearchEdit.setFocusable(true);

mSearchEdit.setFocusableInTouchMode(true);

mSearchEdit.requestFocus();

 

設置輸入格式過濾器

EditText設置輸入的過濾器。InputFilter,首先要注意的是對一個EditText的對象設置setFilters(InputFilter[] filters),其參數是一個inputFilter數組,即對一個EditText你可以同時設置多個輸入過濾器。而我們平時用的時候一般設置一個過濾器就可以了,所以可以作如下使用(以輸入數字為例):

InputFilter[] mDigitsFilters = new InputFilter[1];

mDigitsFilters[0] = new DigitsKeyListener(true, true);

ps: DigitsKeyListener第一個參數是Sign,如果設置為true,表示允許在數字最左端有負號,否則只能輸入正數;第二個參數是decimal,如果設置為true,表示允許在數字中有一個小數點存在。

最後setFilters(mDigitsFilters);OK了,

InputFilter是一個接口,其實現的子類有:

DateKeyListener, DateTimeKeyListener, DialerKeyListener, DigitsKeyListener, InputFilter.AllCaps, InputFilter.LengthFilter, LoginFilter, LoginFilter.PasswordFilterGMail, LoginFilter.UsernameFilterGMail, LoginFilter.UsernameFilterGeneric, NumberKeyListener, TimeKeyListener

 

 

DateKeyListener       For entering dates in a text field. 

DateTimeKeyListener   For entering dates and times in the same text field. 

DialerKeyListener      For dialing-only text entry  

DigitsKeyListener              For digits-only text entry  

InputFilter.AllCaps             This filter will capitalize all the lower case letters that are added through edits. 

InputFilter.LengthFilter        This filter will constrain edits not to make the length of the text greater than the specified length. 

LoginFilter                 Abstract class for filtering login-related text (user names and passwords)  

LoginFilter.PasswordFilterGMail This filter is compatible with GMail passwords which restricts characters to the Latin-1 (ISO8859-1) char set. 

LoginFilter.UsernameFilterGMail         This filter rejects characters in the user name that are not compatible with GMail account creation. 

LoginFilter.UsernameFilterGeneric       This filter rejects characters in the user name that are not compatible with Google login. 

NumberKeyListener           For numeric text entry  

TimeKeyListener        For entering times in a text field. 

   

根據解釋應該不難理解,根據你自己的需要選擇吧。


原文链接http://hi.baidu.com/ljlkings/blog/item/9b03b40b105848d93bc763d8.html
posted @ 2012-02-06 01:14 悟道2011 阅读(15) 评论(0) 编辑
我有个SQLite数据库,我是用标准的 SimpleCursorAdapto把数据库中的数据放到ListView里去,问题是,我想格式化一些database和listview之间的数据,比如我想把“price”列里的数据都除以一百,比如在数据库里是5400,显示到listview里就是54.00。
这一步操作该怎么实现?

 

 

 

sqlite本身提供的函数有限,而且sqlite是一种弱类型的数据库,实现你的要求比较困难
建议自己扩展SimpleCursorAdapto,在getview中使用代码处理一下


 

 

 

SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(..);
 
simpleCursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
 
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
 
        if(columnIndex == someColumnValue) {
 
                TextView text = (TextView) view;  // get your View
 
                text.setText(String.valueOf(cursor.getInt(1)/100));  //set some data
 
                return true;
 
        }
 
        return false;
 
    }
 
});
posted @ 2012-02-03 16:58 悟道2011 阅读(5) 评论(0) 编辑

在Android开发中,需要向sqlite中导入大量数据,按照一般做法是很耗时的,测试了一下,导入一条数据在100ms左右,按照这样的做法,如果导入1万条数据,大约得花17分钟,经过实际测试,确实花了17分钟左右。


解决耗时的办法是利用sqlite的事务来处理。方法如下:


首先获取database对象,然后执行如下方法:


db.beginTransaction();      //手动设置开始事务
//数据插入操作循环
//update insert
delete select可以循环嵌套操作
db.setTransactionSuccessful();       
//设置事务处理成功,不设置会自动回滚不提交
db.endTransaction();        //处理完成


测试了一下,如果导入1万条数据,大约耗时20秒左右。性能比之前提升了一大截。

原文连接:http://hi.baidu.com/fgfd0/blog/item/2264d1546015d243d10906d9.html
posted @ 2012-02-03 15:42 悟道2011 阅读(4) 评论(0) 编辑

在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看。android项目中的sqlite数据库位于/data/data/项目包/databases中。

使用DDMS导出sqlite数据库。

1、首先打开android项目的调试模式,然后找到显示DDMS:

选择DDMS

2、切换到DDMS,显示File Explorer窗口,找到/data/data/

然后找到程序包的文件夹,打开databases,就能看到sqlite数据库文件了。选择将其导出。

这样就把sqlite数据库文件以文件的方式导出来了,然后使用sqlite界面管理工具如sqlite administrator、sqlite man或者firefox插件sqlite manager等打开就可以了。

使用adb工具访问sqlite数据库

Android Debug Bridge(ADB)是Android的一个通用调试工具,它可以更新设备或模拟器中的代码,可以管理预定端口,可以在设备上运行shell命令,我们知道android是基于Linux内核,它的内部文件结构也是采用linux文件组织方式,因此访问它的文件结构需要使用shell。这次我们就会用shell来访问android应用中的sqlite数据库文件。

1、运行cmd,切换到android-sdk目录,运行adb.exe,加上参数shell,出现#号就代表进入了shell命令模式,注意adb要在Android模拟器运行时才能进入shell:

2、shell命令记住两个基本命令ls和cd,类似windows命令提示行中的dir和cd,代表列出当前目录下文件列表和进入到指定目录。了解这两个命令之后,就可以找到data/data/项目包名/databases:

找到数据库文件:

接下来就是使用sqlite管理工具来进行操作了。键入sqlite3 数据库名就进入了sqlite管理模式了。

在android的sdk中自带了sqlite3.exe,这是sqlite的官方管理工具,它是一个命令行工具。为了使用方便,将其路径注册到系统环境变量path中,即将;%Android_Home%加在Path中,这样只样运行sqlite3,就能直接打开sqlite管理工具了。

sqlite管理数据库篇

sqlite命令行工具默认是以;结束语句的。所以如果只是一行语句,要在末尾加;,或者在下一行中键入;,这样sqlite命令才会被执行。

sqlite常用命令:

.tables--查看数据库的表列表

.exit--退出sqlite命令行

其他命令可随时.help查看帮助。sql命令可直接在此命令行上执行即可:

 

 

原文连接:

http://www.cnblogs.com/walkingp/archive/2011/03/28/1997437.html
posted @ 2012-02-03 15:06 悟道2011 阅读(4) 评论(0) 编辑

老是看到LOG日志里有些系统回收的东西。明知道是内存问题。但还真不知道怎么下手。唉,无赖啊。网上找资料海里捞针,不容易啊。看到这篇不错。


1. verbosegc

一般Java虚拟机要求支持verbosegc选项,输出详细的垃圾收集调试信息。dalvik虚拟机很安静的接受verbosegc选项,然后什么都不做。dalvik虚拟机使用自己的一套LOG机制来输出调试信息。

如果在Linux下运行adb logcat命令,可以看到如下的输出:
D/dalvikvm(  745): GC_CONCURRENT
freed 199K, 53% free 3023K/6343K,external 0K/0K, paused 2ms+2ms

其中D/dalvikvm表示由dalvikvm输出的调试信息,括号后的数字代表dalvikvm所在进程的pid。

GC_CONCURRENT表示触发垃圾收集的原因,有以下几种:



  • GC_MALLOC, 内存分配失败时触发

  • GC_CONCURRENT,当分配的对象大小超过384K时触发

  • GC_EXPLICIT,对垃圾收集的显式调用(System.gc)

  • GC_EXTERNAL_ALLOC,外部内存分配失败时触发

freed 199K表示本次垃圾收集释放了199K的内存,

53% free 3023K/6343K,其中6343K表示当前内存总量,3023K表示可用内存,53%表示可用内存占总内存的比例。

external 0K/0K,表示可用外部内存/外部内存总量
paused
2ms+2ms,第一个时间值表示markrootset的时间,第二个时间值表示第二次mark的时间。如果触发原因不是GC_CONCURRENT,这一行为单个时间值,表示垃圾收集的耗时时间。

2. 分析

(1)虽然dalvikvm提供了一些调试信息,但是还缺乏一些关键信息,比如说mark和sweep的时间,

分配内存失败时是因为分配多大的内存失败,还有对于SoftReference,WeakReference和PhantomReference的处理,每次垃圾收集处理了多少个这些引用等。

(2)目前dalvik所有线程共享一个内存堆,这样在分配内存时必须在线程之间互斥,可以考虑为每个内存分配一个线程局部存储堆,一些小的内存分配可以直接从该堆中分配而无须互斥锁。

(3)dalvik虚拟机中引入了concurrentmark,但是对于多核CPU,可以实现parrelmark,即可以使用多个线程同时运行mark阶段。

这些都是目前dalvik虚拟机内存管理可以做出的改进。
posted @ 2012-02-02 20:24 悟道2011 阅读(38) 评论(0) 编辑
      Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命
令来查看和使用.

使用logcat命令

你可以用 logcat 命令来查看系统日志缓冲区的内容:
[adb] logcat [<option>] ...
[<filter-spec>] ...
请查看Listing of logcat Command Options ,它有对logcat命 令有详细的描述
.

你也可以在你的电脑或运行在模拟器/设备上的远程adb shell端来使用logcat命 令,也可以在你的电脑上查看日志输出。
$ adb
logcat
你也这样使用:
# logcat
过滤日志输出

每一个输出的Android日志信息都有一个标签和它的优先级.
日志的标签是系统部件原始信息的一个简要的标志。(比如:“View”就
是查看系统的标签).
优先级有下列集中,是按照从低到高顺利排列的:
    V — Verbose (lowest priority)
   
D — Debug
    I — Info
    W — Warning
    E — Error
    F —
Fatal
    S — Silent (highest priority, on which nothing is ever
printed)
在运行logcat的时候在前两列的信息中你就可以看到 logcat
的标签列表和优先级别,它是这样标出的:<priority>/<tag>
.

下面是一个logcat输出的例子,它的优先级就似乎I,标签
就是ActivityManage:

I/ActivityManager(  585): Starting activity: Intent {
action=android.intent.action...}

为了让日志输出能体现管理的级别,你还可以用过滤器来控制日志输出,过滤器可以帮助你描述
系统的标签等级.

过滤器语句按照下面的格式描tag:priority ... , tag 表 示是标签,priority
是表示标签的报告的最低等级. 从上面的tag的中可以得到日志的优先级. 你可以在过滤器中次写tag:priority
.

这些说明都只到空白结束。下面有一个列子,例子表示支持所有的日志信息,除了那些标签
为”ActivityManager”和优先级为”Info”以上的和标签为” MyApp”和优先级为” Debug”以上的。
小等级,优先权报告为tag.

adb logcat ActivityManager:I MyApp:D
*:S

上面表达式的最后的元素 *:S ,,是设置所有的标 签为”silent”,所有日志只显示有”View” and “MyApp”的,用
*:S 的另一个用处是
能够确保日志输出的时候是按照过滤器的说明限制的,也让过滤器也作为一项输出到日志中.

下面的过滤语句指显示优先级为warning或更高的日志信息:
adb
logcat *:W

如果你电脑上运行logcat ,相比在远程adbshell端,你还可以 为环境变量ANDROID_LOG_TAGS
:输入一个参数来设置默认的过滤
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D
*:S"

需要注意的是ANDROID_LOG_TAGS 过滤器如果 通过远程shell运行logcat 或 用adb shell logcat 来
运行模拟器/设备不能输出日志.
控制
日志输出格式


日志信息包括了许多元数据域包括标签和优先级。可以修改日志的输出格式,所以可以显示出特 定的元数据域。可以通过 -v
选项得到格式化输出日志的相关信息.

brief — Display priority/tag and PID of originating
process (the default format).
process — Display PID only.
tag — Display
the priority/tag only.
thread — Display process:thread and priority/tag
only.
raw — Display the raw log message, with no other metadata
fields.
time — Display the date, invocation time, priority/tag, and PID of
the originating process.
long — Display all metadata fields and separate
messages with a blank lines.

当启动了logcat ,你可以通过-v 选 项来指定输出格式:
[adb]
logcat [-v <format>]

下面是用 thread 来产生的日志格式:
adb logcat -v
thread

需要注意的是你只能-v 选项来规定输出格式 option.
查看 可用日志缓冲区

Android日志系统有循环缓冲区,并不是所有的日志系统都有默认循环缓冲区。为了得到 日志信息,你需要通过-b 选项来启动logcat
。如果要使用循环缓冲区,你需要查看剩余的 循环缓冲期:

radio — 查看缓冲区的相关的信息.
events —
查看和事件相关的的缓冲区.
main — 查看主要的日志缓冲区

-b 选项使用方法:
[adb] logcat [-b
<buffer>]

下面的例子表示怎么查看日志缓冲区包含radio 和 telephony信息:
adb logcat -b
radio
查看 stdout
和stderr


在默认状态下,Android系统有stdout 和 stderr (System.out和System.err )
输出到/dev/null , 在运行Dalvik VM的进程中,有一个系统可以备份日志文件。在这种情况下,系统会用stdout 和stderr 和 优先级
I.来记录日志信息

通过这种方法指定输出的路径,停止运行的模拟器/设备,然后通过用setprop 命 令远程输入日志

$ adb
shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell
start

系统直到你关闭模拟器/设备前设置会一直保留,可以通过添加/data/local.prop 可
以使用模拟器/设备上的默认设置
Logcat命令列表































OptionDescription
-b <buffer>加载一个可使用的日志缓冲区供查看,比如event 和radio . 默认值是main 。具体查看Viewing Alternative Log Buffers.
-c清楚屏幕上的日志.
-d输出日志到屏幕上.
-f <filename>指定输出日志信息的<filename> , 默认是stdout .
-g输出指定的日志缓冲区,输出后退出.
-n <count>设置日志的最大数目<count> ., 默认值是4,需要和 -r 选 项一起使用。
-r <kbytes>每<kbytes> 时 输出日志,默认值为16,需要和-f 选 项一起使用.
-s设置默认的过滤级别为silent.
-v <format>设置日志输入格式,默认的是brief 格 式,要知道更多的支持的格式,参看Controlling Log Output Format
.




posted @ 2012-02-02 17:46 悟道2011 阅读(15) 评论(0) 编辑

  Android Logcat使用起来可以方便的观察调试内容,除了不能正常的显示中文外(Logcat无法显示中文输出bug依然存在) ,基本上的使用方法(巧用Logcat调试程序)。本次要说明的是平时的Log.v Log.d Log.i Log.w Log.e的区别是什么?

  一、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");

  二、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择,如图

  

  三、Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息

  四、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。

posted @ 2012-02-02 17:44 悟道2011 阅读(8) 评论(0) 编辑

在Android程序中可以使用 android.util.Log 类来输出日志信息,该类提供了下列几个静态方法

Log.v(String tag, String msg);
Log.d(String tag, String msg);
Log.i(String tag, String msg);
Log.w(String tag, String msg);
Log.e(String tag, String msg);

分别对应 Verbose, Debug, Info, Warning, Error.

程序运行后并不会在 Eclipse 的控制台内输出任何信息,那么这些在程序中输出的日志跑哪去了呢? 有两种方法可以查看这些日志,最简单的方法是直接使用 Eclipse菜单 -> Windows -> Show View ->Other -> Android -> LogCat 即可;另外还可以通过SDK提供的工具来看,命令是 adb logcat ,该命令执行后会以tail方式实时显示出所有的日志信息。

posted @ 2012-02-02 17:43 悟道2011 阅读(9) 评论(0) 编辑
在Android中使用Intent在两个Activity间传递数据时,只能是基本类型数据,或者是序列化对象。Intent是一种基于消息的进程内和进程间通信模型,当我们需要在我们应用程序内部,多个Activity间进行复杂数据对象共享交互时,使用Intent就显得很不方便。此时,我们就需要一种数据共享的机制来实现。当然,直接使用java语言中的静态变量是可以的,但在Android中有更为优雅的实现方式。

The
more general problem you are encountering is how to save stateacross several
Activities and all parts of your application. A
staticvariable (for instance, a singleton) is a common Java way of
achievingthis. I have found however, that a more elegant way in Android is toassociate your state with the Application context.


--如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application
context。

As you know, each Activity is also a Context, which is
informationabout its execution environment in the broadest sense. Your
applicationalso has a context, and Android guarantees
that it will exist as asingle instance across your application.
--每个Activity 都是Context,其包含了其运行时的一些状态,android保证了其是single instance的。

The way to do this is
to create your own subclass of android.app.Application,and then specify
that class in the application tag in your
manifest.Now Android will automatically create an
instance of that class andmake it available for your entire application. You can access it fromany context using the
Context.getApplicationContext() method (Activityalso provides a method
getApplication() which has the exact sameeffect):
--方法是创建一个属于你自己的android.app.Application的子类,然后在manifest中申明一下这个类,这是android就为此建立一个全局可用的实例,你可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例,进而获取其中的状态(变量)。
  1. class MyApp extends Application {
     

  2.  
  3.   private String myState;
     

  4.  
  5.   public String getState(){
     

  6.     return myState;  
  7.    }  
  8.   public void setState(String s){  
  9.      myState = s;  
  10.    }  
  11. }  
  12.  
  13. class Blah extends Activity {  
  14.  
  15.   @Override 
  16.   public void onCreate(Bundle b){  
  17.      ...  
  18.      MyApp appState = ((MyApp)getApplicationContext());  
  19.      String state = appState.getState();  
  20.      ...  
  21.    }  

对于Application的生命周期,今天测试了一下,Application类型在该APP被install的时候就已经实例化了,并且onCreate也已经被调用了。


如果需要创建类型里面可能需要用到的对象的话,就可以在构造函数里面实现,但是如果需要将该类型bind
Service或者registerReceiver等操作时,需要将这些操作放到onCreate中,否则会抛出异常。其原因主要是这个对象还没有创建完成,此时你用这个对象来bindservice必然会出现意想不到的情况,所以在使用时还需要注意。

posted @ 2012-02-02 16:50 悟道2011 阅读(6) 评论(0) 编辑

在webService里面Session默认是不可用的,必须得开启Session才能使用,如
[WebMethod(EnableSession = true)]
public string Login(string name)
{
    Context.Session["name"] = name;
    return name;
}
需要在当前方法上启用Session  [WebMethod(EnableSession = true)]

 

另外参见

http://www.cnblogs.com/hoojo/archive/2011/03/16/1985699.html
posted @ 2012-02-02 14:08 悟道2011 阅读(5) 评论(0) 编辑

不知道大家是否想试一下用Android模拟器如何访问自己建的Web站点呢? 下面我将讲一下如何实现.

Step 1:我用的Tomcat作为本地服务器,在Webapps这个目录里,把我的名为kankong的Web工程放进来,启动Tomcat服务器.

在浏览器里输入:http://localhost(或者127.0.0.1):8080/kankong/index.html将出现如下界面:

Step 2:启动Android 模拟器:

如果你在Eclipse里已经启动了Android模拟器就跳过此步.我们如何手动启动Android模拟器呢?

首先运行cmd出现我们习惯的黑屏,输入Android list avd(列出所有AVD模拟器)

然后我们选择其中一个启动以Android 1.5为例子:emulator -debug avd_config -avd android 1.5:

出现我们熟悉的画面如下:

Step 3:打开浏览器输入http://localhost:8080/kankong/index.html?

我们的第一想法是输入http://localhost:8080/kankong/index.html,可是这将不会成功,为什么呢?问题是这样的,android模拟器(simulator)把它自己作为了localhost,也就是说,代码中使用localhost或者127.0.0.1来访问,都是访问模拟器自己!这是不行的!

如果你想在模拟器simulator上面访问你的电脑,那么就使用android内置的IP 10.0.2.2 吧,  10.0.2.2 是模拟器设置的特定ip,是你的电脑的别名alias记住,在模拟器上用10.0.2.2访问你的电脑本机.
也就是输入http://10.0.2.2:8080/kankong/index.html将出现如下界面:

OK~这样就大功告成了!

原作者:魏祝林

原文链接:http://blog.csdn.net/Android_Tutor/archive/2009/12/13/4996752.aspx

posted @ 2012-02-02 11:51 悟道2011 阅读(6) 评论(0) 编辑
HTML:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
<META HTTP-EQUIV="expires" CONTENT="0">

ASP
response.expires=0
response.addHeader("pragma","no-cache")
response.addHeader("Cache-Control","no-store, must-revalidate")

PHP
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control:
no-store, must-revalidate");
header("Pragma: no-cache");

JSP:
response.addHeader("Cache-Control", "no-store, must-revalidate");
response.addHeader("Expires", "Thu, 01 Jan 1970 00:00:01 GMT");
posted @ 2012-01-06 10:49 悟道2011 阅读(5) 评论(0) 编辑
摘要: 据国外媒体报道,就在14年前,苹果还处于面临破产的边缘。如今,苹果业已成为全球最受钦佩的科技公司。史蒂夫·乔布斯因其戏剧性的转折而闻名,但他到底做了什么,才打造了现在的苹果帝国。以下就是乔布斯让苹果成为最受钦佩科技公司的11种独特方法。1、与竞争对手合作你能够想像百事和可口可乐的合作吗?或者是Verizon与AT&T的联手?当苹果与微软在1997年的Macworld展览会上宣布合作时,这是何等的令人惊奇。在经历了12年的财务亏损之后,乔布斯需要让苹果快速地赚钱,为此,乔布斯开始求助比尔·盖茨,在此之后,微软在苹果投资了1.5亿美元。乔布斯曾经宣称:“在我看来,苹果与阅读全文
posted @ 2011-08-25 15:07 悟道2011 阅读(15) 评论(0) 编辑
摘要: Welcome to Adobe Translation Pootle!Adobe社区翻译系统正式发布,本系统正在试运行阶段,欢迎大家参与使用。加入社区翻译,分享Adobe技术,参与并赢取奖励。阅读全文
posted @ 2011-08-22 14:47 悟道2011 阅读(14) 评论(0) 编辑
摘要: 英文原文:Do You Morph Into A Different Programmer? 在软件开发过程中,你经历的每件事情都会潜移默化地影响着你。随着时间的流逝,年纪的增长,对于程序开发技术(相同/或者相关能力)以及自身的理解也会不断沉淀,这些最终也会帮助你达成目标——成为一名优秀的程序员。这里谈到的经历不仅限于程序员生涯里的里程碑,比如换工作、成为领导/经理或者自己创业。你所经历的每一份工作、每个项目(不论大小)、与团队成员的每次交流、甚至你实现的每一个程序模块,都会让你变得比以前更优秀、更有活力、更有见地。 在日常的工作当中不放过任何一点可以学习的新知识,会让你成为更加出色的程序员.阅读全文
posted @ 2011-08-19 09:46 悟道2011 阅读(19) 评论(0) 编辑
摘要: 在过去的N年中,我遇到了很多使用囧然不同风格的开发者,下面是我所知道的一些,你还知道其它的吗? 散弹枪编程 这种编程风格是一种开发者使用非常随意的方式对待代码。嗯,这个方法调用出错了那么我会试着把传出的参数从 false 变成 true!,当然依然出错,于在过去的N年中,我遇到了很多使用囧然不同风格的开发者,下面是我所知道的一些,你还知道其它的吗?散弹枪编程 这种编程风格是一种开发者使用非常随意的方式对待代码。“嗯,这个方法调用出错了……那么我会试着把传出的参数从 false 变成 true!”,当然依然出错,于是我们的程序员会这样:“好吧,那我就注释掉整个方法吧”,或是其它更为随意的处理方.阅读全文
posted @ 2011-08-17 11:50 悟道2011 阅读(25) 评论(0) 编辑
摘要: 当修改 DataGrid 实例的数据, 即修改数据源(dataProvider) 的内容时,要实现 DataGrid 的自动刷新,有两步。1.将数据源设置为绑定。比如 数据源 为 dataArray,要在声明时在上面加 [Bindable] 标签[Bindable]var dataArray:Array;有关数据绑定可以看看我的另外一篇文章http://hi.baidu.com/think122/blog/item/54970bfa2aed732b4e4aea16.html2.设置为绑定以后,当你修改数据时,DataGrid 实例不会显示新的数据,除非你鼠标点一下 DataGrid ,才会显.阅读全文
posted @ 2011-08-16 22:13 悟道2011 阅读(79) 评论(0) 编辑
摘要: http://msdn.microsoft.com/zh-cn/windowsphone/hh182984.aspx?ocid=ban-f-cn-wp7-C9Video-MSDN微软的一些开发者视频还是不错的。阅读全文
posted @ 2011-08-02 15:51 悟道2011 阅读(28) 评论(0) 编辑
摘要: 作为一个狂热的 Android 用户,我一直在寻找适合Web开发人员使用的一些应用程序。经过搜索发现能够找到Web开发几乎每个方面的工具,涉及从Web服务器本身到FTP客户端再到一个源代码查看器,以及网站分析工具等等。以下推荐10款非常实用的Android端的Web开发工具。1.AndFTPAndFTP 是 Android 手机上的支持 FTP、SFTP、SCP和FTPS 的客户端软件,可管理多个 FTP 服务器,自带文件浏览器和FTP文件浏览器,提供下载和上传的功能,可对文件进行重命名、删除、复制、权限设置、创建目录等操作。2.JavaScript ReferenceJavaScript .阅读全文
posted @ 2011-08-02 15:26 悟道2011 阅读(122) 评论(0) 编辑
摘要: 在flex程序初始化默认加载滚动条还没出来时就报了Error 2032 IO流错误,但只限于三维演示厅里的用户机上运行时才出现,别的机器都正常,后来将flash builder中的编译参数改为merged into swf,就是将flex框架嵌入到swf里面,而不是使用shared library共享库,问题解决。 过了几个月又碰到这个问题,只是在笔记本上会报Error2032,在其他电脑上都没问题,用Fiddler分析http请求发现,在使用RSL的flex程序初始化时会去下载xxx.swz文件,而IIS服务器返回的是404找不到此文件,而服务器上分明有这个文件,怀疑是IIS没有swz文件.阅读全文
posted @ 2011-08-01 20:25 悟道2011 阅读(255) 评论(0) 编辑
摘要: 微软向微软开发人员网络(MSDN)用户发布了最新的软件开发工具Visual Studio LightSwitch。这个开发工具利用模板和快捷键简化商务应用程序的开发。 LightSwitch是面向对编程艺术不太精通的商务应用程序开发人员的一个新工具。微软称,LightSwitch是制作用于云和桌面的商务应用程序的最简单的方法。用户能够采取从LightSwitch集成开发环境直接发送到Windows Azure方法把LightSwitch应用程序提供到云端。微软开发部门高级副总裁S. "Soma" Somasegar称,LightSwitch提供各种预制的模板和工具,你可以根阅读全文
posted @ 2011-07-29 09:27 悟道2011 阅读(130) 评论(0) 编辑
摘要: Oracle今天已经放出Java 7正式版的二进制安装包,这不是小升级,而是Java诞生以来最大的改进,增加了闭包等很多有用的特性。最新版的Netbeans7已经支持Java7。以下是升级地址;http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html阅读全文
posted @ 2011-07-29 09:22 悟道2011 阅读(17) 评论(0) 编辑
摘要: 我依然记得当我完成学业时,我是多么的天真。那时我深信自己已经准备好进入任何一家软件公司,并开始成为一个顶级的开发人员。显然,开始工作后没多久我就意识到,还有很多事是我所不了解的。 在不断吸取经验的同时,我一直在努力学习那些我从来没有学过的,但却是成为优秀的开发人员所应了解的基本知识。以下是我希望自己能在学校就学到的10件事。 0. 我们总是错的 开发人员有着相当大的自我意识,包含了一些其他的非技术性缺陷,这也正是为什么我们很难发现我们做错了什么。我看到过很多无休止的设计讨论,开发人员不断地发表自己的想法……呵呵!猜猜怎样……我们都错了,唯一的区别就是我们犯错的离谱程度不同。 理解并接受这个事实阅读全文
posted @ 2011-07-19 09:50 悟道2011 阅读(34) 评论(0) 编辑
摘要: 通常,失败会让大家觉得沮丧、愤怒进而互相指责。然而,如果不能从失败中学到点什么,那么这真的将是彻头彻尾的失败。可是敏捷团队怎么才能让失败成为成功之母呢?James Shore觉得与其怒火中烧,不如认可大家的努力,大家都已经尽力而为了。我不会去指责大家,我会去检讨一下流程。是什么样的工作方式让我们有了犯错误的可能?为了不再重蹈覆辙,我们应该怎么改进我们的流程?这就是所谓的根本原因分析。万一失败了,那么一个最有效的根本原因分析法就是“五个为什么”技术。“五个为什么”分析法源自于精益制造。它主要通过识别症状,随后五次不断地提问“为什么”来找出问题的根本原因。据观察,通常问了五个为什么以后,相应的解决阅读全文
posted @ 2011-07-15 10:26 悟道2011 阅读(26) 评论(0) 编辑
摘要: 成为一个优秀的程序员和成为其他优秀的专业人员一样,需要尽可能多的做一些有质量的工作。有句很流行的话可以总结:做,正确做事,立马就做。(Do it. Do it right. Do it right now) 0. 将一天要做的事情列成清单 完成复杂活动(activity)的最好方法是将其拆分成简单的各项活动。每天早上,将你一天要完成的活动进行拆分,然后制定一个相应的日程安排表,这样能够帮助你:更好的理解这个活动。每天都有一个集中的目标。提高你的估计能力,几天之后,你会发现你能预测一天的工作量。 1. 一次只做一件事 集中于一项任务比同时做多项任务更多产,不同的研究已经证明这个观点,并且发布在不阅读全文
posted @ 2011-06-28 14:33 悟道2011 阅读(38) 评论(0) 编辑
摘要: 加载形式FLASH加载文件有两种常规方式:一种是URLLoader,可以加载文本、二进制数据或 URL 编码变量形式的数据,然后转换成简单的文本形式或值对字符串形式;一种是Loader,可以将加载的图像文件转换成BitmapData,也可以解析SWF文件。(Socket, LocalConnection这些非常用类不在讨论范围)加载的资源应被统一管理以方便调用和重用,管理方式一般有两种:一种是将资源全部打包进SWF;一种是加载分散资源通过配置进行管理。我将对这两种管理方式进行介绍。资源打包成SWF在编辑FLA文件时,我们可以导入各种图片,并为其设置链接名。除手工逐个操作外,我们可以借助JSFL阅读全文
posted @ 2011-06-24 14:52 悟道2011 阅读(90) 评论(0) 编辑
摘要: 一般程序开发完成后就进入了繁琐无趣的后期维护阶段,请不要以为一个不停更新的项目后期维护是一件轻松的事情,它会暴露出开发过程中的所有硬伤,不规范的写法、混乱的逻辑结构、高耦合导致地牵一发而动全身。虽然开发内容实际上减少了,但人力成本反而更高。要提高这方面效率有很多技巧,本文介绍的内容只是起点--如何快速找到项目中需要修改的代码。一般出现问题首先看到得是表现部分,例如对话框,关系到一些具体逻辑或某个服务端请求,即使不是很清晰的部分也一定有临近的区域。根据表现找到其对应代码,我将其称为定位。搜索关键字:泛用但低效搜索关键字是广泛使用的方法。例如,你在节目上看到某个图片,找到图片标志,在所有代码中搜索阅读全文
posted @ 2011-06-24 14:52 悟道2011 阅读(29) 评论(0) 编辑
摘要: GC和内存泄露无关垃圾回收,这次是一个被无数人讨论过的传统话题。Action Script使用的是和Java相似的内存管理机制,并不会即时回收废弃对象的内存,而是在特定时间统一执行一次GC(Gabage Collection)操作来释放废弃对象的内存,避免了重复判断是否需要回收产生的性能问题。但要注意,这只是决定回收的时机,而不是回收的内容。这个延迟执行内存回收也就是个表面的现象,不管什么时候执行GC,能够回收的内存最终都能回收,不能回收的肯定不能回收。唯一的影响是,因为回收是延迟执行的,你在查看内存的时候不能直观地看到因为一个对象被废弃而回收内存的过程,会产生迷惑。但这对于解决内存泄露是无关阅读全文
posted @ 2011-06-24 14:51 悟道2011 阅读(87) 评论(0) 编辑
摘要: FLASH与传统环境的不同点MVC最早在1979年的时候第一次被人提出。不过,当时还不存在网络应用的概念。之后当万维网诞生之后,又过了很长时间……它并不是自诞生就开始流行的,而改变的原因很简单——因为两个极其流行的开发框架包含了这种模式,它们就是:Struts 和 Ruby on Rails。之后,模仿者蜂拥而至。所以,在人们眼里看来,实际上是先有的Struts,然后才有的MVC,也无怪乎MVC的概念会始终沾染着Web概念,乃至和一些框架附加内容牵涉不清。因为Struts很好用,别的不说,至少让HTML显得干净了很多。所以很多人都在用Struts,这未必是因为需要MVC模式,而是因为他们需要S阅读全文
posted @ 2011-06-24 14:47 悟道2011 阅读(47) 评论(0) 编辑
悟道2011