Loading, please wait...

Sunday, March 29, 2009

谷歌音乐全面更新

Google Reader中看到52ABC发表的百度Mp3和谷歌音乐才知道谷歌音乐更新了.赶紧去看了看,变化还是蛮大的.
新的首页布局更加合理,俨然一个音乐网站了.
新的首页用标签分割成不同的板块:首页 排行榜 挑歌 歌手库 专题
其中最有特色的就是这个挑歌了,用flash实现的,非常人性话,可以非常准确的找出你喜欢的歌曲.
在右侧设置了节奏,音调,音色,年代,歌手,流派,语言这些过滤规则后,就会在左侧主体部分用不同的颜色的泡泡列出符合规则的歌曲,试了下,准确率非常高.这真是一种新的选歌模式,Google的设计师们真是天才.


当然,播放器也做出了一些调整.
新版
旧版
感觉新版的播放器越看越没有以前的舒服,非常喜欢以前那个旋钮,现在没有那个有趣的东西了.
虽然Google的主张是简洁,不过人一旦喜欢上一个美丽的东西,就无法忘怀了.
我还是无法靠向谷歌音乐,因为它还不提供与Google帐号的绑定,我的播放列表还是不能保存到网络上.所以继续亦歌,保持观望. 汗,布局怎么成这样了~~ -_-!

转载声明: 出自: Ghoul To World!作者: GreatGhoul

不使用向导向工程中添加数据库支持

译者:GreatGhoul


我读过的书中都会有这么一个章节"数据库编程",在这个短小的章节中总会有这么一个典型的例子用向导新建一个工程,选中"使用数据库"并选择数据库类型....

不过,如果项目开始一个月后我才意识到"...,我需要在工程中使用数据库"或者"我需要使用另一个Recordset",有或者"我需要添加另一个数据库",难道我要重新开始这个工程吗?答案不用,这很容易解决.


  • 创建一个没有数据库支持的新工程(如果你已经有一个这样的工程,跳过此步)
  • stdafx.h中添加头文件
    #include "afxdb.h"
  • 在要使用数据库的类(比如View)中添加成员变量:
    CDatabase m_MyDatabase;
  • 初始化类时
    译者:GreatGhoul


    我读过的书中都会有这么一个章节"数据库编程",在这个短小的章节中总会有这么一个典型的例子用向导新建一个工程,选中"使用数据库"并选择数据库类型....

    不过,如果项目开始一个月后我才意识到"...,我需要在工程中使用数据库"或者"我需要使用另一个Recordset",有或者"我需要添加另一个数据库",难道我要重新开始这个工程吗?答案不用,这很容易解决.

    • 创建一个没有数据库支持的新工程(如果你已经有一个这样的工程,跳过此步)
    • stdafx.h中添加头文件
      #include "afxdb.h"
    • 在要使用数据库的类(比如View)中添加成员变量:
      CDatabase m_MyDatabase;
    • 初始化类时
      译者:GreatGhoul


      我读过的书中都会有这么一个章节"数据库编程",在这个短小的章节中总会有这么一个典型的例子用向导新建一个工程,选中"使用数据库"并选择数据库类型....

      不过,如果项目开始一个月后我才意识到"...,我需要在工程中使用数据库"或者"我需要使用另一个Recordset",有或者"我需要添加另一个数据库",难道我要重新开始这个工程吗?答案不用,这很容易解决.

      • 创建一个没有数据库支持的新工程(如果你已经有一个这样的工程,跳过此步)
      • stdafx.h中添加头文件
        #include "afxdb.h"
      • 在要使用数据库的类(比如View)中添加成员变量:
        CDatabase m_MyDatabase;
      • 初始化类时,对数据库进行初始化
        m_MyDatabase.Open(NULL, FALSE, FALSE, os);
        在这里os只是一个指定打开数据库参数的CString,形如:
        CString os = "ODBC;DSN=MyDb;UID=MyUser;PWD=MyPassword;";
        在这个字符串中有如下参数:
        • ODBC 使用ODBC数据库
        • DSN=... 数据源名称(就是在"控制面板>管理工具>数据源"中添加的名称)
        • UID=... 连接数据库的用户名
        • PWD=... 连接数据库的密码
      • 现在我们需要一个特定的recordset从数据库中获取数据.这很简单.新建一个继承自CRecordSet的类(AppWizrd(Ctrl+W),新建类),以及要用到的字段等.(如果你要在多个不同的View中使用数据库,你可以创建多个CRecordSet的子类(比如为每一个table创建一个recordset))
      • 把定义了recordset的头文件添加到要使用数据库的文件中,并设置所需的变量.
        CMyRecordSet *MyRecordSet;
      • 然后打开recordset:
        pMyRecordSet=new CMyRecordSet(&m_MyDatabase);
        pMyRecordSet->Open(); // You can open it in many ways, see the help
        .
        .
        .
        pMyRecordSet->Close() ;
      • 关闭程序是别忘了关闭数据库连接.
        m_MyDatabase.Close();
      想要更深一步了解数据库便编程,可以查看帮助文档,本文只是一个开始.

转载声明: 出自: Ghoul To World!作者: GreatGhoul

Tuesday, March 24, 2009

Google Code终于可以添加收藏了

今天找一款软件上了Google Code,发现不知道何时起,已经可以添加收藏了,以前没有这个功能的时候,只能使用浏览器书签收藏。现在方便多了。而且感觉这个星标功能比sf的方便多了。

转载声明: 出自: Ghoul To World!作者: GreatGhoul

Monday, March 23, 2009

突然想到字符串与整数相乘的简单实现

用正则,效率还算不错。
public class StringUtility { 
   public static String buildString(String cell, int length) {
        StringBuilder ret = new StringBuilder(length);
        ret.setLength(length);
        ret.setCharAt(length - 1, ' ');
        return ret.toString().replaceAll(".", cell);
    }

    public static void main(String[] args) {
        System.out.println(StringUtility.buildString("[]", 10000));
    } 
} 

不知道还有没有更好的实现方法。

转载声明: 出自: Ghoul To World!作者: GreatGhoul

LayoutManager删除Component的的误区

最近在写ui时,一时糊涂,用LayoutManager的removeLayoutComponent方法移除组件,结果组件是移除了,但重新在容器内添加新组件内,显示的竟然还是原来的(我的布局是BorderLayout),起初还以为是界面没更新了,折腾了半天,重新查API,结果找到了原因。
BorderLayout (Java 2 Platform SE 6)

removeLayoutComponent

public void removeLayoutComponent(Component comp)
此边框布局中移除指定组件。当容器调用其 removeremoveAll 方法时,可调用此方法。大多数应用程序并不直接调用此方法。
指定者:
接口 LayoutManager 中的 removeLayoutComponent

参数:
comp - 要移除的组件。
另请参见:
Container.remove(java.awt.Component), Container.removeAll()
从布局中移除指定组件,也就是说并没有从容器中移除。所以还是建议使用容器的remove方法移除组件,以保万无一失。
偶然遇到这样的情况,和大家分享下。

转载声明: 出自: Ghoul To World!作者: GreatGhoul

Sunday, March 15, 2009

开始学习jQuery: 表格隔行换色和悬停高亮效果

正式开始学习jQuery(非常了不起的东西).
从最基础的东西开始学习.

在网页中,当遇到数据表格中,经常需要一些隔行换色和鼠标移过时行高亮的效果.
下面是一个简单实现.

<html>
<head>
<title>Demo</title>
<script type="text/JavaScript" src="jquery.js"></script>
<style type='text/css'>
tr.highlight {background-color: #EFEDDE;}
tr.odd  {background-color: #EEEEEE;}
tr.even {background-color: #DDDDDD;}
</style>
<script language='javascript' type='text/javascript'>
$("document").ready(function() {
    $("tr").each(function(i) {
        var className = ["odd", "even"][i % 2];
        $(this).addClass(className);
        $(this).hover(
            function() {
                $(this).removeClass(className);
                $(this).addClass("highlight");
            },
            function() {
                $(this).removeClass("hightlight");
                $(this).addClass(className);
            }
        )
    });
});
</script>
</head>
<body>
<table>
<tr><td>Nick Name</td><td>GreatGhoul</td></tr>
<tr><td>Phone</td><td>13028473721</td></tr>
<tr><td>Email</td><td>greatghoul@gmail.com</td></tr>
<tr><td>QQ</td><td>348189477</td></tr>
<tr><td>Blog</td><td>http://greatghoul.blogspot.com</td></tr>
</body>
</html>

如果只需要隔行换色效果,可使用以下代码.

$("tr:even").addClass("even");
$("tr:odd").addClass("odd");

已经喜欢上jQuery了.

转载声明: 出自: Ghoul To World!作者: GreatGhoul

精品壁纸分享

最近收藏的一些精品壁纸




















附带几张Ubuntu风格壁纸


转载声明: 出自: Ghoul To World!作者: GreatGhoul

Saturday, March 14, 2009

FileNameFilter接口应用: 指定多个扩展名过滤规则

java的经常会写一些FileNamesFilter以方面自已获取文件列表.
G.G我捉摩了下这个接口.也写了一个自已的应用来获取能匹配扩展名列表的文件集合.
大家pp.用匿名实现.
/**
 * Returns a list of files that the extension name matchs one of extensions.
 * 

Usage: getFilesByNameExtensions(dir, "txt", "JPEG");
 * @author GreatGhoul http://greatghoul.blogspot.com  * @param dir The directory to scan in.  * @param extensions Extensions collection.  * @return A list of matched files.  */ public static List getFilesByNameExtensions(File dir, final String... extensions) {     return Arrays.asList(dir.listFiles(new FilenameFilter()  {         @Override         public boolean accept(File dir, String name) {             File file = new File(dir, name);             boolean accept = false;             for (String extension : extensions) {                 if (file.isDirectory()) break;                 if (name.toLowerCase().endsWith("." + extension.toLowerCase())) {                     accept = true;                     break;                 }             }             return accept;         }        })); }
Enjory it.

转载声明: 出自: Ghoul To World!作者: GreatGhoul

用正则验证文件名是否合法(仅限win平台)

的Java中用到文件操作时,经常要验证文件名是否合法.
我以前都是用File类的createNewFile()方法.当然,这个方法的确很管用.但当要批量验证时,总不能一个个创建文件吧.

于是想到了正则,正则匹配的开销比创建文件小了不知道多少倍.
Google了一下Win平台的文件名规则,并实践了一下.

ps: 这学期学习马哲,老师告诉我们黑格尔说的思想的运动也算是一种实践行为是不正确的.如此说来YY也不能算是实践.真是可惜.

那么一个合法的文件(Win下)应该符合如下规则 .
  1. 文件名不能为空,空在这里有两个意思


    • 文件名(包括扩展名)长度为0或仅由空字符组成(包括\t\b等不可见的转义字符)
    • 文件名和扩展名不能同时为空.但实际上我们可以用程序创建出类似.project,..txt等形式的文件,但却创建不出类似abc.的文件
  2. 文件名中不能包含\/:*?"<>|中的任意字符
  3. 文件名(包括扩展名)的长度不得大于255个字符
事实上形如".."(不包含引号,下同)的文件也不能被创建.
不合法的文件还有类似" aa", "aa ", "aa."(会被创建为"aa",也把它算作不合法),"a\ta"(\t为制表符等不可见字符(除空格外))

于是我们得到了文件名命名规则的更详细规定:
  1. 首尾不能有空字符(空格、制表符、换页符等空白字符的其中任意一个),文件名尾不能为.号
  2. 文件名和扩展名不能同时为空
  3. 文件名中不能包含\/:*?"<>|中的任意字符
  4. 文件名(包括扩展名)的长度不得大于255个字符
  5. 在1.的条件下,文件名中不能出出现除空格符外的任意空字符.出现控制字符其实也算不合法,但因为情况太复杂,就不做判断了。
于是有如下匹配
首字符: [^\s\\/:\*\?\"<>\|]
尾字符: [^\s\\/:\*\?\"<>\|\.]
其它字符: (\x20|[^\s\\/:\*\?\"<>\|])*

\s 只能匹配下面六种字符(via: java.util.regex.Pattern):
半角空格( )
水平制表符(\t)
竖直制表符
回车(\r)
换行(\n)
换页符(\f)

用Java语言实现:
public static boolean isValidFileName(String fileName) {
    if (fileName == null || fileName.length() > 255) 
        return false;
    else
        return fileName.matches(
           "[^\\s\\\\/:\\*\\?\\\"<>\\|](\\x20|[^\\s\\\\/:\\*\\?\\\"<>\\|])*[^\\s\\\\/:\\*\\?\\\"<>\\|\\.]$");
}

用于测试:
System.out.println("null(未初始化)" + "\t" + isValidFileName(null));
System.out.println(" .xml" + "\t" + isValidFileName(" .xml"));
System.out.println(".xml " + "\t" + isValidFileName(".xml "));
System.out.println(" .xml " + "\t" + isValidFileName(" .xml "));
System.out.println(".xml." + "\t" + isValidFileName(".xml."));
System.out.println(".xml" + "\t" + isValidFileName(".xml"));
System.out.println("    .xml(制表符)" + "\t" + isValidFileName("    .xml"));
System.out.println(".." + "\t" + isValidFileName(".."));
System.out.println("fdsa    fdsa(制表符)" + "\t" + isValidFileName("fdsa    fdsa(制表符)"));
System.out.println("a.txt" + "\t" + isValidFileName("a.txt"));

转载声明: 出自: Ghoul To World!作者: GreatGhoul

Sunday, March 1, 2009

亦歌又有更新了.

很久没有关注亦歌了,今天打开,发现了几处比较不错的更新.
  • 收藏歌曲时可以指定标签,方便了管理歌曲
  • 标签和歌手列表方便用户快速查找收藏的歌曲
  • 用鼠标点击歌曲的时间条,可以调整歌曲进度.
显然这些都是很细节的更新,亦歌越来越照顾用户的使用习惯了.

现在就亦歌 http://www.1g1g.comhttp://www.1g1g.com

转载声明: 出自: Ghoul To World!作者: GreatGhoul