型の無い言語からC言語を学ぶと
情報構造論の中間試験の採点をしていて気づいたこと。
プログラムが解っていない学生の回答で、関数呼び出しで実引数に int とか実引数の型を書く学生がいる。
int foo( int x ) { return x * x ; } void main() { for( int i = 0 ; i < 10 ; i++ ) printf( "%d" , foo( int i ) ) ; } ~~~ なぜ int を書くの?
でも、最近の学生はプログラミングで最初に習うプログラム言語が、JavaScript だったり、Python だったりと、型の無い言語であることが多い。
こういう学生さんは、関数宣言と関数呼び出しでは、以下のような感じで習うことだろう。
// JavaScript function foo( x ) { return x * x ; } for( var i = 0 ; i < 10 ; i++ ) print( foo( i ) ) ; ## Python def foo( x ) return x * x for i in range( 0 , 10 ) print( foo( i ) )
んで、こういう学生さんは、関数宣言の仮引数部分を見ると、変数名しか書いてない。この後にC言語を習うと、仮引数の宣言で foo( int x ) みたいに書いてあると、そこに int と書かないとダメみたいに思う、もしくは int x で一つの引数みたいに思うんだろうな。
だから、関数呼び出しの実引数にで、foo( int i ) みたいに型名を書いてしまうと思われる。int というのは、整数型にするためのもの…みたいなイメージなんだろうか?。
C言語での関数宣言と関数呼び出しの説明
// fooという関数の宣言 int foo( int x ) // foo()の関数の答えの型は、int型。 ~~~~~~仮引数 { // 仮引数 x の型は、int 型。 return x * x ; } void main() { for( int i = 0 ; i < 10 ; i++ ) printf( "%d¥n" , foo( i ) ) ; ~~~実引数 // foo() の第一引数は、整数型を書かないといけない。 // 1番目の実引数 i の型は、int i で宣言されているから、int 型。 // foo( 1.2 ) と書くと、第一引数は double だから、 // 引数の型が合わないのでエラー。 }
関数宣言の引数は、仮引数と呼ぶ。関数を呼び出すときの引数は、実引数と呼ぶ。
C言語では、関数宣言の仮引数には「型」を明示する必要がある。(というか変数宣言では型を明示しないとダメ)
さらにC言語では関数を呼び出すときに、仮引数と実引数で「型」が一致していないとエラーとなる。
JavaScript や Python では、変数に「型」という概念が不要なので、仮引数宣言には「型」を明示する必要がない。
C言語 や Java は、静的な型付けの言語。最初から型がきまっていないとダメな言語。
これに対し、JavaScript や Python という言語は、動的な型付けの言語。プログラム言語が実行中に型を意識しながら動く言語。
福井高専の対外接続の速度
福井高専ではSINETによって接続されているけど、次の更新の際に十分な性能があるかのために、ネットワーク利用状況の確認。
瞬間最大風速で、150Mbps 。ムーアの法則に従うとすれば、2年で2倍と考えると、2022年で約500Mbps, 2025年で1.2Gbps 程度となる。特に今後 学内でBYODが拡大すると、さらなる通信速度が必要と考えられる。
MoodleのSTACKをインストール
数学の先生より、本校で運用している Moodle サーバで、数学の表示や小テストのためのプラグインの STACK をインストールしてほしいとの要請があったので、インストールしてみた。
maxima,gnuplotなどのインストール
STACK は、数式表示に maxima 、グラフ表示に gnuplot を使うのでインストール
# aptitude install maxima # aptitude install gnuplot gnuplot-common
mathjaxのインストール
JavaScript で 数式表示をするための mathjax をインストール
# aptitude install libjs-mathjax fonts-mathjax-extras
プログラムは /usr/share/javascript/mathjax/ に保存されているので moodle から使えるように、ライブラリに登録
# cd /usr/share/moodle/lib # ln -sf /usr/share/javascript/mathjax .
STACKに必要なmoodleプラグインのインストール
“moodle stack”でググったサイトの情報では、zip で拾ってきて、解凍、リネームとか書いてあったけど面倒なので、他のやり方として git の説明があったので、そのまま git を実行
# cd /usr/share/moodle # git clone git://github.com/maths/ moodle-qbehaviour_dfexplicitvaildate.git question/behaviour/dfexplicitvaildate # git clone git://github.com/maths/ moodle-qbehaviour_dfcbmexplicitvaildate.git question/behaviour/dfcbmexplicitvaildate # git clone git://github.com/maths/ moodle-qbehaviour_adaptivemultipart.git question/behaviour/adaptivemultipart
一旦、管理者アカウントでログインし、管理ブロックから通知をクリックしてインストールを完了させる。
STACK本体のインストール
さらに、stack 本体をインストール
# git clone git://github.com/maths/quiz_stack.git mod/quiz/report/stack
管理ブロックから通知をクリックしてインストールを完了。
# git clone git://github.com/maths/moodle-qformat_stack.git question/format/stack
再び、管理ブロックから通知をクリックしてインストールを完了。
最後に動作確認で、無事数式やグラフが表示されていたので、大丈夫だろう。
遅すぎるのでCASのキャッシング
インストールの参考にしたサイトの記事では、数式やグラフ表示などで CAS を使うけど、大量の情報が残ってHDDを消費するとの記載が書いてあったので、キャッシングしない設定にしていた。しかし、遅すぎて使い物にならないのでは意味がないので、「データベースのキャッシュ」にしてみた。
当面、これで運用してみて、HDD が逼迫するようであれば、Moodle サーバはAzureサーバ上なので、HDD の設定を検討してみよう。