2012年4月26日

moodle作業圖檔顯示縮圖


有老師提到moodle很好用,但如果在改作業時能有圖檔可以用縮圖來顯示,可以減少老師多按好多滑鼠,在需要的時候再按就好了。研究了一下moodle,只完成一半。
怕忘記先記下能做的事。

程式位置:moodle 1.9版的位是在moodle目錄中的mod目錄中有一個叫assignment資料夾,這裡是放作業的程式位置,其中type/upload是進階上傳的程式而type/uploadsingle是上傳一個檔案的位置(2.x版相同)。

修改過程:
1.修改mod/assignment/type/uploadsingle/assignment.class.php
 大概在27行
$ffurl = get_file_url("$filearea/$file");
之後加入程式碼:

//modify by estea

$bfile=array_pop(explode (".", $file));
            $bfile=strtolower($bfile);
            if(strtolower($bfile=="jpg" or $bfile=="png" or $bfile=="gif" or $bfile=="svg")){
                $showimg="<img src='".$ffurl."' alt='picture' width='50'> ";
                }

把下一行
                   $output = '<img src="'.$CFG->pixpath.'/f/'.$icon.'" class="icon" alt="'.$icon.'" />'.
                            '<a href="'.$ffurl.'" >'.$file.'</a><br />';
改成
                   $output = '<img src="'.$CFG->pixpath.'/f/'.$icon.'" class="icon" alt="'.$icon.'" />'.
                            '<a href="'.$ffurl.'" >'.$showimg.$file.'</a><br />';
再後面再加上
//###modify end
這樣就上傳單檔時如果附檔名是jpg gif png svg的就會用縮圖顯示,其中svg是特別加上去的如果瀏覽器不支援html5就有可能會顯示不出來。

2. 修改mod/assignment/type/upload/assignment.class.php
 大約在310行找到
$ffurl = get_file_url("$filearea/$file");
在下面增加
            ####modify  by estea####
            $bfile=array_pop(explode (".", $file));
            $bfile=strtolower($bfile);
            if(strtolower($bfile=="jpg" or $bfile=="png" or $bfile=="gif" or $bfile=="svg")){
                $showimg="<img src='".$ffurl."' alt='picture' width='50'> ";
                }else{$showimg="";}

                   $output .= '<a href="'.$ffurl.'" ><img class="icon" src="'.$CFG->pixpath.'/f/'.$icon.'" alt="'.$icon.'" />'.$file.'</a>&nbsp;';
改成
                   $output .= '<a href="'.$ffurl.'" ><img class="icon" src="'.$CFG->pixpath.'/f/'.$icon.'" alt="'.$icon.'" />'.$showimg.$file.'</a>&nbsp;
在後面增加一行
//###modify end
這樣進階上傳就會有縮圖出現

而moodle 2.x版程式語法複雜多了,在不能力不足只找到一個可以改的地方。
修改mod/assignment/type/uploadsingle/assignment.class.php檔案
大約在45行找到
$path = file_encode_url($CFG->wwwroot.'/pluginfile.php', '/'.$this->context->id.'/mod_assignment/submission/'.$submission->id.'/'.$filename);
在下面增加
            //###modify estea 101/04/26
            $bfile=array_pop(explode (".", $filename));
            $bfile=strtolower($bfile);
            if(strtolower($bfile=="jpg" or $bfile=="png" or $bfile=="svg" or $bfile=="svg")){
                $showimg="<img src='".$path."'alt='picture' width='50'> ";
                }

                   $output .= '<a href="'.$path.'" ><img class="icon" src="'.$OUTPUT->pix_url(file_mimetype_icon($mimetype)).'" alt="'.$mimetype.'" />'.s($filename).'</a><br />';
改為
                   $output .= '<a href="'.$path.'" ><img class="icon" src="'.$OUTPUT->pix_url(file_mimetype_icon($mimetype)).'" alt="'.$mimetype.'" />'.$showimg.s($filename).'</a><br />';
 再增加一行
            //### modify end
這樣在評分上傳單一檔案時就會有縮圖。
不想改想直接用改好的,檔案放在討論區
https://groups.google.com/forum/?hl=zh-TW&fromgroups#!topic/free_tpc/0XFRCgoX8Rs

2012年4月20日

ezgo網路硬碟小程式

在ezgo下常有人無法使用網路硬碟,這幾天稍微亂想了一下,把要用文字介面的指令,做了一些調整,這樣可以避掉剛開始使用的初學者的困擾。說穿了就是一個指令而已。
 nautilus smb://IP
這個小程式幫忙做了桌面啟動圖示。
使用者要自行在smbserver.txt中輸入網路硬碟伺服器IP。
然後執行inst_samba_content.sh安裝程式。
程式下載位置:
https://groups.google.com/group/free_tpc/attach/d858daeb9fc42274/samba.zip?part=4&authuser=0

2012年4月4日

rsync備份資料

一直想做卻沒空寫記錄,今天把它做個記錄。
linux下一直有很強的備份工具rsync。在現今nas server不算是難事時,rsync可以快速的幫我們做到異地備援的方式。

在ubuntu下只要一條指令sudo apt-get install rsync就安裝好了
 到google中搜尋rsync教學,就有一堆文章。

參數說明
rsync --help
man rsync


我有一個想法是,建三個資料夾,在備份時先把第二個來rsync到第三個資料夾,再把第一個資料夾rsync到第二個,最後再把想備份的rsync到第一個資料夾,這樣就會有三個時間的備分檔。當我的備份資料夾是用nas server的nft或是iscsi掛起來,這樣就是異地備援了,加上rsync有所謂增量備援方式,可以花最少時間在做備分動作。

我寫了一個myrsync.sh內容大致如下(做好記得chmod +x變成可執行)
 #!/bin/sh
date >b.txt
/usr/bin/rsync-avzP --delete  /buckup/b02/ /buckup/b03
/usr/bin/rsync-avzP --delete  /buckup/b01/ /buckup/b02
/etc/init.d/mysql stop
 /usr/bin/rsync -avzP --delete /var/lib/mysql /buckup/b01

/usr/bin/rsync -avzP --delete /webdata/moodledata /buckup/b01
/usr/bin/rsync -avzP --delete /webdata/web /buckup/b01
/etc/init.d/mysql start

我試了一下第一次份3.3G也花不到2分鐘。--delete就是備份有異動的檔案,vP可以不用因為那是顯示過程和進度,如果是在背景做也看不到還會更快些,若是除錯則是有用的。a是檔案模式,z是壓縮資料。

接下來就是把這個sh用crontab中(每週備份一次)
vim /etc/crontab

0 1 * * 0 root /home/ezgo/myrsync.sh

這樣就會有三週的備份資料,如果想備4週就自己加吧。
最後提醒一下這是檔案的備份,別忘了還有資料庫!以mysql為例,資料夾位置是在/var/lib/mysql/,在備份前要停止mysql(/etc/init.d/mysql stop),再rsync資料夾,做完後就重啟mysql (/etc/init.d/mysql start)

2012年4月1日

dns ipv6設定備忘錄

網路上有很多文章都在寫dns的正解與反解,卻是很多人都看不懂,或者做不出來。自己也摸索很久,把一些自己認為該記的記下來和自己曾犯的錯誤,以免日後自己再次犯錯。
1.正解:從英文->數字
2.反解:從數字->英文

在linux會用到的指令
nslookup
dig
ifconfig

你要弄懂的
1.ip的意思:在ipv4時它是由4組數字組成,每個數字不會超過255,在ipv6時則變成網段+mac,每組由4個文字(可以是數字和英文),中間用:分開
2.你自己管的網段在哪裡:以目前ipv4來說大校多數是一個C網段,也就是說前3組數字是你不能動的,第4組才是你可以設定的,而ipv6時則是上面給你的網段是不能動的,後面則是接mac或是你要自己設定(現在好像是L3 switch會自動發ipv6的ip,而發的原則多數是用網段+mac)

例如:我現在這台電腦的ipv4和ipv6是什麼,可以用ifconfig來看
eth0      Link encap:Ethernet  HWaddr f2:2c:08:0a:b7:83 
          inet addr:163.20.108.6  Bcast:163.20.108.255  Mask:255.255.255.0
          inet6 addr: 2001:288:2263:5:f02c:8ff:fe0a:b783/64 Scope:Global
          inet6 addr: fe80::f02c:8ff:fe0a:b783/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:21974328 errors:0 dropped:513198 overruns:0 frame:0
          TX packets:27783475 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:10528998034 (10.5 GB)  TX bytes:39513685412 (39.5 GB)
          f2:2c:08:0a:b7:83是網卡的mac。163.20.108.6是ipv4的ip,2001:288:2263:5:f02c:8ff:fe0a:b783是ipv6,你有沒有注意到ipv6的後半段是mac。

接下來要知道要設定dns要用到哪些東西?
1.安裝套件,在ubuntu指令是
sudo apt-get update
sudo apt-get install bind9  

2.要設定哪些檔案,以ubuntu而言,在/etc下有一個資料夾bind9,這裡管理所有設定。很多文件都會叫你去設定named.conf,然而你打開文件卻只看到短短幾個字。

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
include "/etc/bind/named.conf.logging";
很多人到這裡就不知所錯了,稍微注意一下,有沒有看到include這幾個字?會寫程式的人就知道原來它去呼叫幾個檔案(/etc/bind/named.conf.options,/etc/bind/named.conf.local,/etc/bind/named.conf.default-zones,/etc/bind/named.conf.logging),再仔細看你會用到的是/etc/bind/named.conf.local這個檔案,如果你不喜歡它可以改,這也就是為什麼有人用他自己方法設定也可以,因為在這裡改了。

接下來 /etc/bind/named.conf.local這個檔案要記些什麼:
1.檔然是zone,就是你的整個dns記錄表,從最上層到自這一層
2.localhost(這個地方有時可以省略,因為系統常會自動幫你設定,因為localhost就是127.0.0.1 和::1 我看過有些系統是安裝起來時就被include進來)
3.你的正解設定和反解設定。
/etc/bind/named.conf.local裡我記下重要地方,多數設定可以抄網路文章

//163.20.108網段的反解設定
zone "108.20.163.in-addr.arpa" {
     type master;
     file "/etc/bind/zones/rev.108.20.163.in-addr.arpa";
};

//wdps.ntpc.edu.tw網段正解設定
zone "wdps.ntpc.edu.tw" {
        type master;
        file "/etc/bind/zones/wdps.ntpc.edu.tw.db";
        };

//公文管理轉址新北市公文管理設定
zone "doc-manage.tpc.gov.tw" {
    type forward;
    forwarders { 203.72.153.5; 172.18.1.1; };
};

// ::1 的反解檔
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa."{
     type master;
     file "/etc/bind/zones/localhost.rev";
};


//2001:288:2263/48
//  ipv6的反解檔
zone "3.6.2.2.8.8.2.0.1.0.0.2.ip6.arpa" {
     type master;
     file "/etc/bind/zones/200102882263.rev";
};
比較討厭的是反解,它不是直接用數字而是要把數字相反過來,例如163.20.108的反解要寫成108.20.163.in-addr.arpa,而ipv6就更難懂了,但做法一樣把網段反過來,2001:288:2263就變成了3.6.2.2.8.8.2.0.1.0.0.2.ip6.arpa
再來有沒有看到每一段都有一個file ".......";這就是告訴電腦某一個網段設定你去找file "..."中的檔案。
所以你把/etc/bind/named.conf.local設定好了後還要去建構裡面的每個file ""中的檔案。

以正解為例,我的是/etc/bind/zones/wdps.ntpc.edu.tw.db,裡面內容大致是
@      IN      SOA     ntpdc.wdps.ntpc.edu.tw. u10.wdps.ntpc.edu.tw. (
;// Do not modify the following lines!
                                                        2006081401
                                                        28800
                                                        3600
                                                        604800
                                                        38400
 )

@      IN      NS              ntpdc.wdps.ntpc.edu.tw.
mail.wdps.ntpc.edu.tw.      IN      MX     40       mail.wdps.ntpc.edu.tw.
wdps.ntpc.edu.tw.    IN    MX    50    mail.wdps.ntpc.edu.tw.
ntpdc              IN      A       163.20.108.1
media        IN    A    163.20.108.6
...
紅色字的地方要注意,這是你向上層註冊時用的主機名稱,很多單位在經歷多年多任資訊組,這個名稱都不見了,文件也未留下,個人遇過,都設定沒問題,但解析起來就是怪怪的,因為當上層要問你這層時會用它的設定,也就是紅色字那台,而你又沒設定這一台,解析起來就怪怪的。
A是ipv4主機
AAAA是ipv6主機
mx是郵件
CNAME是別名


反解設定
@ IN SOA ntpdc.wdps.ntpc.edu.tw. sysadm.dns.wdps.ntpc.edu.tw. (
                        2011040701;
                        28800;
                        604800;
                        604800;
                        86400
)
@                    IN    NS     ntpdc.wdps.ntpc.edu.tw.
1        IN      PTR      ntpdc.wdps.ntpc.edu.tw.
......
反解就是把ip對應英文注意後面最好有.結束。

ipv6反解
$ORIGIN 3.6.2.2.8.8.2.0.1.0.0.2.ip6.arpa.
@ IN SOA dns.wdps.ntpc.edu.tw. root.dns.wdps.ntpc.edu.tw. (
                        2006081401;
                        28800;
                        604800;
                        604800;
                        86400;
)

@                    IN    NS     ntpdc.wdps.ntpc.edu.tw.
6.d.7.5.a.2.e.f.f.f.9.2.c.0.2.0.5.0.0.0.3.6.2.2.8.8.2.0.1.0.0.2.ip6.arpa.    IN    PTR    www.wdps.ntpc.edu.tw.
......

$ORIGIN 3.6.2.2.8.8.2.0.1.0.0.2.ip6.arpa.這一段是什麼,紅色就是你的網段反過來寫的。
我怎麼知道是"6.d.7.5.a.2.e.f.f.f.9.2.c.0.2.0.5.0.0.0.3.6.2.2.8.8.2.0.1.0.0.2.ip6.arpa."這一段呢?要慢慢反寫也可以,我發現一個方法可以快速知道,就是先把正解寫好,用nslookup指令查詢
nslookup
>set type=aaaa
>www.wdps.ntpc.edu.tw
 這個時候電腦會告訴你www.wdps.ntpc.edu.tw的ipv6位址是2001:288:2263:5:20c:29ff:fe2a:57d6,你再問電腦2001:288:2263:5:20c:29ff:fe2a:57d6是誰
>2001:288:2263:5:20c:29ff:fe2a:57d6
電腦會回答你"6.d.7.5.a.2.e.f.f.f.9.2.c.0.2.0.5.0.0.0.3.6.2.2.8.8.2.0.1.0.0.2.ip6.arpa"查不到,而這一段就是你要留下來的。