2014年6月24日 星期二

如何让wordpress显示规定行数的内容

(備份自wordpress)
http://zhidao.baidu.com/question/167490636.html?push=ql
你可以安装摘要插件,
也可以手动在后台HTML编辑状态下,在显示摘要内容的前面点击编辑more按钮,
加入<!--more-->代码,这样<!--more-->代码后面的内容就需要点击后才看到了。

解決連續兩個減號無法呈現的問題
< code >程式碼< /code >

/* 顯示特殊文字 */
< span >< < /span >!< code >–< /code >more< code >–< /code >>

設定wordpress的base url
https://codex.wordpress.org/Changing_The_Site_URL#Changing_the_URL_directly_in_the_database
修改 wp-config.php ,加入
define('WP_HOME','http://example.com');
define('WP_SITEURL','http://example.com');





perl 物件名稱和檔名

(備份自wordpress blog)


our @ISA = qw(Person2);    # inherits from Person 是package的名字

use Person;  //是package的檔名,在同一資料夾下。

===================================

# class Employee.pm
package Employee;
use Person;
use strict;
our @ISA = qw(Person2);    # inherits from Person

#constructor
sub new {
my ($class) = @_;

#call the constructor of the parent class, Person.
my $self = $class->SUPER::new();
$self->{_id}   = undef;
$self->{_title} = undef;
bless $self, $class;
print "Employee constructor\n";
return $self;
}

#accessor method for  id
sub id {
my ( $self, $id ) = @_;
$self->{_id} = $id if defined($id);
return ( $self->{_id} );
}

#accessor method for  title
sub title {
my ( $self, $title ) = @_;
$self->{_title} = $title if defined($title);
return ( $self->{_title} );
}

sub print {
my ($self) = @_;

# we will call the print method of the parent class
$self->SUPER::print;
$self->address->print;
}

1;
=========================================

#class Person.pm
package Person2;
use strict;
use Address;    #Person class will contain an Address

#constructor
sub new {
my ($class) = @_;
my $self = {
_firstName => undef,
_lastName  => undef,
_ssn       => undef,
_address   => undef
};
bless $self, $class;
print "Person2 constructor\n";
return $self;
}

#accessor method for Person first name
sub firstName {
my ( $self, $firstName ) = @_;
$self->{_firstName} = $firstName if defined($firstName);
return $self->{_firstName};
}

#accessor method for Person last name
sub lastName {
my ( $self, $lastName ) = @_;
$self->{_lastName} = $lastName if defined($lastName);
return $self->{_lastName};
}

#accessor method for Person address
sub address {
my ( $self, $address ) = @_;
$self->{_address} = $address if defined($address);
return $self->{_address};
}

#accessor method for Person social security number
sub ssn {
my ( $self, $ssn ) = @_;
$self->{_ssn} = $ssn if defined($ssn);
return $self->{_ssn};
}

sub print {
my ($self) = @_;

#print Person info
printf( "Name:%s %s\n\n", $self->firstName, $self->lastName );
}

1;
How do I use a Perl module from a relative location?
http://stackoverflow.com/questions/787899/how-do-i-use-a-perl-module-from-a-relative-location

use FindBin;
use lib "$FindBin::Bin/../lib"; // . /var/www/cgi-bin/project/guestbook/controller

print "\@INC is @INC\n";
// @INC is ../model /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5

2014年6月14日 星期六

使用git-svn解決無svn http server而上傳程式

欲在區網上做測試環境,但伺服器上svn db 沒有開svn server,只可以ssh,所以使用git-svn這個迂迴的方法上傳程式到伺服器上的svn db(因git可以走ssh)

外部ip:x.x.x.x
svn db和程式放在外部伺服器上(走file://)
內部ip:o.o.o.o
我能動的只有外部伺服器的家目錄,和ssh連線到外部ip

svn db: x.x.x.x/home/svn/my_project
live 程式:x.x.x.x/var/www
將svn db用git svn clone到自己家目錄:x.x.x.x/home/user/git-svn_test
$ git svn clone file:///home/svn/my_project git-svn_test
再用ssh將去連結自己家目錄下git-svn的專案,在內部伺服器上改程式後再push上去到外部伺服器的家目錄下

$ git remote add ssh://x.x.x.x:22/home/user/blog_workspace/git-svn_test

測試紀錄
mkdir svn_test git-svn_test git-ssh_test # svn_test是外部live程式,git-svn_test是外部ip家目錄程式(橋接用),git-ssh_test是內部ip的測試環境

$ svnadmin create /home/svn/my_project #產生測試專案

ps. 下面git-svn 是remote 的名字

git-svn 使用方法參考: http://blog.chhsu.org/2010/05/git-git-svn.html

※svn_test
$ svn checkout file:///home/svn/my_project svn_test
$ touch svn_test/index.html
$ cd svn_test/
$ svn add index.html
$ svn commit -m "svn hello world"

※git-svn_test( 在remotes/git-svn/master這branch工作 )
$ git svn clone file:///home/svn/my_project git-svn_test
$ git checkout remotes/git-svn/master  # 做這步才會使git-ssh_test push上來的資料更新內容,且在這個branch上git svn dcommit 到svn db 上
$ git svn dcommit  #推git-svn_test的內容到svn db上
$ git svn rebase # 更新檔案到svn db上最新的內容,類似svn update, git pull

※git-ssh_test(在 svn-ssh_branch 這branch工作)
$ git --bare init
$ git remote add git-svn ssh://x.x.x.x:/home/user/blog_workspace/git-svn_test # ssh://x.x.x.x:22:/home/user/blog_workspace/git-svn_test 也是錯的
$ git fetch git-svn
ssh: Could not resolve hostname x.x.x.x:: Name or service not known
fatal: The remote end hung up unexpectedly =>會出現這錯誤
$ git remote rm git-svn
正確作法:
$ git remote add git-svn ssh://x.x.x.x:22/home/user/blog_workspace/git-svn_test
$ git fetch git-svn
user@x.x.x.x's password:
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ssh://x.x.x.x:22/home/user/blog_workspace/git-svn_test
 * [new branch]      master     -> git-svn/master
$ git branch -a
  remotes/git-svn/master
$ git checkout -b svn-ssh_branch remotes/git-svn/master # 建立svn-ssh_branch
$ echo "test" >> index.html
$ git add .
$ git commit -m "git-ssh commit"
$ git push git-svn svn-ssh_branch:remotes/git-svn/master git push git-svn_remote svn-ssh_branch:master  #推內部ip的程式到外部家目錄下 => http://stackoverflow.com/questions/1519006/git-how-to-create-remote-branch
user@x.x.x.x's password:
Counting objects: 5, done.
Writing objects: 100% (3/3), 237 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://x.x.x.x:22/home/user/blog_workspace/git-svn_test
 * [new branch]      svn-ssh_branch -> remotes/git-svn/master
$ git pull git-svn remotes/git-svn/master:svn-ssh_branch git pull git-svn_remote master:svn-ssh_branch # 更新自git-svn上的程式
(不能pull試試把紀錄reset --hard到前面一點的紀錄,再pull)

錯誤:
...
 ! [remote rejected] svn-ssh_branch -> remotes/git-svn/master (branch is currently checked out)
...
http://stackoverflow.com/questions/2816369/git-push-error-remote-rejected-master-master-branch-is-currently-checked
解法:
在remote repository資料夾下這指令
$ git config --bool core.bare true
或是
http://www.cnblogs.com/abeen/archive/2010/06/17/1759496.html
这是由于git默认拒绝了push操作,需要进行设置,修改.git/config(倉庫git-svn_test的)添加如下代码:
    [receive]
    denyCurrentBranch = ignore
在初始化远程仓库时最好使用 git --bare init   而不要使用:git init
   (如果使用了git init初始化,则远程仓库的目录下,也包含work tree,当本地仓库向远程仓库push时,   如果远程仓库正在push的分支上(如果当时不在push的分支,就没有问题), 那么push后的结果不会反应在work tree上,  也即在远程仓库的目录下对应的文件还是之前的内容,必须得使用git reset --hard才能看到push后的内容. )

錯誤:
$ git svn dcommit
fatal: This operation must be run in a work tree
update-index --refresh: command returned error: 128
http://stackoverflow.com/questions/9262801/fatal-this-operation-must-be-run-in-a-work-tree
解法:
$ git config core.bare false
所以在git-svn推到svn db時需要再下這指令,git-ssh推到git-svn時要再度打開
還是出現這錯誤的話嘗試git reset --hard

結論:
svn db 有新紀錄要更新到git-ssh_test
git-svn_test$ git svn rebase
git-ssh_test$ git reset <較前面的commit_id> --hard
git-ssh_test$ git pull git-svn remotes/git-svn/master:svn-ssh_branch

更新程式從git-ssh_test到svn db
git-svn_test$ git config --bool core.bare true
git-ssh_test$ git push git-svn svn-ssh_branch:remotes/git-svn/master
git-svn_test$ git config core.bare false
git-svn_test$ git reset --hard
git-svn_test$ git svn dcommit
svn_test$ svn update


svn 遠端倉庫改網址
用$ svn info查URL版本庫根
$ svn relocate
未知命令: “relocate”
使用“svn help”得到用法。
原因:
svn版本太新 -version 1.8.9 (r1591380)
svn 1.8.6才有svn relocate,改用svn switch --relocate
http://stackoverflow.com/questions/617239/svn-switch-relocate-not-persisting
bear@s2:/home/www/dev/cakephp$ svn switch --relocate  http://svn.your_domain.com.cn:81/84/trunk http://svn.your_domain.com.cn/svn/84/trunk

我用的是git svn,要怎麼改呢?
http://stackoverflow.com/questions/268736/git-svn-whats-the-equivalent-to-svn-switch-relocate
https://git.wiki.kernel.org/index.php/GitSvnSwitch
1. Edit the svn-remote url URL in .git/config to point to the new domain name # url = http://svn.your_domain.com.cn/svn/84/trunk/www/as/cakephp
2. Run git svn fetch - This needs to fetch at least one new revision from svn! => 出現錯誤:
Authentication realm: <http://svn.your_domain:80> SVN Repositories
Password for 'bear': Can't locate Term/ReadKey.pm in @INC (you may need to install the Term::ReadKey module) (@INC contains: /usr/share/perl5/site_perl /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl /usr/share/perl5/core_perl .) at /usr/share/perl5/vendor_perl/Git.pm line 565.
解法:安裝perl 的Term/ReadKey
# cpan
cpan[1]> install Term::ReadKey
3. Change svn-remote url back to the original url # url = http://svn.your_domain.com.cn:81/84/trunk/www/as/cakephp
4. Run git svn rebase -l to do a local rebase (with the changes that came in with the last fetch operation)
5. Change svn-remote url back to the new url # url = http://svn.your_domain.com.cn/svn/84/trunk/www/as/cakephp
6. Run git svn rebase should now work again! =>出現錯誤: Unable to determine upstream SVN information from working tree history
( git reset --hard到之前的版本仍無效)
使用其他方法:
重新git svn clone 到新的資料夾,
然後參考 "[git] 查歷史紀錄 ( git常見問題 )" 把diff檔取出來然後apply回去
git apply出現錯誤
$ git apply ~/tmp.diff
error: cannot apply binary patch to 'app/webroot/css/images/images/album-b.jpg' without full index line
error: app/webroot/css/images/images/album-b.jpg: patch does not apply
解法:
編輯diff檔,把新增的圖檔那幾行刪掉再apply
cakephp記得再把tmp權限改成777

svn relocate出現錯誤:
The repository at 'https://new-repository/newpath/folder' has uuid 'd3b83275-bf16-aa42-9467-f8a402003233', but the WC has '30e22be1-af51-d84d-ad8f-d4e8545a4735'
http://stackoverflow.com/questions/3565284/problem-trying-to-relocate-wc-to-new-repository
原因:
relocate只能在你的svn庫移動後且svn沒有任何改變才能relocate ( You can not do relocate to a new repository, you need to delete your working copy and do a clean checkout.
Relocate can only be used if a repository has been moved unchanged to a new server or the server has got a new name. )

2014年6月9日 星期一

iso製作usb安裝

方法一
(OS: ubuntu 14.04 =>bs要用2048不能用2m,/dev/sdb1 用$df -h 看你的usb是哪個,用容量看)
$ sudo dd if=OS.iso of=/dev/sdb1 bs=2048

方法二
$ cat debian.iso > /dev/sdc; sync

方法三
http://unetbootin.sourceforge.net/
下載 unetbootin-linux-608.bin 檔後
($ sudo aptitude install p7zip-full  # 需安裝p7zip-full )
$ chmod +x ./unetbootin-linux-608.bin
$ sudo ./unetbootin-linux-608.bin
(重開機,還有錯,應該是pc問題)


重新格式化usb
https://bbs.archlinux.org/viewtopic.php?id=127583
$ sudo umount /dev/sdb
( $ apt-cache search gparted #安裝gparted )
$ sudo gparted /dev/sdb => 會打開GUI界面,usb需重新插拔


2014年6月4日 星期三

virtualbox心得

NB作業系統(Arch Linux),接無線網路
灌好virtualbox後
使用橋接模式雖然可以ssh到同網域,但是看起來頻寬不足,apt-get update時會卡住,還不確定怎麼解決。所以改用NAT模式 =>請嘗試使用有線網路,不要用無線網路。source.list修改國內網站(2014/11/26)

https://forums.virtualbox.org/viewtopic.php?f=8&t=55766

打開VM後(可以在vm開機後設定) => 裝置 => Network => 網路設定 =>連接阜轉送(按鈕) => 新增下面設定
名稱:ssh
協定:TCP
主機:127.0.0.1
主機連接阜:2222
客體IP:10.0.2.15
客體連接阜:22
然後在NB上開終端機輸入指令
$ ssh -p 2222 root@127.0.0.1
就能連結到NAT的VM上面了

理論上區網其他電腦裡面的vm也能這樣連,作者和我都沒試過
$ ssh -p 2222 root@192.168.21.121

VirtualBox 錯誤訊息 VT-x/AMD-V 硬體加速在您的系統不可用
http://notepad-of-steven.blogspot.com/2015/08/0022-virtualbox-vt-xamd-v.html
先下載檢測工具 LeoMoon CPU-V 
見查後發現是如下圖

這個結果表示您的系統支援 VT-x,但是該設定並沒有被開啟。因此,您需要到電腦的 BIOS 去確定您的電腦是否有開啟。

BIOS 設定
在 Intel 電腦的 BIOS 中,(有可能是在 Advanced,或者 CPU Configuration 裡面) 找一個名稱如 Intel Virtual TechnologyVirtualization 之類的選項,如果原設定是 Disabled,則將它改為 Enabled 之後再儲存,離開 BIOS 重開機就可以了。
在 AMD 電腦的 BIOS 中,(有可能是在 Advanced,或者 CPU/System Configuration 裡面) 找一個名稱是 SVM Mode 或 Virtualization Technology 或 Virtualization 之類的去改為 Enabled,儲存之後離開 BIOS,再重開機就可以了。
如圖


設定完BIOS後重開機再用 LeoMoon CPU-V 檢測一次結果會是






svn 常見問題

取回某版本的某支檔案
http://stackoverflow.com/questions/4218859/how-do-i-view-an-older-version-of-an-svn-file
$ svn update -r 666 file => 不能這樣寫,倒回舊的再修改後會變成要你svn update成最新的才能commit上去,變得不能revert某支檔案再修改
$ svn cat -r 666 file > file => 這樣就能revert檔案到某版本再繼續改後commit

SVN + private key 設定

SVN -> settings -> Network -> SSH client:

example:

"C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe" -i D:\xxx.ppk


使用
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Pageant
如果要連多個伺服器時,可設定多個key,才不用在svn設定裡一直換key
但有可能會跟VPN打結

查兩個revisions之間的log
$ svn log -r 20:30 #查20~30之間的log
參考資料:http://stackoverflow.com/questions/167371/how-do-i-see-what-files-were-changed-between-2-revisions

忽略資料夾和資料夾下某些檔案
$ svn revert -R . #回覆最原始版本,等同 git reset --hard,最後的點(.)很重要
$ cd app/tmp/
$ svn propset svn:ignore "*" . --recursive  # 不追蹤tmp資料夾,必須移到tmp資料夾下操作
$ cd app/Config/
$ svn propset svn:ignore "database.php
> core.php" . # 不追蹤database.php和core.php,使用雙引號和enter送成兩行,必須在該資料夾下操作
也可以到該資料夾下用下面這指令更改要ignore的檔案
$ svn propedit svn:ignore .
最後記得svn commit
$ svn pget svn:ignore -R # 看svn下有哪些檔案被ignore



設置svn預設編輯器
在 svn propedit svn:ignore .  指令中會打開編輯器,如果要更改回vim則
在~/.bashrc(或 ~/.bash_profile )加入:
export SVN_EDITOR=vim