2012年12月23日星期日

解决gvim错误:Gtk-WARNING **: Invalid input string

这个错误是由语言的设置不正确引起的,解决方法很简单:

1. 打开 cd /usr/share/vim/vim72/lang这个存放语言信息的目录。

2. 建立一个链接 sudo ln -s menu_zh_cn.utf-8.vim menu_zh_cn.utf8.vim,OK,问题解决。

解决启动rails server时的错误Could not find a JavaScript runtime.

在Ubuntu下装完rails后便要开始启动它的服务器了,这个时候在终端输入
rails s
会发现报错:
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

这是因为Ubuntu下没有预设的JavaScript编译器来给Rails用的,需要安装一个套件,方法如下:

1. 打开Gemfile这个文件,加入一行gem 'therubyracer',保存。

2. 敲入命令bundle install来安装。装完之后,用命令bundle show therubyracer可以看到装好的therubyracer这个套件。

3. 重新rails s,可以看到问题解决了。

如果Rails版本比较老(3.1以下)的话,还需要在Gemfile里面加入一行gem 'execjs',同样方法安装才可以搞定。

如果通过sudo gem install therubyracer来安装的话,需要在装之前确认有没有安装libv8.如果没有,还需要sudo gem install libv8安装完之后才可以成功装上therubyracer.

另外,这个错误也可以通过安装Node.js来解决。

参考文章:http://ihower.tw/rails3/firststep.html

2012年12月4日星期二

解决安装Ubuntu Server后启动时黑屏的问题

我装的是Ubuntu 12.10, 显卡是Intel的。 这应该是电脑里显卡和系统不匹配导致的,花了点时间,终于找到一个成功的解决方案:

1.先从CD里启动,跳到安装界面的时候注意下面有提示F6: Other Options, 按F6,选择nomodeset.

2. 再从硬盘里启动,boot的时候在选中Ubuntu时(下面还有recovery mode之类的选项)手快按下e,这就是edit grub了。

3. 在grub中插入一行i915.modeset=1.

4. 按Ctrl+x重新boot.

5. 现在已经可以进入正常的界面登录和操作了,为了让这个设定一直生效呢,需要修改/etc/default/grub.

6. 敲入命令sudo vi /etc/default/grub, 用vi来修改。

7. 查看grub文件,发现有一行GRUB_CMDLINE_LINUX_DEFAULT='''', 插入一段变成GRUB_CMDLINE_LINUX_DEFAULT=''quiet splash i915.modeset=1'',保存退出。应该就可以了。

其他品牌显卡也可以参照此做法,具体可以参考文章:
http://ubuntu-tutorials.com/2010/05/06/ubuntu-10-04-lucid-blank-screen-at-startup-workaround/

2012年10月23日星期二

Android中正确使用自定义style及Theme

【零】
如果你仅仅是对默认的主题进行很少的修改,可以查看Android本身提供的一些主题模式,比如将背景变成透明,可以在AndroidManifest.xml中你想改的activity的tag中加入:
android:theme="@android:style/Theme.Translucent"
然后直接运行就可以了。可以参考官方说明

【一】
如果需要将一个Activity的主题改成自定义形式:

1.先在AndroidManifest.xml中你想改的activity的tag中加入:
android:theme="@style/MyTheme"
如果需要将该主题模式运用于所有Activity,可以在AndroidManifest.xml中写上这样一句:
<activity android:theme="@style/MyTheme">

2.然后在res/values文件夹下创建一个styles.xml的文件,在文件中写入:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="android:Theme.Light" >
          <!--需要定义的内容-->
    </style>
</resources>

3.需要定义的内容一般以item形式定义,例如:
<item name="android:textColor">#00FF00</item>
这样可以应用自定义的主题模式了。

【二】
需要注意的还有Android版本问题,如果开发的应用面向Android3.0以下的用户,那么最好采取以下步骤:

1.在res文件夹下创建values-v11(面向Android 3.0+)和values-v14(面向Android 4.0+两个文件夹。

2.在这两个文件夹中分别写入
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="android:Theme.Holo.Light" >
          <!--需要定义的内容-->
    </style>
</resources>

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="android:Theme.DeviceDefault.Light" >
          <!--需要定义的内容-->
    </style>
</resources>
以上Holo是对于Android 3.0+的,DeviceDefault是对于Android 4.0+的。

或者其他你需要引用的parent,比如
    <style name="MyTheme" parent="android:Theme.Holo.Light.NoActionBar" >
          <!--需要定义的内容-->

【三】
最后一个问题是在自定义的主题中定义不同插件的模式,这里以Tab插件为例,我们可以用这样的形式
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="android:Theme.Holo.Light.NoActionBar" >
          <item name="android:tabWidgetStyle">@style/LightTabWidget</item>
    </style>
    <style name="LightTabWidget" parent="@android:style/Widget.TabWidget">
       <!-- 需要定义的内容 -->
    </style>
</resources>
来单独定义插件的一些属性。

这里可以参考themes_device_defaults.xml的源码。

使用Android新版theme改变插件的主题

写好一个Project之后发现它的Spinner,TimePicker之类的Widgets不知何时都变成了旧版的主题。这个问题看似非常之弱却毫无解决的头绪。于是从头写过,一步一步Run,终于发现问题根源。

原因原来是在res/AndroidManifest.xml中误加入一条:
android:theme="@android:style/Theme.NoTitleBar" 

须知这是一条旧版Android的主题的命令,同一个Activity中的所有插件自然就统统变成了旧版的形式。

要用新版(API Level 13 up)的主题来起到上述命令去掉TitleBar的作用,可以使用如下语句:
android:theme="@android:style/Theme.Holo.Light.NoActionBar"
或者
android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"
官方说明见此处

以后要注意碰到类似主题形式变化的问题,检查一下AndroidManifest.xml这个文件哦。

2012年10月19日星期五

在Java中给String Array正确地赋值

在写程序的时候遇到这个问题好几次了,因为不能明确报错,程序卡住了都不知道什么原因。结果是每次都抓耳挠腮很久,解决了之后又觉得是无关紧要的问题就没有记录,下次碰到又继续循环……由此可见,再minor的细节问题都是要有良好的记录的,不然就是自讨苦吃的浪费时间。

以下举几个给String Array例子:

String[] str;
str[] = a[];   \\a为已赋值的String Array
正确

String[] str;
for(i=0; i<10; i++) {
str[i] = a[i];  \\a为已赋值的String Array
}
出错

String[] str;
str = new String[10];
for(i=0; i<10; i++) {
str[i] = a[i];   \\a为已赋值的String Array
}
正确

String[][] strs;
strs = {str, a};   \\a, str为已赋值的String Array
出错

String[][] strs;
strs = new String[][] {str, a};  \\a, str为已赋值的String Array
正确

以上的
String[]/[][] str;
str = new String[]/[][];
均可以写成String[]/[][] str = new String[]/[][];

总结:给String Array赋值时,除了直接将另一个数组直接传递给该数组以外,都需要写成string = new String[]/[][];的形式。


2012年10月18日星期四

解决错误:/gen already exists but is not a source folder. Convert to a source folder or rename it.

这个错误一般是由对函数库的改动或是路径的重置引起的,显示为
/myProject/gen already exists but is not a source folder. Convert to a source folder or rename it.

解决这个错误的方法如下:

1.右键点击Package Exploreer下的myProject,选择Properties.

2.选择Java Build Path,再选择Source.

3.点击右边的Add Folder, 选中gen文件夹,点击OK,之后Yes.

4.在Properties的主面板中点击OK确定。

5.右键点击Package Exploreer下的myProject,选择Android Tools, 点击Fix Project Properties .

这样我们就把gen文件夹转变为一个source folder了。

现在我们再Project->Clean,就发现错误已经不再出现了。

值得注意的是,如果这个错误是由路径的重置引起的,那么一定要按照上述方法再将src文件夹转变为一个真正的source folder(出现一个方块形package标志)。

2012年10月15日星期一

发布Android应用时如何给apk自行签署金钥


发布Android应用时,它会提醒你提交自行签署金钥版的apk压缩包。因为之前一直Eclipse中调试模式下用的unbug版的签署,现在要换成自己签署了。在Linux下自行签署金钥步骤如下:

1.在装Java JDK时会同时装keytool,这个东东一般装在/usr/bin下。现在我们要调用它,先打开cd /usr/bin,同时为了让我们有调用权限,之后的步骤需要在root下操作su.

2.调用keytook来建立一个私人密钥,不同参数的含义请参见说明。这里要注意的是,因为上传到android市场时它会提示你有效密钥应超过50年,所以我用了20000天,不知道用少了是否有影响。建立密钥命令如下:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 20000
这时候命令行中会出现如下问题,依次回答:
输入keystore密码:  
再次输入新密码: 
您的名字与姓氏是什么?
  [Unknown]:  XXXX
您的组织单位名称是什么?
  [Unknown]:  XX
您的组织名称是什么?
  [Unknown]:  XX
您所在的城市或区域名称是什么?
  [Unknown]:  HK
您所在的州或省份名称是什么?
  [Unknown]:  HK
该单位的两字母国家代码是什么
  [Unknown]:  HK
CN=XXXX, OU=XX, O=XX, L=HK, ST=HK, C=HK 正确吗?
  [否]:  y

正在为以下对象生成 2,048 位 RSA 密钥对和自签名证书 (SHA1withRSA)(有效期为 20,000 天):
CN=XXXX, OU=XX, O=XX, L=HK, ST=HK, C=HK
输入<alias_name>的主密码
(如果和 keystore 密码相同,按回车):  
再次输入新密码: 
[正在存储 my-release-key.keystore]
这样,就私人密钥就创建成功了。

3.在发布模式下编译应用。在Eclipse里Package Explorer下右键单击你所要加密的项目,选择Android Tool,再选择Export Unsigned Application Package,将这个apk在某一路径下保存,默认保存在Eclipse文件夹下。


4.其实放在那里没什么用,我们需要把这个apk转移到建立私人密钥的地方
mv /home/xxxx/eclipse/myActivity.apk /usr/bin
其中myActivity是你刚刚编译的应用的名字。


5.好了,现在可以用自己的私人密钥给自己开发的应用签署了,命令是
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore myActivity.apk alias_name
相关参数可以参考说明
这时候命令行中会出现如下问题,依次回答:
输入密钥库的口令短语: 
输入 alias_name 的密钥口令:
答对之后出现:
   正在添加: META-INF/MANIFEST.MF
   正在添加: META-INF/ALIAS_NA.SF
   正在添加: META-INF/ALIAS_NA.RSA
  .
  .
  .
后面还有一大长串就不详细列出了

6.最后,我们要确定加密完成。
jarsigner -verify -verbose myActivity.apk 
会显示你加密的package的具体信息,最后面是说明:
 s = 已验证签名 
  m = 在清单中列出条目
  k = 在密钥库中至少找到了一个证书
  i = 在身份作用域内至少找到了一个证书

jar 已验证。

7.现在就可以在Android市场上发布你的应用了,要注意的是:
apk 套件名稱不能以下列值為開頭:[com.android, com.google, android, com.example]

8.为了优化你将要发布的应用,可以使用zipalign工具,这个工具在android-sdks->tools文件夹下,是一个.exe文件。用它来进行优化,需要使用命令

./zipalign -v 4 myActivity.apk zimyActivity.apk
其中myActivity.apk是zipalign之前的压缩档案,zimyActivity.apk是优化之后输出的压缩档案。如果希望直接覆盖原档案,则可以用
./zipalign -f -v 4 myActivity.apk
最后出现
Verification successful
就OK了。

2012年10月14日星期日

解决error: Found text " " where item tag is expected

这是一个Android开发中.xml文件里一个奇怪的编译错误,具体报错如下:
[2012-10-15 13:38:07 - com.example.xxx.MainActivity] /home/xxx/workspace/com.example.xxx.MainActivity/res/values-zh-rTW/strings.xml:12: error: Found text "
[2012-10-15 13:38:07 - com.example.xxx.MainActivity]     " where item tag is expected

其实这是空格的格式不正确造成的。如果是原始的手工编辑文档,是不会出现这个问题的。但是如果在不同的文档格式中复制粘帖,就会导致上述错误。

所以为了解决这个问题,建议:

1.检查是否存在不必要的空格,如有即删。如果不行,那么2;

2.重新进行复制粘帖,尽量不要使用不同的文档格式。如果不行,那么3;

3.Replace所有xml文档中whitespace with你手工敲出的space. 如果不行,那么4;

4.自己手工重新编辑一遍。

这类错误可以试试用MS word or excel调用一下文档,看是否空格格式错误。

补充说明一下:类似的错误(xml文档中空格格式错误)还会gen文件夹中R.java出现
Syntax error on tokens, delete these  tokens
的报错。同样通过以上的方法可以解决这个错误。

如何制作一张不规则图片

这里以GIMP Image Editor为例,将一张图片中的不规则形状截取出来,最后创建一张不规则的图片。Photoshop也可以按照类似的方法操作。

1.打开原图片,在View里Zoom放大,使你能看清所有细节。

2.用索套工具Free Select Tool将你所要截取的部分圈起来。如果图片的颜色比较单一,可以Select by Color.

3.菜单栏里或者右键选择编辑复制,Edit->Copy.

4.File->New来建立一个新的图像,在Advanced Options 里面有个Fill With, 选择Transparency, 点击OK.

5.在新建的空白背景(即灰黑相间的格子)中菜单栏里或者右键选择Edit->Paste.

6.选择已经粘帖上的图案,在菜单栏里或者右键选择Image->Fit Canvas to Selection,然后在同样的地方选择Crop to Selection.

7.File->Save保存图片,一定要保存成png格式,因为jpg不支持透明背景。然后按照默认选项Export然后Save.

一个不规则图片就做好了,因为这是个透明背景的图片,将其放入任何其他背景中都只会显示你所截取的图案部分。

Linux下复制命令的错误:cp: omitting directory ` '

想把一个文件夹复制到另一个路径下,敲入命令:
cp /var/www/xxx /home/username
却出现如下错误提示:
cp: omitting directory `xxx' 

这其实是一个很菜鸟的错误,因为我们在这里要操作的是文件夹,其中包含多个文件,所以需要的命令应该是:
cp -r /var/www/xxx /home/username
其中-r的意思recursively copy all the files
或者用另一命令:
cp -a /var/www/xxx /home/username
-a就是all啦

需要注意的是,以上两个命令有少少的区别:
cp -r可能会改变文件夹或文件的某些属性和权限;而用cp -a复制过去,原本和复制本是一模一样的。

2012年9月15日星期六

Linux下增加虚拟内存


虚拟内存其实是将硬盘规划出一个区间,使得内存的数据可以由硬盘来读取。当物理内存不够的时候,某些在内存当中所占的程序会暂时被移动到虚拟内存里去。所以,我们可以通过增加虚拟内存来缓解压力。

增加虚拟内存有两种方法:一是增加一个硬盘的分区;二是增加一个虚拟内存的档案。下面说说第二种办法:

1.在/tmp下增加一个 64MB 的档案
dd if=/dev/zero of=/tmp/swap bs=4k count=16382
其中dd是转移并复制档案,/zero是空档案,if是input file,of是output file,bs是一个扇区的容量,count是扇区的数目。在以上命令中,共增加16382*4k=64M的档案。

2.将 /tmp/swap 这个档案格式化为 swap 的档案格式
mkswap /tmp/swap

3.在启用这个swap的档案之前,我们先看一下当前机子的内存
free
我们可以看到swap这一条里有:
Swap:       261112          0     261112

4.使用root权限su来启用刚建立的swap档案
swapon /tmp/swap
再用free命令看一下现在的内存,会发现已经增加了64M:
Swap:       326632          0     326632

5.最后不用时,可以把刚增加的虚拟内存关掉
swapoff /tmp/swap

参考文章:《鸟哥的Linux私房菜》P.287-P.289

2012年9月6日星期四

解决安装phpMyAdmin时出现的错误404 phpmyadmin not found error

装完LAMP时再装phpMyAdmin来管理这套系统,过程如下:

1. 敲入sudo apt-get install phpmyadmin,开始安装。

2.出现选择服务器,选Apache2;又出现选择Yes或No,选Yes。

3.设置root密码。

很简单就装完了。装完之后本来应该可以用了,但是在浏览器中打开
http://localhost/phpmyadmin/
的时候,却显示了如下错误
404 phpmyadmin not found error

这个错误的原因是在路径/etc/apache2/conf.d中并没有指向phpmyadmin的路径,这个时候,我们需要手动建立一个连接
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf
然后重新启动Apache
sudo /etc/init.d/apache2 restart
再重新在浏览器打开
http://localhost/phpmyadmin/
就出现了登录界面啦。


2012年9月5日星期三

在Ubuntu上安装Apache服务器加PHP和MySQL

方法一:
最最简单的办法是在终端里敲入:
sudo apt-get install lamp-server^
一步到位!

LAMP就是Linux+Apache+MySQL+PHP的缩写。换而言之,就是一个操作系统,HTTP协议的服务器,数据库软件和编程语言(早期的P指Perl呢)的集合体,它们在一起,就可以架构一个有广泛用途的服务器的架构。

另外,上述命令结尾处的^代表执行。安装这个包时,会让你设置MySQL的root密码。

装完之后,需要让三者统一运作:
sudo apt-get install libapache2-mod-auth-mysql
sudo apt-get install php5-mysql
然后重启Apache:
sudo /etc/init.d/apache2 restart
就OK了。


方法二:
虽然上述方法很简单,不过如果是新手的话,还是推荐一步一步来。这样做并不费事多少,也能对这几个东东有些许了解。分别安装的话,就有如下步骤:

1. 安装Apache2.0
sudo apt-get install apache2
装完之后在浏览器中打开
http://localhost/
或者先Ping一下得知本地的IP地址,在浏览器中打开
http://xxx.xx.xx.xxx(就是你的IP)
浏览器中会出现:It works!

2. 安装PHP
sudo apt-get install php5
然后配置好Apache和PHP
sudo apt-get install libapache2-mod-php5
再重启Apache
sudo /etc/init.d/apache2 restart
最后测试一下:
sudo gedit /var/www/testphp.php
可以在gedit(请自行置换为你常用的编辑器)里编辑
<?php
echo "Hello world!";
?>
保存。
然后在浏览器中打开
http://localhost/testphp.php
将会显示
Hello world!

3.安装MySQL
sudo apt-get install mysql-server
同样也要设置它的root密码。
装完之后,可以先小试一下,敲入命令
sudo start mysql
开启之后再进入它的monitor模式
mysql -u root -p
其中-u是user的意思,-p是password的意思,这时候就让你输入刚设置的root的密码,输完之后出现Welcome的信息,就进入了mysql>。现在我们可以试一些简单的SQL命令了,比如
show databases;
会出现现有的数据库信息,默认的有两个,information_schema和mysql。

4.最后一步跟方法一的最后一样:
sudo apt-get install libapache2-mod-auth-mysql
sudo apt-get install php5-mysql
然后重启Apache:
sudo /etc/init.d/apache2 restart
嘿嘿。

参考文章:
http://flzen.wordpress.com/2011/05/07/lamp-on-ubuntu/
http://www.linuxidc.com/linux/2010-07/27230.htm
http://myy.helia.fi/~karte/install_apache_on_ubuntu.html
http://wiki.ubuntu.org.cn/MySQL

2012年8月29日星期三

如何在Ubuntu上装Oracle Java(JRE)

之前一直用的是OpenJDK,这个在Ubuntu上用起来自然是方便得没话说。不过最近需要用到Oracle的Java,于是在它家官网下了一个Linux版的。下的是个tar包,解压后却发现已经有bin的文件夹,不用make install了,不过却装不到浏览器的Plugin上去(菜鸟汗一个。。。)官方的指南是让直接运行.bin,介个。。。

于是还得自己弄:

1.在刚才提到过的地址中下一个选择适合你的版本下一个tar包(RPM对Ubuntu不适合额),解压(tar命令)后放在你自己的文件夹下。

2.在终端中敲入sudo mkdir -p -v /opt/java/32,用来在opt中创建一个新的文件夹。

3.敲入 sudo mv -v /home/XXX/jre1.7.0_05  /opt/java/32
将你解压到自己的文件夹下的jre转移到刚创建的文件夹中。XXX就是你文件夹的路径。同时请自动转换为自己的版本号。 

4.敲入
 sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/32/jre1.7.0_05/bin/java" 1 这是告诉系统有新版本的java。

5..敲入 sudo update-alternatives --set java /opt/java/32/jre1.7.0_05/bin/java
告诉系统此版本为默认使用的。

6.好了,现在可以往浏览器中装Plugin了。以Firefox为例,只需要敲入
rm -v ~/.mozilla/plugins/libnpjp2.so
以及
ln -s /opt/java/32/jre1.7.0_05/lib/amd32/libnpjp2.so ~/.mozilla/plugins/
就可以了,第一条是移走原来的,第二条是插入新的。其实你也可以什么也不做,等到下次用到的时候会你的浏览器会自动询问你是否需要插入~

2012年7月25日星期三

LaTex中使用BibTex插入Reference

改论文时老板对文献格式大有意见,小菜鸟我只好折腾了一下,用比较正规的插入格式如下:

1.在文章末尾\end{document}之前加入以下三行:
\renewcommand\refname{Reference}
\bibliographystyle{plain}
\bibliography{Thesis}
其中第一行是参考文献的标题,标题是Reference;第二行是格式,还有其他格式见此处,这里用plain;第三行是一个bib格式文件的名字,最好和tex文件名称一致,编译起来方便一些。
(有一点小小要注意的地方:最常见的引用格式是plain,它是按作者字母排序的,如果要按引用顺序来排序,推荐用格式unsrt)

2.建立一个.bib文件,如Thesis.bib。如果只引用文章和书,可以用以下模板:
@book{Landau,
title = "Fluid Mechanics",
author = "L. D. Landau and E. M. Lifschitz",
publisher = "Pergamon Press, Oxford",
year = "1987"
}

@Article{Cattaneo,
author = {F. Cattaneo, T. Emonet, and N. Weiss},
journal = "Astrophys. J.",
year = {2003},
volume = {588},
pages = {1183},
}
还有其他各种格式模板见此处

3.在.tex文件中正文里引用某些文章或书的地方加入一句\cite{},例如上面的book已经被命名为Landau,于是在引Landau这本书时就插一句\cite{Landau}.

4.运行.tex文件,生成一个.pdf文件的同时会生成.aux文件,这个.aux文件就是引用文献的关键。运行.tex文件可以在Tex编译器中,也可以用命令行pdflatex Thesis

5.运行.bib文件,这里会用到步骤4中生成的.aux文件,所以一定要先4再5哦。运行.tex文件可以在Bib编译器中,也可以用命令行bibtex Thesis

6.再运行两遍.tex文件。运行两遍的原因是第一遍是插入,第二遍是排序。

2012年7月14日星期六

Draw 9-patch的用法——入门级教学

Draw 9-patch是一个在android开发中非常好用的图像处理工具,它的想法很简单,将一张图片用四条线分成九个格子,就可以简单地控制它的大小和覆盖内容的位置。

这里有个android官方版的教程,写得简单明了,不过有些细节不够清楚。所以这里我把我的使用方法记下来。

1.在文件夹中打开android-sdks -> tools,找到文件夹中的一个叫做draw9patch的shell脚本文件,点击运行它。

2.你会发现这个程序的界面实在太简单了,所有的菜单里面的选项只有:打开一个9patch类型的图像,保存一个9patch类型的图像,退出。那么,要创建新的图像,你只能把你待处理的图片拖曳到这个程序的窗口里去。

3.为了方便操作,把下面的三个选项里“是否显示xxx”都给勾上,调整zoom到一个合适的视角。结果如下:

4.下面开始画线。在你拖进去的图片的边缘处,你会发现一些灰白相间的小格子,这就是画线的地方,鼠标单击就可以画黑线了。注意,这时候最好放大很多倍,可以看得比较清楚,细节如下:

5.按照步骤4在四周分别画上四条黑线,这样就把图片分成九份了。就是下图这个样子:


6.点击File -> Save 9-patch,然后就可以把这个图像保存成名为aaa.9.png的格式了。

7.将这个图像放在你的App project的res -> drawable的文件夹里,注意,在xml的文件中引用这个图像时id应为drawable/aaa,而不是aaa.9,所以,drawable文件夹里也不可以同时放aaa.9.png 和 aaa.png!

8.完成上述步骤后,你就可以把这个图像设为某个模块的背景,这个模块的内容就会显示在九部份中正中的那一个部分中了(如上图灰色部分)~

有趣得很吧~

Hack test Level 4-6 傻瓜的继续

刚过了前三关,再写写接下来三关,依然是基本知识。

Level 4:
1.如果继续按之前的做法,查看源代码,会发现什么也找不到。。。
2.其实呢,直接在浏览器设置里禁掉javascript就行了,以我的chrome为例方法如下:
工具->设置->高级选项->隐私设置->内容设置->JavaScript->不允许任何网站运行JavaScript.
3.设置好了之后再点击这一关中的Click here,就到第五关了,记得到第五关之后再设置回允许javascript哦。

Level 5:
1.查看源代码,找到如下语句:

if (pass=="SAvE-as hELpS a lOt") {
window.location.href="save_as.htm";
i=4;
}else {alert("Try again");
window.location.href="abrae.htm";}
2.都过到这里了,密码是什么就不用我多说了吧。

Level 6:
1.查看源代码,会发现密码其实隐藏在另一个javascript文件里,线索在此:
<SCRIPT SRC="psswd.js" LANGUAGE="JavaScript" type="text/javascript">
2.打开这个js文件,你会发现:

<!--
var pass;
pass=prompt("Password:","");
if (pass=="streetzkornerz") {
window.location="included.htm";
}else 
alert("Try again...");
//-->

3.呵呵,这是躲猫猫呢~

Hack-test Level 1-3 傻瓜攻略

最近发现一个挺好玩的网站,是一个给黑客们挑战通关的游戏,叫做测试黑客

网站说明上写一共有二十关,是测试大家网页技术用的。由衷地再次赞叹一下Geek们的世界是多么有趣,这下有的玩的了,o(∩∩)o...哈哈~

先说一下前三关是怎么过的,可以说是too simple, sometimes naive,如下:

Level 1:
1.鼠标右键,显示网页源代码。
2.Ctrl+F找到password,可以看到这样一行代码:
</font><font size="2" face="Tahoma">Password:</font><form name="a" action="javascript:check()">
3.现在可以看到这个action指向check()这个函数。
4.再次Ctrl+F找到function check(),发现是个判断语句如下:
function check() {
if (document.a.c.value == a)   {
    document.location.href="/"+document.a.c.value+".htm";
}
else  {
   alert ("Try again");

}
5.在这个函数上面找到a的值:
var a="null"; 
6.不用我多说了,这个null就是密码了。

Level 2:
1.解开第一关之后就又立即跳入了输入密码的框框,这个时候是解不了的,随便输个,错误,跳入Level 2的页面。
2.同样在源代码中找到password,这一次是一个prompt了:
pass=prompt("Please enter password!","");
if (pass=="l3l") { window.location.href="./"+pass+".htm";
i=4; }
3.这个太明显了,密码就是l3l,重刷一次Level 2的页面输入密码就可以了。 Level 3:
1.跟前两关步骤差不多,我们可以找到这样几行代码:
function pass()
{
var pw, Eingabe;
pw=window.document.alinkColor;
Eingabe=prompt ("Please enter password");
if (Eingabe==pw)
{
window.location.href=String.fromCharCode(97,98,114,97,101)+".htm";
}
else
{
alert("Try again");
}
}
2.那么关键就是这个
window.document.alinkColor
到底是什么。
3.我们需要打开这个html源码中的
<link rel="stylesheet" title="default" href="default.css" type="text/css">
css文件。
4.点击上面一行中default.css的链接,看见css的源码,我们就找到了这个alinkColor,原来你在这里:
a:link, a:visited, a:active
{
 text-decoration: none;
 color: 000000;
 font-size: 10px;
 font-family: Verdana, Arial, Helvetica, sans-serif;
 font-weight: plain;
}
5.这样,密码就是黑色的代码#000000咯~

这样,前三关就完了。

2012年7月6日星期五

如何设置多个显示器的相对位置(适用Ubuntu)

X RandR是Ubuntu下一个非常好用的命令,用于一台主机连接的调节多个屏幕。

接好显示器后,首先在命令行里敲入:xrandr -q
就会显示出连接中的显示器,比如我的:

VGA1 connected 1600x900+1366+0 (normal left inverted right x axis y axis) 443mm x 249mm
   1600x900       60.0*+   60.0  
   1280x1024      75.0     60.0  
   1152x864       75.0  
   1024x768       75.1     60.0  
   800x600        75.0     60.3  
   640x480        75.0     60.0  
   720x400        70.1  
LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 294mm x 166mm
   1366x768       60.0*+
   1360x768       59.8  
   800x600        60.3  
   640x480        59.9  

根据以上的名称和位置模式等,就可以调整它们了。

先试试关掉其中一个:xrandr --output LVDS1 --off

再把它打开,放在另一个的左边:xrandr --output LVDS1 --auto --left-of VGA1

现在是可以在不同显示器之间自由拖曳窗口,两个显示器的位置是自动的,并不重叠。

如果要调整位置,可以根据上面显示的属性来设置,比如说:

xrandr --output LVDS1 --mode 1366x768 --pos 0x0 --output VGA1 --mode 1600x900 --pos 1200x0

因为第一个显示器的宽度是1366,第二个显示器的位置只向移了1200,现在就有重叠部分了。



2012年6月26日星期二

gnuplot的点线属性、划线、移动图例、标签属性、希腊字母等总结

常用gnuplot画图,一些小功能不用就忘了,过一阵子又翻回来找,实在麻烦,于是有了这个备忘录。

1.画图时设置点和线的属性。
画线:
plot 'xx/xx.dat' us(e) 1:2 ti(tle)"L=40 " w(ith)    l(ine)     l(ine)t(ype)    1    l(ine)c(olor)    7   l(ine)w(idth)    4
画点:
plot 'xx/xx.dat' us(e) 1:2 ti(tle)"L=40 " w(ith)   p(oint)    p(oint)t(ype)    1     p(oint)c(olor)    7    p(oint)w(idth)      4
括号内是全称,只需要敲缩写就可以了。数字代表了属性,详细请见附录中图1.
如果是画点和线,例如:
plot 'xxx/xx.dat' us 1:2 ti"L=40" w lp lt 1 pt 5 lc 7 lw 4
这里没有设置点的颜色和宽度了,默认和线一样——不然多难看。。。

2.划线,本身的划线似乎不太美观啊,可以用没有箭头的箭头——听起来好拗口。
set arrow from 0,0 to 10,0 nohead lt 2 lc 7 lw 1.2
其中0,0和10,0是坐标,nohead就是没有箭头啦,要画箭头就去掉这个,其他的参考1.

3.数据挡住了图例,怎么办?图例换个位置咯。
set key right/left bottom/top
或者设置成具体位置:
set key 10,10

4.设置标签的大小、字体和位置。
y轴的标签,设置罗马字体,大小为35:
set ylabel "y" font " Times-Roman,35"
图中插入标签,位置为2,1:
set label "a=0" at 2,1

5.希腊字母,这个不同于大多数软件使用英文注音,而是用英文单字代替。使用时需要加上{/Symbol },如下:
set ylabel "{/Symbol f}_{{/Symbol x}{/Symbol x}}"
上下标的使用方式倒是很大众。希腊字母与英文字母的转换见附录中图2.

附录:

图1(来源于http://pleione.asu.cas.cz/~nemeth/work/stuff/gnuplot/


图2 (来源于http://t16web.lanl.gov/Kawano/gnuplot/label-e.html


上图比较小,建议点击看大图!

2012年6月15日星期五

怎么知道国外主机空间是否被屏蔽及解决方案

买主机空间之前没有调查是不是被墙了,把做好的站点挂上去了才发现国内上不了,郁闷。。。

先写写经历吧。

1. 挂上网站后被人告知打不开,用国内的代理IP才发现确实被墙了……于是接下来首先确定是不是网站使用的主机的IP的原因。

2. 在System->Administration->Network Tools中选择Ping (Ubuntu下的,Windows下用cmd),Ping网站的域名,就知道IP地址了。

3. 在whois提供的信息里搜这个IP,得知这个IP上存放的为数众多的网站。(可以Ping它们确定一下。)

4. 用不同的代理去踩这些跟自己网站同IP的网站(直接用自己的Ping也可以),如果所有同IP的网站表现一致,恭喜你,这个IP因为host了某些某些人不喜欢的网站,它host的所有网站都被墙了。



然后关于解决这个问题:

1. 最好的方法当然是买独立IP,就不用担心受其他因素的牵连了。常用的买独立IP的地方有GoDaddyIxWebHosting,GoDaddy比较贵但是比较稳定,IxWebHosting很便宜不过不是很好用。

2. 不过如果没有太多预算,又不想浪费之前购买的空间呢,还可以尝试用CDN服务。这是个从你原地址中获取数据,再分配给用户的中介,由于是为了资源优化配置,所以还可以提高网页浏览速度。常用的提供CDN服务的比如CloudFlare,提供免费的服务,而且页面很简洁。再比如WebLuker,可以自己找找,多比较一下。一般提供CDN服务,只需要你注册,提供域名,它会给你分配一个Name Server (NS),你只需要在你的域名提供商的帐户上修改成它给你提供的NS就可以了。

参考文章:http://www.majijun.com/InterestingNetwork/godaddy.html
                    http://www.jsjgz.cn/article/20110222/1218.html

2012年6月10日星期日

Ubuntu下怎么知道自己电脑的硬件规格

试了几个不同的命令,感觉最好用的是:  sudo dmidecode

会分门别类地举出系统各个部分的所有信息。如果想看某一项,可以用

sudo dmidecode -t processor      (CPU核芯)
sudo dmidecode -t memory        (内存)
sudo dmidecode -t cache             (缓存)
sudo dmidecode -t system           (电脑型号、产商)
sudo dmidecode -t slot                 (插卡槽)
sudo dmidecode -t baseboard     (主板)
sudo dmidecode -t connector      (连接设备)
sudo dmidecode -t chassis           (机箱)
sudo dmidecode -t bios                 (BIOS)  

或者用数字表示,例如,查看内存的具体型号,可以用: sudo dmidecode -t 17

其他设备的编号如下:

1System
2Base Board
3Chassis
4Processor
5Memory Controller
6Memory Module
7Cache
8Port Connector
9System Slots
10On Board Devices
11OEM Strings
12System Configuration Options
13BIOS Language
14Group Associations
15System Event Log
16Physical Memory Array
17Memory Device
1832-bit Memory Error
19Memory Array Mapped Address
20Memory Device Mapped Address
21Built-in Pointing Device
22Portable Battery
23System Reset
24Hardware Security
25System Power Controls
26Voltage Probe
27Cooling Device
28Temperature Probe
29Electrical Current Probe
30Out-of-band Remote Access
31Boot Integrity Services
32System Boot
3364-bit Memory Error
34Management Device
35Management Device Component
36Management Device Threshold Data
37Memory Channel
38IPMI Device
39Power Supply
40Additional Information
41Onboard Device

最后的最后,补一个外接硬件的:lsusb

2012年5月30日星期三

Latex目录标题\section{}中如何换行

写论文时目录里面标题太长,却没有自动换行,撑破了版面窘窘窘。

\tableofcontent
\section{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}

用换行号\\是不行的,\protect\\或者\protect\linebreak或者\newline也一样没法用。

可供选择的解决办法是使用\section[xxx]{xxxxxxxxxxxxxxxxxxx}
其中中括号内是缩略标题,显示在目录;大括号内是长标题,显示在正文。

最简单的办法是检查是否用了\usepackage{hyperref}这个宏包,有用的话就用%注释掉,就OK了。

自己动手,快速创建网站

1. 注册一个域名。最普遍的是.com结尾,找个大一点的网站买一个,一般20刀以内,我用的是goDaddy.com,后来发现namecheap.com更便宜,所以还是应该先货比三家。。。需要信用卡或PayPal或支付宝。注册完了后就可以在Whois里面查到了。

2.申请网络空间,有很多免费的。我用的是awardspace.com,是注册了很多家Free Web Hosting终于找到一家看上挺简单的,免费的容量不大,先将就着用吧。

3.在你的Web Hosting的帐户中Domain Manager里面添加你已经注册的域名。

4. 在你的域名注册的帐户中Nameserver里面将nameserver改成你的Web Hosting所提供的nameserver(与3的相同位置可以查到),这样,你的域名就指向你的网络空间了。

5.在你的Web Hosting的帐户中上传你的网页。最方便的是FTP上传,下一个FTP client,比如最常用的Filezilla。利用你的Web Hosting所提供的FTP username和password,就可以很方便地连接到你的站点,然后批量上传你做好的网页了。

6.慢慢鼓捣HTML和CSS吧!

后记:之前花了一天时间才建了个小小的本地站点,今天花了仨小时就让它上线了,作为小白好得意啊。

2012年5月23日星期三

如何让你开发的Android应用在手机上运行(适用Ubuntu)

开发了一个应用后,总要想在自己的手机上跑跑的,下面就说说怎么在实机上运行开发好的应用:

1.确认你手机的Android版本不低于你开发的平台所用的Android版本。如果没达到,就升级吧,官方的没有,小心刷机啊。

2.在你的手机里选择“设置->应用程序->开发”,把开发里的两个选项“USB调试”和“允许模拟地点”打上勾勾。

3.通过USB接口将手机连在电脑上。

4.确认已经连上后,在终端里敲入如下命令:
    sudo gedit /etc/udev/rules.d/51-android.rules
来创建一个51-android.rules文件,在这里我是用gedit文档的。

5.在这个空的51-android.rules文件添加
   SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev" 
这样一句,保存。注意Vendor ID 注意对于不同品牌的手机是不一样的,见本文结尾处表。

6.在终端里敲入如下命令:
   sudo chmod a+r /etc/udev/rules.d/51-android.rules
来运行这个文件。

7.运行/android-sdks/platform-tools中的可执行文件adb,查看以确认你的设备已连接并可用。

8.在Eclipse中选择你所要运行的Package,点击运行,(如果之前已经在虚拟机上运行过,如果没有需要选择Android Application)跳出一个框框,选择Choosing a running Android device中你的手机,点击OK。完成。


CompanyUSB Vendor ID
Acer0502
ASUS0b05
Dell413c
Foxconn0489
Fujitsu04c5
Fujitsu Toshiba04c5
Garmin-Asus091e
Google18d1
Hisense109b
HTC0bb4
Huawei12d1
K-Touch24e3
KT Tech2116
Kyocera0482
Lenovo17ef
LG1004
Motorola22b8
NEC0409
Nook2080
Nvidia0955
OTGV2257
Pantech10a9
Pegatron1d4d
Philips0471
PMC-Sierra04da
Qualcomm05c6
SK Telesys1f53
Samsung04e8
Sharp04dd
Sony054c
Sony Ericsson0fce
Teleepoch2340
Toshiba0930
ZTE19d2