九月 2024
 1
2345678
9101112131415
16171819202122
23242526272829
30  

彙整

Synology NAS 網站維運(1060819)

Synology NAS Server 系統更新:

版本: 6.1.3-15152-3


(2017-08-15)

問題修正

  1. 修正於 Virtual Machine Manager 中使用 USB Passthrough 的相容性問題。
  2. 修正與 Linux Kernel 相關的安全性弱點 (CVE-2017-7533、CVE-2017-8890、CVE-2017-1000364、CVE-2017-1000365、CVE-2017-1000370、CVE-2017-1000371)。
  3. 提升 iSCSI Block-Level LUN (區塊層級) 的穩定性。

新北市資訊教育成果發表會第1次籌備會議(1060816)

開會時間:106年8月16日(星期三)下午2時整

開會地點:新北市立中山國中第三會議室(新北市板橋區文化路一段188巷56號)

主持人:吳佳珊科長

聯絡人及電話:許瓊文 (科員);聯絡電話:(02)29603456分機8426

會議資料:新北市106年度資訊教育成果發表會第1次籌備會議議程

業務報告:

  • 新北市資訊教育週:106年10月15日至10月22日
    • 2017兩岸城市教育論壇:10月15日至10月17日
    • 新北市106年資 訊教育成果發表會:10月20日至10月21日
    • 學科電競大賽:10 月22日
  • 本市106年度資訊教育成果發表會訂於106年10月20日(星期五)及 10月21日(星期六)假本市中山國中辦理,目前規劃以「攤位闖關」、 「領域教學演示」、「大會論壇」及「行動學習成果分享」等4大區塊 為活動主軸,以動態及靜態成果展現方式,呈現本市資訊教育推動成 果。
  • 「資訊教育成果發表會」106年創新突破點
    1. 擴增實境及虛擬實境。
    2. 增設本市合作之線上學習平臺教學展示。
    3. 擴大活動效益,由1日增加為2日,提高民眾參與度。
    4. 闖關方式結合團隊尋寶 apps 及學校環景。
  • 配合資訊週活動,各行動學習學校成果看板將提前置於「2017兩岸城市教育論壇」現場,展示本市行動學習成果。

提案討論:

提案一:有關「新北市106年度資訊教育成果發表會」活動主題、內容及場地配置一案,提請討論。

說明:請參閱附件規劃圖並針對4大活動主題區、內容及辦理方式惠予意見。

決議:

  • 本次參展由於加入高中職組,總參展學校高達 51所,會場已無空間規劃教學演示空間,且由於同一個會場同時擺設動、靜態展區,會場較吵雜,參訪者容易受周遭參展學校的攤位所吸引,故行動教室區將另規劃地點,提供較安靜且網路環境較穩定的未來教室。
  • 維持會場的網路品質,確保穩定的網路環境,會請教網中心多關注。
  • 請各組中心學校將訊息帶回轉達,各校有任何意見可隨時提出。

提案二:有關「新北市106年度資訊教育成果發表會」分工一案,提請討論。

說明:

一、本案活動預定分工說明如下:

(一) 舞臺區暨大會論壇區:由承辦學校規劃啟動儀式、創新應用團 隊授獎、大會論壇等。

(二) 行動教室區:請各組中心學校以行動學習教學領域為主題,設計教學演示活動,每場次30至40分鐘,可參加人數為10至15 人。

(三) 教師論壇區:請各組中心學校就各分區提供1場教師論壇(請協調各區表現優良之教學團隊),論壇議題以行動學習範疇為主, 時間為30至40分鐘。

(四) 攤位闖關區:

  1. 請各校繳交資訊看板與 DM 資料、成果手冊資料、闖關資料表、 成果影片(2~3分鐘)等。
  2. 請各組中心學校彙整後送本案承辦學校辦理。
二、有關本案場地規劃與配置、活動文宣(邀請卡、海報、關東旗等)及闖關 APP 請承辦學校統一規劃。

決議:

  • 所有行動學習學校校長與去年一樣,將規劃上台接受頒獎。
  • 4組學校,各組選出 2 所學校負責行動教室區的教學演示活動。請各組中心學校於各組學校中選出 2 所學校負責行動教室區的教學演示活動、選出 1 名教師於教師論壇中發表。
  • 由於今年成果發表會比去年早了快一個月,各校須繳交的資料、影片須提早,以利廠商製作看板與成果手冊。
  • 各校 360度環景照片,張原禎老師承諾會利用每週借調教育局2天的時間至各校拍攝。

會後:

  • 各組中心學校另組成 Line 群組,方便意見交流。
  • 承辦學校中山國中與教育局相關承辦人研討舞臺區暨大會論壇區議題及其他重要事項。

參考資料:

資安事件:1060815全臺大停電

事件主因:815全臺大停電- 维基百科,自由的百科全书

本校處理情形:

0816 早上 8:00:

  • 將已關機的伺服器全數開機。
    • CDTower 伺服器掛點,無法開機。
  • 一一檢視每一台開好機的伺服器。
    • Web2 伺服器掛點,重新啟動,恢復正常,但其上的網站:kiddy.bhes.ntpc.edu.tw 無法正常啟用。
  • 維修 CDTower 伺服器:
    • 從機房機櫃移出至電腦維修室
    • 使用空壓機清潔機器內部。
    • 記憶體全數重新擦拭清潔(其中有一條記憶體金手指上有比較嚴重的銅鏽)
    • Reset 鍵卡住 → 故障排除
    • 主機板上有一顆電容爆漿,不是很嚴重,將其表面擦拭乾淨。
    • 重新啟動電腦 → 正常。
    • 將機殼裝好,重新啟動電腦 → 正常。
    • 關機 → 放回機房機櫃。
    • 重新啟動電腦,設定 CMOS。
    • 檢視電腦運作是否正常,網站是否正常運作 → 正常。
  • 檢視全校網路是否正常。

0815 晚上 9:30,為避免再度停電造成機房伺服器故障,緊急至校處理:

  • 打開機房冷氣機、電風扇。
  • 機櫃門全數打開,通風
  • 將非主要的伺服器全數關機。
  • 於碧華行政群組發佈相關訊息。

來自新北市教網:[緊急通知] 08/15 05:50 臺北主節點因機房電力中斷,晚間21:45分恢復正常。

因08/15 17:50 臺北主節點因機房電力中斷,冷氣無法運轉,溫度升高下,進行緊急停機處置,TANet 服務中斷。

造成新北市教育網路對外網路中斷。

對外網路中斷期間,新北市教育網路內部網路服務仍可正常使用。

TANET於晚間21:45分恢復正常。新北市教育網路對外網路恢復。

請組長針對校園網路設備進行檢測,

若有問題請電80723456-531 or 532

工程師將協助您處理問題。

檢討:

  • 機房冷氣機、電風扇,皆應採用支援自動復歸功能的機種,也就是說,斷電後來電,系統會自動啟動至機器內部設定的運轉設定。否則若機房一停電,當來電時,所有伺服器自動啟動,但冷氣機卻沒啟動,一陣子後,機房溫度將會過高,伺服器可以會因此故障。

 

Django 課程研究

高慧君老師 Django 課程講義

課程內容:

學習資源:

教研中心研習:PHP 網頁程式設計(1060807-0808)

時間:106年8月7日-8月8日

主題:PHP 網頁程式設計

講師:莊政儀

教學網站:PHP基礎課程

課程講義:1060807_PHP基礎課程教學範例

開發環境與工具:

範例檔:

九九乘法表:

<table border="1">
<?php
for ($i=1; $i<=9; $i++) {
    echo "<tr>";
    for ($j=1; $j<=9; $j++) {
        echo "<td>$i * $j = " . ($i*$j) . "</td>";
    }
    echo "</tr>";
}
?>
</table>

計數器:

<?php
// opens countlog.txt to read the number of hits
$datei = fopen("countlog.txt","r");
$count = fgets($datei,1000);
fclose($datei);
$count=$count + 1;
echo "$count";
echo " hits";
echo "\n";
// opens countlog.txt to change new hit number
$datei = fopen("countlog.txt","w");
fwrite($datei, $count);
fclose($datei);
?>

終極密碼:

form.php (練習用)

<form action="" method="post">
    <input type="text" name="num1" value="111">
    <input type="text" name="num2" value="222">
    <input type="submit" name="ok" value="送出">
</form>
<?php
// !empty()
if (isset($_POST["num1"])) {
    echo $_POST["num1"];
}
if (isset($_POST["num2"])) {
    echo $_POST["num2"];
}
if (isset($_POST["ok"])) {
    echo $_POST["ok"];
}
?>

magic1.php

<?php
$answer=rand(2,98);
$min=1;
$max=99;
?>
<form action="magic2.php" method="post">
    請在 <?=$min?> 和 <?=$max?> 之間一數字
    <input type="text" name="num">
    <input type="hidden" name="min" value="<?=$min?>">
    <input type="hidden" name="max" value="<?=$max?>">
    <input type="hidden" name="answer" value="<?=$answer?>">
    <input type="submit" name="ok" value="送出">
</form>

magic2.php

<?php
$num = !empty($_POST["num"]) ? $_POST["num"] : 0;
$answer = $_POST["answer"];
$min = $_POST["min"];
$max = $_POST["max"];
$ok = false;

if ($num === $answer) {
    $ok = true;
}
elseif ($num > $answer)
    $max = $num;
else
    $min = $num;

if ($ok) {
    echo "猜中了!<br/>";
    echo "<a href='magic1.php'>再玩一次</a>";
}
else {
?>
<form action="magic2.php" method="post">
    請在 <?=$min?> 和 <?=$max?> 之間一數字
    <input type="text" name="num">
    <input type="hidden" name="min" value="<?=$min?>">
    <input type="hidden" name="max" value="<?=$max?>">
    <input type="hidden" name="answer" value="<?=$answer?>">
    <input type="submit" name="ok" value="送出">
</form>
<?php
}
?>

files.php : 更改 images 資料夾下的所有檔案的檔名

<?php
if ($handle = opendir('images')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            $newfile = "abc0".substr($file,1);
            if (rename("images/".$file, "images/".$newfile))
                echo "$file → $newfile<br>";
        }
    }
    closedir($handle);
}
?>

Oracle VM VirtualBox 安裝:

目標:以virtualbox 安裝 ubuntu 17.04 系統,並且在ubuntu 下安裝 amp(lamp)

  • step1:下載已經作好系統的 ubuntu1704.ova
  • step2:安裝virtualbox
  • step3:安裝virtualbox ext-pack
  • step4:開啟virtualbox,在檔案/匯入應用裝置
  • step5:啟動ubuntu1704虛擬機
  • step6:登入系統,帳號密碼為teacher,ntpc

註:如果滑鼠鍵盤被困在虛擬機內,可按 host key離開,內鍵的host key 為右ctrl

目標:建立2個網卡,NAT 負責外部網路(可上網安裝軟體);僅限主機介面卡–和本地機的連線

  • step1:因要安裝虛擬機的網卡,請先將虛擬機關機
  • step2:<設定值/網路>,<介面卡1->NAT>,<介面卡2->僅限主機>
  • step3:虛擬機開機,並登入系統
  • step4:查虛擬機的 ip , 指令 ip addr
  • step5: 指令 sudo nano /etc/network/interfaces
    在下方輸入
    auto enp0s8
    iface enp0s8 inet dhcp
  • step6:指令 sudo service networking restart:重啟網路
  • step7:再查虛擬機的 ip , 指令 ip addr
  • step8:指令 ping 8.8.8.8:測試能否連線外網
  • step9:在本機操作,開啟cmder,
    指令 ping 虛擬機IP:測試能否連線虛擬機

註:如果<介面卡>請選[橋接介面卡],可以取得ip,用[橋接介面卡]會比上面 [NAT] + [僅限主機]的方式更方便,因為虛擬機和主機的ip 同網段,虛擬機的網路行為如真實機器一般

目標:安裝 amp(apache2,php7,mysql)

以下都在cmder 底下操作

  • step1:從本機以 ssh 登入虛擬機
    ssh teacher@虛擬機IP
  • step2 安裝 apache2
    sudo apt install apache2
  • step3 安裝 php7
    sudo apt install php php-cli
  • step4 安裝 mysql
    sudo apt install mysql-server mysql-client
  • step5 安裝 mysql 的管理程式 phpmyadmin
    sudo apt install phpmyadmin

目標:為方便上傳製作網頁,設定apache DocumentRoot 的位置到 /home/teacher 底下

  • mkdir wwwroot
  • sudo nano /etc/apache2/sites-available/000-default.conf
#DocumentRoot /var/www/html 本行前面加#
DocumentRoot /home/teacher/wwwroot
<Directory /home/teacher/wwwroot>
options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
</Directory>
  • sudo service apache2 restart

目標:安裝 moodle

  1. moodle 檔案全複製至/home/teacher/wwwroot 下
  2. 刪除 moodle 根目錄下的 config.php
  3. 使用 phpMyAdmin 建立 moodle3 資料庫,編碼 utf8mb4_unicode_ci
  4. mkdir /home/teacher/moodledata
    cdmod 777 /home/teacher/moodledata
  5. sudo apt install php-xmlrpc
    sudo apt install php-soap
    sudo apt install php-intl

目標:題庫匯入格式外掛程式

phpMyAdmin 安裝

moodle 安裝

moodle安裝教學影片

作業練習:

http://webnas.bhes.ntpc.edu.tw/chiubor/1060807_php/homework/

練習一:利用迴圈,將10張圖片顯示出來

<?php
if ($handle = opendir('images')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            echo "<img src='images/$file'><br>";
        }
    }
    closedir($handle);
}
?>

利用練習一的檔案,只想顯示號碼是奇數(或偶數)的圖片

<?php
if ($handle = opendir('images')) {
    $i = 0;
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            if ($i % 2 === 0)
                echo "<img src='images/$file'><br>";
        }
        $i++;
    }
    closedir($handle);
}
?>

練習二:假設在 images 底下的圖片張數不清楚有幾張,請利用讀取檔案的方式,顯示全部的圖片

<?php
if ($handle = opendir('images')) {
    $fileArray = [];
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            array_push($fileArray, $file);
        }
    }
    closedir($handle);
    foreach ($fileArray as $file) {
        echo "<img src='images/$file' width=400><br>";
        echo "$file<br>";
    }
}
?>
  • 利用練習二的檔案,將圖片寛度設為200px,再將圖片排列,一排有三張,將全部的圖片顯示,並在圖片下顯示圖片名稱
<?php
if ($handle = opendir('images')) {
    $fileArray = [];
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            array_push($fileArray, $file);
        }
    }
    closedir($handle);

    echo "<table>";
    for ($i=0; $i<count($fileArray); $i++) {
        if ($i % 3 === 0) {
            if ($i > 0) echo "</tr>";
            echo "<tr>";
        }
        echo "<td><img src='images/$fileArray[$i]' width=200><br>";
        echo "$fileArray[$i]</td>";
    }
    echo "</table>";
}
?>
  • 進階練習:利用練習二的檔案,將圖片名稱由小到大(或由大到小),排列顯示
<?php
if ($handle = opendir('images')) {
    $fileArray = [];
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            array_push($fileArray, $file);
        }
    }
    closedir($handle);

    //升冪
    sort($fileArray);
    echo "<h2>由小排到大(升冪)</h2>";
    echo "<table>";
    for ($i=0; $i<count($fileArray); $i++) {
        if ($i % 3 === 0) {
            if ($i > 0) echo "</tr>";
            echo "<tr>";
        }
        echo "<td><img src='images/$fileArray[$i]' width=200><br>";
        echo "$fileArray[$i]</td>";
    }
    echo "</table>";

    //降冪
    rsort($fileArray);
    echo "<h2>由大排到小(降冪)</h2>";
    echo "<table>";
    for ($i=0; $i<count($fileArray); $i++) {
        if ($i % 3 === 0) {
            if ($i > 0) echo "</tr>";
            echo "<tr>";
        }
        echo "<td><img src='images/$fileArray[$i]' width=200><br>";
        echo "$fileArray[$i]</td>";
    }
    echo "</table>";
}
?>

練習三:分別將 images 底下的10張圖片取其中2張,存成 base64的格式到陣列中,另外產生名稱為 1 和2 的連結,點1會將陣列0的圖片顯示,點2會將陣列1的圖片顯示(註:陣列由0開始),請勿連結到 imges 底下的圖片

      這是圖片1的連結<a href='?img=1'>1</a>
      提示:在網址列  XXXXXX.php?img=1 ,在 php 內部 用$_GET['img'] 來取得變數的值
<?php
session_start();
if (!isset($_SESSION['images'])) {
    if ($handle = opendir('images')) {
        $fileArray = [];
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                array_push($fileArray, $file);
            }
        }
        closedir($handle);

        $count = count($fileArray);
        $images = [];
        $img_no = 2; //隨機選幾張圖
        for ($i=0; $i<$img_no; $i++) {
            while (in_array($file = $fileArray[rand(0, $count)], $images));
            $path = "images/$file";
            $type = pathinfo($path, PATHINFO_EXTENSION);
            $data = file_get_contents($path);
            $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
            Array_push($images, $base64);
        }
        $_SESSION['images'] = $images;
    }
}
for ($i=1; $i<=count($_SESSION['images']); $i++)
    echo "<a href='?img=$i'>圖片$i</a> ";
echo "<br>";
if (!empty($_GET['img']))
    echo "<img src='" . $_SESSION['images'][$_GET['img']-1] . "'><br>";
?> 

作業

  1. 用遞迴寫出兩個正整數的最大公因數(gcd)
    gcd(144,128) 得到 ? gcd (742469137,283209877)得到?
    gcd(144,128) = 16
    gcd (742469137,283209877) = 7654321

    <?php
    function gcd($x, $y){
        if ($x === 0) return $y;
        if ($y === 0) return $x;
        if ($x >= $y) return gcd($y, $x % $y);
        else return gcd($y % $x, $x);
    }
    ?>
    <h1>最大公因數</h1>
    <form action="" method="post">
        <input type="text" name="num1">
        <input type="text" name="num2">
        <input type="submit" name="ok" value="送出">
    </form>
    <?php
    $num1 = !empty($_POST['num1'])?$_POST['num1']:0;
    $num2 = !empty($_POST['num2'])?$_POST['num2']:0;
    
    if ($num1>0 and $num2>0)
        echo "gcd($num1,$num2) = ".gcd($num1, $num2);
    ?>
  2. 分別用for 迴圈,while 迴圈及遞迴寫出階乘計算
    並計算出10!=3628800

    <?php
    function fact($n){
        if ($n === 0 || $n === 1) return 1;
        else return $n*fact($n-1);
    }
    ?>
    <h1>階乘計算</h1>
    <form action="" method="post">
        <input type="text" name="num">
        <input type="submit" name="ok" value="送出">
    </form>
    <?php
    $num = !empty($_POST['num'])?$_POST['num']:'';
    if ($num === 0) echo "$num! = 1";
    elseif ($num > 0 && $num <= 170){
        //for 迴圈
        $sum = 1;
        for ($i=1; $i<=$num; $i++)
            $sum *= $i;
        echo "for 迴圈:$num! = $sum<br>";
    
        //while 迴圈
        $i = 1;
        $sum = 1;
        while($i<=$num){
            $sum *= $i;
            $i++;
        }
        echo "while 迴圈:$num! = $sum<br>";
    
        //遞迴
        echo "遞迴:$num! = ".fact($num)."<br>";
    }
    ?>

    (進階題:如何算出大數階乘?譬如300!?,提示:因數值很大,無法用實際的乘積來計算,建議用for 迴圈+對數,指數)

    <?php
    function fact($n){
        if ($n < 0) return -1;
        if ($n == 0 || $n == 1) return 1;
        $big[0] = 1;
        for ($i=2; $i<=$n; $i++){
            $carry = 0;
            $len = count($big);
            for ($j=0; $j<$len; $j++) {
                $total = $carry + $big[$j] * $i;
                if ($total > 0) {
                    $big[$j] = $total % 10;
                    $carry = ($total - $big[$j]) / 10;
                }
            }
            while($carry > 0){
                $len = count($big);
                $big[$len] = $carry % 10;
                $carry = ($carry - $big[$len]) / 10;
            }
        }
        return join("", array_reverse($big));
    }
    ?>
  3. 一元二次方程式 a*x^2+b*x+c=0(次方^符號是借用basic 的表示方式,無關php)
    分別給 係數 a,b,c,請算出x 的解,如為虛數,請在虛數i表示
    例 a=1,b=-3,c=2,得 x1=2,x2=1

    <?php
    function caculate($a, $b, $c){
        if ($a == 0) return null;
        $delta = $b*$b - 4*$a*$c;
        $delta2 = sqrt(abs($delta));
        $x=[];
        if ($delta < 0) {
            array_push($x,(-$b/(2*$a)).'+'.($delta2/(2*$a)).'i');
            array_push($x,(-$b/(2*$a)).'-'.($delta2/(2*$a)).'i');
        }
        else {
            array_push($x,(-$b+$delta2)/(2*$a));
            array_push($x,(-$b-$delta2)/(2*$a));
        }
        return $x;
    }
    ?>
    <h1>一元二次方程式求解</h1>
    <form action="" method="post">
        <input type="text" name="a"> x^2 +
        <input type="text" name="b"> x +
        <input type="text" name="c"> = 0
        <input type="submit" name="ok" value="送出">
    </form>
    <?php
    $a = !empty($_POST['a'])?$_POST['a']:0;
    $b = !empty($_POST['b'])?$_POST['b']:0;
    $c = !empty($_POST['c'])?$_POST['c']:0;
    if ($a != 0 && $b && $c) {
            $x = caculate($a, $b, $c);
            echo "x1 = $x[0]<br>";
            echo "x2 = $x[1]<br>";
    }
    ?>
  4. 費氏數列是很特別的數列,黃金比例男星,自然界中的費氏數
    請列出1000下內的費氏數列

    <?php
    function fibonacci($n){
        if ($n === 0) return 0;
        if ($n === 1) return 1;
        return fibonacci($n-1) + fibonacci($n-2);
    }
    ?>
    <h1>費氏數列</h1>
    <form action="" method="post">
        <input type="text" name="num">
        <input type="submit" name="ok" value="送出">
    </form>
    <?php
    $num = !empty($_POST['num'])?$_POST['num']:'';
    if ($num >= 0) {
        echo "0";
        for ($i=1; ($f = fibonacci($i)) <= $num; $i++){
            echo ",$f";
        }
    }
    ?>

學習資源:

教學影片:

PHP + MYSQL 教學影片

動態網頁設計 php 教學 mysql 資料庫