我和Google Play Music的悲惨故事1

去年入手了一款小米2S,回来第一时间刷成了原生Android4.1.1,取得Root权限。

后来慢慢发现Google Play Music这款工具不错,操作简便,还能同步Google音乐,于是就开始Happy的使用了。

出于尊重正版的单纯想法,买了200多首歌曲,除了没有歌词,感觉还不错。

但有个问题,Google Play Music没有IOS版本啊,这个坑爹啊。

我把音乐从手机拷贝出来,发现MP3的Tag一个都没有,这不是坑爹吗。

于是开始分析Google Play Music的存储方式:
1、mp3音频文件存在/data/data/com.google.android.music/files/music下面
2、mp3的封面文件存在/data/data/com.google.android.music/files/artwork下面
3、mp3的Tag信息,及存储路径存在/data/data/com.google.android.music/databases/music.db下面

好吧那就分析下music.db文件吧:
只有一张表是我关心的,就是MUSIC表

然后,当然是写程序搞定啊,用Java ID3 Tag Library 0.5.4(org.farng.mp3) + sqlite-jdbc-3.7.2两个包,
从MUSIC表读出Tag,然后将Tag和封面图片写入到新的.mp3文件中。

经过2小时奋战,处理了JDBC无法连接和TAG乱码两个问题,搞定。

然后放到iTunes中,同步。

然后带封面的mp3就可以用了。

哈哈哈哈哈,开心了好几天。

后来发现,Google可以在线下载,但只能下两次。

再后来发现,Google出了Music Manager,虽然上传下载的都会经常中断,但有一个好处,
那就是我自己捣腾的mp3,用第三方软件无法找到歌词,但用Music Manager导出的软件,用第三方软件可以找到歌词。

悲剧啊,浪费了好几个小时~~

JS编辑器研究

最近项目需要用到JS编辑器,找了一些开源项目看了下(由于客户浏览器版本不高,HTML5版本几乎无法使用),
就找到了下面三个比较靠谱一点的编辑器:

nicEdit 无jQuery 小巧,易于集成,功能有限
elrte 有jQuery 功能强大,易于集成,但很久没更新了
ckeditor 有jQuery 功能强大,更新给力,易集成性貌似差一些

回头找找看,还有没有其他靠谱的工具。

开源IM软件

近期研究了下开源的IM软件:

软件名 源码语言 开源协议 网站地址
PIDGIN c,gcc/MinGW,gtk+ GPL v2 http://www.pidgin.im/
Instantbird c+MozillaBuild MPL1.1 https://wiki.instantbird.org/Main_Page
RetroShare c,cpp,QT MPL1.1 http://retroshare.sourceforge.net/downloads.html
OneTeam JS, C++ XPCOM, Mozilla/XUL MPL1.1 https://github.com/processone/oneteam
Coccinella TCL GPLv3 http://coccinella.im/
OpenFire+Spark java GPLv2 http://www.igniterealtime.org/downloads/index.jsp
iQQ java LGPL https://github.com/im-qq
ipmsg(飞鸽传书) vc no control http://ipmsg.org/
ipmsg .Net C# GPLv3 http://code.google.com/p/ipmessagernet/
freeeim(飞秋) vc no control http://freeeim.com/

Eclipse开发插件

ADT:
https://dl-ssl.google.com/android/eclipse/

DLTK:
http://download.eclipse.org/technology/dltk/updates/

PyDev:
http://pydev.org/updates

EPIC:
http://e-p-i-c.sf.net/updates

PDT:
http://download.eclipse.org/tools/pdt/updates/2.0
http://download.eclipse.org/tools/pdt/updates/3.0/milestones/

指定JDK

eclipse.exe -vm D:\JavaJDK\jdk1.7.0_06\bin\javaw.exe

Excel2010打开多个文件只显示一个窗口

用Excel 2010打开两个以上文件时,总只显示一个窗口,用着是否别扭。

解决方法,打开注册表编辑器,定位到

#.xlsx
HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open

1、展开Open,将ddeexec删除
2、选中command,双击右侧窗格的默认,将末尾的/dde改成”%1″,
3、再双击command,也是将末尾的/dde改成”%1″。
备注:%1的双引号不能少,否则,打开文件名含空格的excel时报错找不到路径

再定位到

#.xls
HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open

1、展开Open,将ddeexec删除
2、选中command,双击右侧窗格的默认,将末尾的/dde改成”%1″
3、再双击command,也是将末尾的/dde改成”%1″。
备注:%1的双引号不能少,否则,打开文件名含空格的excel时报错找不到路径

语法插件WP-Syntax

WP-SYNTAX插件很不错,但经常找语言代码就不好了,
下面是它的语言表,希望对大家有用:)

$lookup = array(
    '6502acme' => array( 'a', 's', 'asm', 'inc' ),
    '6502tasm' => array( 'a', 's', 'asm', 'inc' ),
    '6502kickass' => array( 'a', 's', 'asm', 'inc' ),
    '68000devpac' => array( 'a', 's', 'asm', 'inc' ),
    'abap' => array('abap'),
    'actionscript' => array('as'),
    'ada' => array('a', 'ada', 'adb', 'ads'),
    'apache' => array('conf'),
    'asm' => array('ash', 'asm', 'inc'),
    'asp' => array('asp'),
    'bash' => array('sh'),
    'bf' => array('bf'),
    'c' => array('c', 'h'),
    'c_mac' => array('c', 'h'),
    'caddcl' => array(),
    'cadlisp' => array(),
    'cdfg' => array('cdfg'),
    'cobol' => array('cbl'),
    'cpp' => array('cpp', 'hpp', 'C', 'H', 'CPP', 'HPP'),
    'csharp' => array('cs'),
    'css' => array('css'),
    'd' => array('d'),
    'delphi' => array('dpk', 'dpr', 'pp', 'pas'),
    'diff' => array('diff', 'patch'),
    'dos' => array('bat', 'cmd'),
    'gdb' => array('kcrash', 'crash', 'bt'),
    'gettext' => array('po', 'pot'),
    'gml' => array('gml'),
    'gnuplot' => array('plt'),
    'groovy' => array('groovy'),
    'haskell' => array('hs'),
    'html4strict' => array('html', 'htm'),
    'ini' => array('ini', 'desktop'),
    'java' => array('java'),
    'javascript' => array('js'),
    'klonec' => array('kl1'),
    'klonecpp' => array('klx'),
    'latex' => array('tex'),
    'lisp' => array('lisp'),
    'lua' => array('lua'),
    'matlab' => array('m'),
    'mpasm' => array(),
    'mysql' => array('sql'),
    'nsis' => array(),
    'objc' => array(),
    'oobas' => array(),
    'oracle8' => array(),
    'oracle10' => array(),
    'pascal' => array('pas'),
    'perl' => array('pl', 'pm'),
    'php' => array('php', 'php5', 'phtml', 'phps'),
    'povray' => array('pov'),
    'providex' => array('pvc', 'pvx'),
    'prolog' => array('pl'),
    'python' => array('py'),
    'qbasic' => array('bi'),
    'reg' => array('reg'),
    'ruby' => array('rb'),
    'sas' => array('sas'),
    'scala' => array('scala'),
    'scheme' => array('scm'),
    'scilab' => array('sci'),
    'smalltalk' => array('st'),
    'smarty' => array(),
    'tcl' => array('tcl'),
    'vb' => array('bas'),
    'vbnet' => array(),
    'visualfoxpro' => array(),
    'whitespace' => array('ws'),
    'xml' => array('xml', 'svg', 'xrc'),
    'z80' => array('z80', 'asm', 'inc')
);

c语言测试

//lang="c"
int main(int argc,char** argv)
{
    printf("Hello World\n");
    return 0;
}

c++语言测试

//lang="cpp"
using namespace std;
int main(int argc,char** argv)
{
    cout<<"Hello World"<<endl;
    return 0;
}
&#91;/code&#93;

Objective-C语言测试
&#91;code lang="objc"&#93;
#import <Foundation/Foundation.h>

int main(int argc, char**argv)
{
	NSString *hello = @"Hello World\n";
	NSLog(hello);
	[hello release];
	return 0;
}

java语言测试

//lang="java"
public static void main(String[] args)
{
    System.out.println("Hello World!");
}

bash脚本测试

#!/bin/bash
#lang="bash"
HI="Hello World!"
echo $HI

bat脚本测试

REM lang="bash"
echo "Hello World!"