# 大染志
分享编程、运维、生活与思考

Junv's blog

## Eclipse 自动补全、联想设置

发表于 2011-10-09 更新于 2026-08-04

笔者在第一次使用eclispe 3.7即indigo这个版本的时候，便发现一个小小的不快：平时在不知道某个方法怎么写的时候会按下Alt +/去获取eclipse给出的提示。但是在3.7这个版本却不好用，得到的是eclipse自动帮你选择一个他认为最合适的方法或者变量等等，帮你补全，而不是原来的显示所有可供选择的，让你来选择。

纠结了很久，期间尝试过使用网上说的修改Content Assist。将之前默认的 .后面加上ABCD…abcd…所有52个字符。并且 把联想的时间从系统默认的200ms提高到50ms。但是经过修改之后，eclipse变得和visual studio 一样，你每输入一个字符，系统就会进行一次提示。不过我发现这种情况下eclipse占用的CPU、内存资源变多了，在我的笔记本有时候还会变得顿卡。这不是最好的办法。

> 前几天吧，我才发现这个问题的症结所在。原来是eclipse官方的快捷键方式改变了。其实以前Alt+/那个联想一直在，只是在3.7版本里面这个快捷键变成了自动补全（即系统自动选择一个最合适的进行补充）。我们需要做的就是依次打开Windows——preferences——General——Keys。找到Content Assist这一项，这一项系统默认的是Alt+Space。这里我们把它改成Alt+/

## 入手腾龙17-50mm,F2.8

发表于 2011-10-08 更新于 2026-08-04

好不容易，求我老汉给了1000，还要把自己原来的镜头卖掉，还要一个月省吃俭用500块钱，才可以买下这个镜头。今天从南充过来，下火车就去把镜头买了￥2130.还要吧比我想象中的贵了几十块钱。不过买了镜头，我的兜里就只剩下20多块钱了。哎，所以必须得尽快卖掉那个原有的套头。

猜到了很多人看到我买了镜头就会觉得我很有钱，我真的有钱吗？我难道还不清楚，随便你们怎么说吧！面对流言蜚语我有什么办法。我只能套用那句俗话，走自己的路，让别人说去吧！

还是说说镜头，大光圈确实效果很不错，镜头很厚实，不够就是对焦的时候声音有点大！马达吱吱地想!!

镜头没有防抖功能，希望使用的时候不会出现什么问题吧！下面上图一张

## 我最终还是放弃了android选择了Java web

发表于 2011-09-28 更新于 2026-08-04

也许是今天上课听到其他人讲人家去腾讯面试怎么怎么样，我心里还是有很大的震动。我不再想学android了，虽然老师叫我负责这一块工作，但是我感觉我在学习的过程中发现android的代码逻辑和我平时接触的java EE的逻辑还是有一些区别。我真的还是喜欢搞我的网站。这些我都比较了解。我也喜欢那些新鲜的事物，因为我喜欢他。虽然就在今天上午之前，我还是很想把Android尽快学好。但是原谅我吧，明年我就去面试了，在这短短一年的时间里面请允许我学习我最喜欢的东西吧，这样我想我胜利的机会才会更大。

况且，我觉得Web App应该是未来的王者，看看Chrome OS,虽然现在Android 还不推荐使用Web App ,但是我大胆预测一下，未来三年内Android 将允许使用Web App.而且Windows 8将来也支持使用javascript +html 5进行程序开发。这些都是学习javascript的好处吧。而且我自己也有javascript 的底子啊，经过暑假一个多月的奋斗，我觉得我的javascript能力提升了不少！

看看Java EE那么多好用的框架，看看 Nosql是多么地吸引人，看看node.js是多么的新潮，还有很多很多好的东西！

从现在开始，我就搞Java EE了！

加油！

## 积极性之我见

发表于 2011-09-27 更新于 2026-08-04

在我看来积极性可能比能力更加重要，能力可以努力一点一点提升，但是积极性却是一个人内心意识的反应。我们通常我们感兴趣的事情很有积极性，充满斗志。但是有那么一部分人，他之前的行为让你觉得他对这个事情满怀激情，但是一旦他到达一个一个安定、稳定的环境，即使是他自己感兴趣的事情，他也变得懒惰了。难道他们仅仅是因为虚荣心吗？

最近在帮助老师做一个android项目，由于我是高一级的学生，于是老师叫我负责这个android团队，带领低一级的同学一起参与界面设计、问题讨论、代码编写。但是通过开学这几周下来，我发现这个leader不太好当。我一个人做了几个人的事情。而且我还发现，编程的孩子只喜欢编程，他们不想参与讨论，不想参与草图的制作，心里面想的是，一拿到这个程序立刻开始写代码。界面设计的同学也不愿意开会讨论。设计出来的结果也不能让人满意，没有一点规范可讲。甚至我们最初梦寐以求的进入实验室，他们现在都开始变得不那么渴求，或者说也许只是对实验室名称上的渴求。一旦进入实验室，他们便变得不那么积极了。所有的这一切都让我有一个想法，这些学弟、学妹们怎么了，怎么变得一届不如一届了。

我希望他们对每一项新的任务都已积极的心态来对待，其实每一种技能都是你的本钱，我现在体会得越来越深了。开发一个软件，不仅仅是代码、代码虽然重要，但是如果没有软件工程、没有市场营销、没有良好的用户体验设计，其实这个软件根本不能用，即使你的代码写的再好、即使你的算法再优良。以积极的心态去面对每一项任务，把他们当做一个个新的挑战去完成，虽然过程中你可能会很累、很迷茫、很沮丧，但是坚持到最后，你才发现你学到了很多东西，不仅仅是编写代码。

积极、乐观的态度，还可以给你的老师、你的上司留下好的印象。最重要的是积极这种生活态度很好！说不出的好。

## 搬到新浪，初衷很无耐

发表于 2011-09-26 更新于 2026-08-04

之所以会将之前的顶级域名博客，弃用，而转而使用这个博客，其实我算是不得已而为之。

也许就是舍不得再花钱在这里面吧，想想自己最初的打算，用写博客挣的广告费用，来购买空间，可实际上呢？

哎，还是省省吧。

虽然橡皮泥一直没有把我的空间给我停掉，但是我自己也过意不去啊。毕竟空间他也是花钱买的啊！

综上所述，所以我还是决定了，就用这个新浪的试试看吧！

加油新浪，加油Junv!

争取今天或者明天写一篇新的博客吧！

## tomcat 7配置数据库连接池，使用SQL Server2005实现

发表于 2011-07-06 更新于 2026-08-04

> 昨天看了一些网上的tomcat数据库连接池配置的东西，但是一直没配好，主要原因是网上的文章几乎没有争对tomcat 7进行配置的，而且针对SQL SERVER的也不多，今天上午看了官方的文档，花了一上午时间终于配置好了数据库连接池，这里发给大家看看，如果有什么疑问就留言吧。

首先我们需要向项目中导入tomcat-dbcp.jar 、servlet-ap.jar和sql server的驱动sqljdbc4.jar 包到 web-inf 文件夹下的lib目录 。

然后增加context.xml

这里有两种方法，第一种是在tomcat程序目录下面的conf/context.xml里面修改，这里修改之后所有的程序都将都将覆盖数据库连接池，但是这种方法不够灵活。这里我们选择第二种方法 在项目的Web-content/meta-inf 目录下创建一个context.xml文件，在里面添加如下内容：

    1

这里需要修改的是 将所有的SYSDEMO改为你自己的使用的数据库的名称

将driverClassName改为你所使用数据库的驱动，这里是SQL SERVER的驱动。

将url改为jdbc链接该数据库的地址,这里是SQL SERVER的地址，

将username 、password改为你自己数据库用户名和密码

maxActive=”100″ maxIdle=”30″ maxWait=”10000″

可以将这三个参数进行修改，

第一个是最大活动的连接数

第二个是最大的未连接数

第三个是最长的等待时间，单位是毫秒

然后再修改项目的webContent/web-inf/web.xml文件

添加如下内容:

    1
    2
    3
    4
    5
    6
    7

    MySQL Test App

       DB Connection
       jdbc/blog
       javax.sql.DataSource
       Container

这里必须要改的是: jdbc/SYSDEMO

改为 jdbc/你自己的数据库

好了然后就可以使用了。

如下是我测试的servlet文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28

    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.SQLException;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.sql.DataSource;
    @WebServlet("/TestPool")
    public class TestPool extends HttpServlet {
        private static final long serialVersionUID = 1L;

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         try{
              Context initContext = new InitialContext();
              Context envContext  = (Context)initContext.lookup("java:/comp/env");
              DataSource ds = (DataSource)envContext.lookup("jdbc/SYSDEMO");
              Connection conn = ds.getConnection();
              System.out.println("成功了。。。。。。。。。。");
          }catch(Exception e){
               System.out.println("出错了。。。。。。。。。。。。。。。。。。");
              e.printStackTrace();
          }
        }
    }

将 DataSource ds = (DataSource)envContext.lookup(“jdbc/SYSDEMO”);

“jdbc/SYSDEMO” 的sysdemo改为你前面使用的数据库的名称即可。

好了。大功告成。

## Android上传图片到服务器Server端servlet源码

发表于 2011-06-24 更新于 2026-08-04

> 更新：现在提供源码下载了！在文末有地址！

> 由于115关闭了外部下载，还是麻烦大家留言写下地址吧，我会把包发给大家的。

> 最近看到很多朋友都留言回复很开心，我也很高兴，自己做的这样一个小程序可以帮到你们。上篇文章详细讲了如果实现android端的代码，很多朋友都在问s服务器端servlet源代码，这里就贴出来给大家吧，但是最近很忙，就先暂时不详细解释了。

> 这里说明一点，这个程序是使用了Apache Commons 的一个上传文件的开源组件叫做FileUpload,用的包是commons-fileupload-1.2.2.jar。其他的就不多说了，如果你直接粘贴使用下面代码，请你一定要导入这个包。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86

    package info.junv;
    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.List;

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileItemFactory;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;

    @WebServlet("/HandleUpload")
    public class HandleUpload extends HttpServlet {
        private static final long serialVersionUID = 1L;

        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {

        File temp = new File(request.getSession().getServletContext().getRealPath("/")
                    + "temp");// 临时目录
            System.out.println("临时目录为=" + temp);
            String loadpath = request.getSession().getServletContext()
                    .getRealPath("/")
                    + "image"; // 上传文件存放目录

            System.out.println("文件保存目录为=" + loadpath);

            DiskFileItemFactory factory = new DiskFileItemFactory();

            factory.setSizeThreshold(1024*1024);   //设置最大可以存到内存值
            factory.setRepository(temp);  //设置缓存文件夹

            ServletFileUpload fu = new ServletFileUpload(factory);

            fu.setSizeMax(1024 * 1024 * 1024); // 设置允许用户上传文件大小,单位:字节

            System.out.println("开始上传。。。。。。。。。。。。");
            // 开始读取上传信息
            int index = 0;
            List fileItems = null;

            try {
                fileItems = fu.parseRequest(request);

            } catch (Exception e) {
               System.out.println("获取相关信息。。。。。。。。。。。。失败");
            }

            Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件
            while (iter.hasNext()) {

                FileItem item = (FileItem) iter.next();// 忽略其他不是文件域的所有表单信息
                if (!item.isFormField()) {

                    String name = item.getName();
                    System.out.println("FileName===="+name);

                    File fNew = new File(loadpath, name);

                    try {

                        item.write(fNew);
                        System.out.println("..........Uploaded Successed");
                    } catch (Exception e) {
                        System.out.println("An Error occured!");
                        e.printStackTrace();
                    }

                } else // 取出不是文件域的所有表单信息
                {
                    String fieldvalue = item.getString();

                }
            }

        }

    }

> 请看我们的下一篇文章：Android 拍照并上传图片到服务器源码

> > android端源码和web 端源码：http://115.com/file/bevc7e16#uploadsome.rar

## Android 拍照并上传图片到服务器源码

发表于 2011-06-16 更新于 2026-08-04

> 更新：我已经把源码共享出来了，大家可以随便下载！

> 最近帮老师做一个拍照上传的小android 应用。以前虽然看过这方面的东西，但是没有真正做过东西出来，这次老师要求在一个星期左右做出来，其实还是给了我不少压力，于是自己一边学习，一边写代码，同时在望山找了大量的东西，最初都没有解决这个问题。后面才慢慢解决这些问题。

下面是我写的源码给大家分享一下，说明一下，这些代码是调试完成可以运行的，当然这里没有提出全部的完整代码。如果各位需要的话，给我留言吧，我会通过邮箱发给大家的。 补充servlet端源代码：Android上传图片到服务器Server端servlet源码。这里的程序没有涉及服务器端使用的Servlet代码。稍后在贴出来给大家把。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36

    // 选择拍照上传，获取bitmap 对象，并保存到sdcard中。
    (takePhoto = (Button) findViewById(R.id.take_photo)) .setOnClickListener(new OnClickListener() {
    @Override public void onClick(View v) {
    //启动相机
    Intent myIntent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(myIntent, ACTIVITY_IMAGE_CAPTURE);
    } });
    // 因为调用了startActivityForResult，调用相机后回执行这个方法
    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
    //获取bitmap对象
    Bundle dataBundle = data.getExtras();
    Bitmap btp = (Bitmap) dataBundle.get("data");
    data.putExtra(MediaStore.EXTRA_OUTPUT, btp);
    / 如果Junv文件夹不存在则创建文件夹，并将bitmap图像文件保存
    dir = new File(ptoDir);
    if (!dir.exists()) { dir.mkdirs(); Log.d("创建文件夹", "。。。。。。。。。。。成功"); }
     // 为文件随机产生文件名
    File tmpFile = new File(ptoDir, picName = System.currentTimeMillis() + ".jpg");
    uploadFile = ptoDir + picName;
    try {
    // 将bitmap转为jpg文件保存
    FileOutputStream fileOut = new FileOutputStream(tmpFile);
    btp.compress(CompressFormat.JPEG, 100, fileOut);
    } catch (FileNotFoundException e) {
    //捕获异常
    Log.d("File Saving", "fail.....");
    }
    // 将照片显示到程序中
    ImageView myImage = (ImageView) findViewById(R.id.show_img);
    //设置图片大小
    btp = Bitmap.createScaledBitmap(btp, myImage.getWidth() - 10, myImage.getHeight() - 10, true);
    //将图片加载到imageView中
    myImage.setImageBitmap(btp);
    myImage.setPadding(2, 2, 2, 2); } else { return; }
    }

执行完这个方法，我们通过bitmap对象将拍照所得已经显示在程序里面了，然后之所以将其保存为文件，是为了上传的方便。

然后下面是一个上传的图片的方法，大概就是将图片构建成流发送到是、服务器端，这个代码是使用的网上一个前辈的代码，这里不知道他的地址了，但是还是说明一下吧，并表示感谢。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61

    //上传文件至Server的方法
    private void uploadFile(Bitmap btp) {
     String end = "rn";
     String twoHyphens = "--";
    String boundary = "*****";
    try {
    URL url = new URL(actionUrl);
    HttpURLConnection con = (HttpURLConnection)
    url.openConnection();
    //允许Input、Output，不使用Cache
    con.setDoInput(true);
    con.setDoOutput(true);
    con.setUseCaches(false);
    //设置传送的method=POST
    con.setRequestMethod("POST");
    //setRequestProperty
    con.setRequestProperty("Connection", "Keep-Alive");
    con.setRequestProperty("Charset", "UTF-8");
    con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
    // 设置DataOutputStream
    DataOutputStream ds = new DataOutputStream(con.getOutputStream());
    ds.writeBytes(twoHyphens + boundary + end);
    ds.writeBytes("Content-Disposition: form-data; " + "name="file1";
    filename="" + picName + """ + end);
    ds.writeBytes(end);
    //取得文件的FileInputStream
    FileInputStream fStream = new FileInputStream(uploadFile);
    // 设置每次写入1024bytes
    int bufferSize = 1024;
     byte[] buffer = new byte[bufferSize];
    int length = -1;
    // 从文件读取数据至缓冲区
    while ((length = fStream.read(buffer)) != -1)
    {
     // 将资料写入DataOutputStream中
    ds.write(buffer, 0, length);
     }
    ds.writeBytes(end);
    ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
    //close streams
    fStream.close();
    ds.flush();
    // 取得Response内容
    InputStream is = con.getInputStream();
    int ch;
    StringBuffer b = new StringBuffer();
     while ((ch = is.read()) != -1) {
     b.append((char) ch); }
    // 将Response显示于Dialog
    showDialog("上传成功" + b.toString().trim());
    // 关闭DataOutputStream
    ds.close();
     } catch (Exception e) {
    showDialog("上传失败" + e);
     } }
    // 显示Dialog的method
    private void showDialog(String mess)
    {
    new AlertDialog.Builder(this).setTitle("Message").setMessage(mess) .setNegativeButton("确定", new DialogInterface.OnClickListener() {
     public void onClick(DialogInterface dialog, int which) { } }).show();
     }

请看我们的第一篇文章：Android上传图片到服务器Server端servlet源码。

> android端和web 端源码下载：http://115.com/file/bevc7e16#uploadsome.rar

## 解决tortoise svn不能checkout Google code

发表于 2011-06-03 更新于 2026-08-04

不知道各位同学使用svn吗？简单说SVN是一个代码版本管理软件，可以让不同的人更新和同步代码，并对代码进行版本管理。现在google code 里面这么多开源项目，都是可以去用SVN checkout 下载下来源代码的，不知道各位有没有尝试呢？

最近在做一个小小的项目的时候用到了SVN，但是当时也发现一个问题，就是tortoise SVN 不能checkout google code 里面的代码。当时用谷歌找了找，可是没发现解决的办法，今天又看到我比较喜欢的google制作的一本电子书——20thingsilearned，里面包含了很多HTML 5和CSS 3特性，而且他还说一个开源项目，说明我们免费的去下载源代码来研究它里面很酷炫的东西。当然也面对了同样的问题，不能checkout.

> # Non-members may check out a read-only working copy anonymously over HTTP.

> svn checkout http://20thingsilearned.googlecode.com/svn/trunk/ 20thingsilearned-read-only

这是谷歌官方的代码，大概的意思是所有的匿名用户都可以使用下面这个地址进行匿名checkout ,即是不用登陆。不过我试着新建一个文件件，右键，选中tortoise SVN的checkout 选项，还是不行，最终在国外一个网站找到了解决的办法，即是正确的地址是http://20thingsilearned.googlecode.com/svn/trunk/ 去掉后面的那些东西，因为那些东西是为CLI 用户使用的（什么是CLI用户我也不太清楚）.总之你使用去掉后面那一块的地址就可以checkout啦。

还有如果你是项目发布者checkout不能弹出提示框要求你输入密码的话，请先这样做，请先选中tortoiseSVN里面的import选项，在里面弹出你的SVN地址，比如我的项目的地址是https://moland.googlecode.com/svn/trunk/ moland –username wahyd4。这个回跟上你的项目名称和用户名的。然后就会提示你输入用户名和SVN密码，这个密码是项目里面生成的SNV密码而不是google账户密码哦。然后就会自动import了，然后你就可可以顺利checkout l了、。。

## 专业的项目UI原型设计软件——Balsamiq Mockups

发表于 2011-06-02 更新于 2026-08-04

> 前面我介绍了一款项目UI原型设计软件pencil,之前我以为那个工具已经足够使用，足够方便了，足够强大了。不过上午时候在网上偶然发现原来设计界还有这样一款更加棒的UI原型设计软件——Balsamiq Mockups。

下面着重介绍一些它的优点：

- 支持的平台更多，windows，linux、Mac均支持。
- 软件包含的设计元素更加丰富，包含10个类别，而且支持将所有元素都变为速写设计的样式，看起来更加像用笔画的（我个人这样粗俗地认为）
- 对于每个元素可以细节调节的操作和修改更加丰富。
- 支持多窗口设计
- 支持想设计导出为PNG、PDF
- 针对移动设备做了很多很好的工作。
- 支持将设计导出为html、css、flex文件等
- 让设计人员使用起来效率更高吧。

下面是我刚才花大概15分钟设计的一款一个简单的界面：

因此大家可以知道，这款软件的设计效率的确不是吹的，虽然这个界面很简单，不过我个人觉得还是很不错啦。

当然既然有这么多优点，所有它也就理所当然是一款商业软件。目前购买这个软件需要$79美元，才可以获得完整的功能，当然还可以团队购买，会稍微便宜一些。

> 不过对于中国的同学来说，这么贵的软件购买还是比较不太现实。因此还好它有这样一个比较可行的免费获得软件的方式：如果你是技术/软件博客作者或者记者，那么你写一篇博客来进行推广和宣传他们的这款软件也是可以的。因此我便选择了这种方式。

> 最新消息：昨天这个软件商发给我一封邮件，说他们已经不再提供给博客作者的免费的授权了。看来这种方法是得不到了，大家还是去用免费的软件吧。。

当然它还有免费的在线版本供大家使用，或者下载试用版本！

希望各位都去试试吧！

> Mockups官方网站：http://balsamiq.com/

> Mockups下载：http://balsamiq.com/download

> 网盘下载：http://u.115.com/file/e6cw57q3（未注册版本，可试用7天，导出等功能受限）

0%