It's super effective

多分技術関連をメインに発信します

CGI on Ubuntu Server

経緯

さくらのVPSをお借りしたので、せっかくだからUbuntuServerをぶち込んでCGIを動かそうと思ったら滅茶苦茶苦労した。   VPSを借りた(サーバ未インストール)という状態を前提にお話しを進めようと思います。

やりたいこと

持って来たCGIスクリプトをサーバに突っ込んで動かす

用意するもの

  • 自分のPC(win10)
  • さくらのVPS

手順

ステップ1:OSのインストールとユーザ作成

折角サーバを借りてもOSを突っ込まなければ意味がありません。というわけでOSを突っ込みましょう。経緯でもふれたとおり、Ubuntuを突っ込むことにしました。しばらくするとインストールが完了するので端末を起動。とりあえずユーザだけ作成。 rootユーザでログインして、以下のコマンドを叩くことで新たなユーザを作成します。

sudo adduser serverUser

これでserverUserという名前のユーザがサーバに作成されました。 これでユーザの作成完了!以降はこのユーザを使って色々やります。

ステップ2:SSH接続の準備

今回はRLoginを使ってリモートデスクトップSSH接続(ローカルのPCからCUIで遠くのコンピュータをいじくりまわすヤツ)することにしました。一旦サーバから離れて、RLoginをインストールしましょう。指示に合わせてカチカチするだけだったので割愛。気が向いたら手順乗せるかも。

ステップ3:RLoginを使おう!

とりあえず起動します。RLoginのサーバ情報に借りたサーバの情報を追加。その際こんな感じの画面が出てくるはずです。 f:id:tabun-are:20220321173238p:plain ホスト名に使っているサーバのIPアドレスを、ユーザ名に自分でサーバに作ったユーザの名前を、パスフレーズにそれのパスワードをそれぞれ入力して完了。他はそのままで大丈夫です。 f:id:tabun-are:20220321224339p:plain

うまくつながるとこうなります。以降、自分のPCからサーバを弄ることができるようになりました。わざわざブラウザ開いてマイページに行って端末開いて・・・なんて面倒とはおさらば!

ステップ4:Apacheを突っ込む

サーバ側の作業です。コマンドで一発。

sudo apt-get install apache2

ステップ5:Apacheを設定する

引き続きサーバ側の作業になります。一番めんどくせぇ部分です。気合入れていきましょう。

ubuntu16.04のApache2設定/cgi設定 - Qiita を参考に設定を弄り、公開ディレクトリを変更します。まずは/etc/apache2/sites-availableに移動して、vimなりnanoなりEmacsなりでhoge.confを開き(無ければ新規作成してくれる)、以下を入力し保存。

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler cgi-script .cgi .py

<Directory "/var/www/cgi-bin">  
        AllowOverride None
        Require all granted
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
</Directory>

次に、デフォルトの設定を無効化してこの設定を有効化する。

sudo a2dissite 000-default.conf
sudo a2ensite hoge.conf

そしてapacheを再起動。

sudo service apache2 restart

ステップ5.5:CGIプログラムを書く

プログラムがなきゃどうにもなりません。というわけで簡単なプログラムをVSCodeなりSublime Textなりで書きましょう。

   #!/usr/bin/perl --
   print "Content-type: text/html\n\n";
   print "<h1>hello,CGI</h1>";

hoge.cgiという名前でローカルの適当な場所に保存。

ステップ6:ローカルで作成したプログラムをサーバに転送する

サーバの方でvimなりnanoなりEmacsなり使って書いてってこともできますが、やっぱり一生懸命こさえた自分の開発環境でコーディングしたいもの。というわけで、自分で使っているPCの方で作業して、その作業結果をサーバにアップロードして反映するということを考えます。 色々ありますが今回はscpを使います。一旦サーバから離れて、自分で使っているPCのコマンドプロンプトを起動。アップロードしたいファイルがある階層まで移動したのち、以下のコマンドを叩く。

scp hoge.cgi serverUser@[サーバのIPアドレス]:/home/serverUser

アップロードが完了したら今度はサーバを弄ります。アップロードしたファイルを公開するため、アップロードした場所(ホームディレクトリ)から公開したいディレクトリ(今回は/var/www/cgi-bin)に移動させましょう。

sudo mv hoge.cgi /var/www/cgi-bin

一番右のディレクトリ部分には自分で設定したドキュメントルートを代入してください。この記事に沿って作業してきた場合はこのままでOKです。

ステップ7:パーミッションの設定をしよう

サーバを弄ります。パーミッションを設定してプログラムがちゃんと動くか確認しましょう。実行できるよう、パーミッション設定を755に変更します。まずはcgiファイルが置かれた階層まで移動。然る後以下のコマンドを叩く。

   sudo chmod -R 755 hoge.cgi

これパーミッションの変更が完了します。 hogeには自分でアップロードしたcgiファイルの名前を入れましょう。 変更後、アドレスバーに自分のサーバのアドレスに続いて"/hoge.cgi"を入力。hogeにはry

f:id:tabun-are:20220321224415p:plain

やったね! あとはどっかからスクリプトを落としてサーバにぶん投げればゲームの設置なんかもできるでしょう。

つまずきポイントまとめ

つまずき1:Forbiddenを吐かれた

apache側の設定がうまくできてない、あるいは反映されていない可能性が高い。  

  •  デフォルトの設定はちゃんと無効化しましたか?
  • 自分で書いた設定をちゃんと有効化しましたか?
  • サーバの再起動はしましたか?

あたりが一番多い要因かなと思います。次点で設定ファイルの書き間違いとか設定ファイルの置き場所間違い。

つまずき2:InternalServerError

改行コード

サーバー側でvimなりnanoなりEmacsなり使って書いたものなら動く場合、改行コードが原因である可能性が高いです。 調べによると、どうもRloginに備え付けられているSFTPだと改行コードを変換してくれないっぽい。 そんなわけで、一行目のインタプリタの場所を書く行の末尾に --を追加。

   #!/usr/bin/perl --

曰く、これによって改行のめんどくさい部分がいい感じに吸収されるとか。

パーミッションの設定忘れ

少なくとも何も弄っていない状態だと500吐いて終わります。ファイルに合わせて(cgiなら基本755、文献に指示があればそちらを優先)適切なパーミッションを設定してあげましょう。うぶんつの最近のバージョンだとlsしたときに755のファイルは緑色の文字で表示してくれます。便利。

それでも500エラーを吐かれたら

もしかしたら実行環境を呼び出せていないためにプログラムがそもそも動いていない可能性があります。各スクリプトの最初の行(#!とか書いてあるとこ)がちゃんとperlの実行環境のある場所を指しているかどうか確認しましょう。一見コメントっぽく見えますが、これはコメントではありません。意味のある文言です(プログラムを投げる先の実行環境はどこにあるかみたいな意味)。大抵は#!usr/local/bin/perlか#!usr/bin/perl(筆者の環境ではこっち)のどちらかで動いてくれるはずです(要出典)。

参考文献

qiita.com

note103.hateblo.jp

linuxserver.hatenadiary.jp

qiita.com

H31年度編入試験体験記(総括)

はじめに

当記事は私の編入勉強の様子を綴ったものです。来年度以降編入(特に工学部情報系)を志望している各位のお役に立てればと思います。2018年度に受験した時の記録ですが、諸般の事情で記事を移すことになったために投稿日が2022年になっています。

自己紹介

自称情報系のH26年度に入学した高専生です。AtCoder(Betaに移行してから手がついていない)などにお世話になっていました。

 受験した学校

の3校を受験しました。もう1校受けていましたが、指定された資格を持っていたことによって面接以外の科目が免除されたため含めていません。以下、それぞれの学校に関する編入体験記へのリンクを置いておきます。

 

持ち物

受けた試験の範囲

全体的にかなりかぶっていたように思います。農工大は英語の試験もありましたが、TOEIC対策の一環としてDUOを使用した勉強を行っていたためにかなり楽に試験時間をすごすことができました。語彙大事です。

数学なら微積線形代数、物理なら力学と電磁気学を勉強するだけで3校分の対策になるという程度の範囲でした。情報は応用情報を取得していたためそれを復習したり、4年次秋ごろまで細々とAtCoderの勉強を進めていたことが功を奏して非常に楽に解くことができました。

勉強スケジュール

受験勉強は5年次の4月から開始しました。

4,5月でTOEICを、5,6,7月に数学物理を対策するという流れをとりました。一度過去問を数年分一度だけ解いて、解き終わったらわからないところをマセマシリーズや過去問徹底研究などで補強するという手順で勉強を進めました。

5月中旬(TOEICが終わったあたり)は何を血迷ったか、試験範囲外である複素関数論の勉強をしていました。要項はよく見て、出題範囲を確認しておきましょう(未だになぜ複素関数論の勉強をしていたかわからない)。

5月末と6月頭はプロコンの資料作成を行わなければならなかったので勉強時間が特に減ってしまいました。スケジュール管理には十分注意を払ってください。

私は編入勉強のおかげで数楽から見事に数が苦になりました。つよくなりたい

使用書籍

  • マセマ(電磁気、微積)
  • 過去問徹底研究
  • 弱点克服 大学生の初等力学
  • 基礎物理演習
  • 複素関数攻略への一本道

を頼りました。特にマセマには非常に助けられました。点数にはあまり結びつかないものの、根本的な理解にいたることができます。そのため、原理まで理解しないと手足が出にくいなんて人にはまさにうってつけです。下の三冊(弱点克服 大学の初等力学、基礎物理演習、複素関数攻略への一本道)は問題の練習用に買いました。今振り返れば、マセマ→弱点克服シリーズ→各種演習用書籍という順番にこなしていくのがよかったかなと思います。

なにか質問等あればコメントいただければ可能な範囲でお答えします。

 

 

 

 

H31年度 宇都宮大学工学部情報工学科 編入体験記

 

おそらくトップクラスに出回っている情報量が少ない大学だと思います。基本的に、過去問は自身で宇都宮まで取りに行かなければなりません。大事なことなのでもう一度います。過去問は自身で宇都宮まで取りに行かなければなりません。学校においてあるケースはかなりレアなので気をつけましょう。

大学の立地

宇都宮大学は2つのキャンパスがありますが、この記事では工学科のキャンパスである陽東キャンパスへの言及にとどめます。

宇都宮駅から3~4km離れた場所に立地しています。が、1時間に10本程度バスが運行しているためさほど気にならないと思います。真正面に薬局があるため昼ごはんの調達は非常に楽です。ゲーセンの存在は確認していません。600m程度歩けば大き目の商業施設があるので暇な日のすごし方には困らないと思います。

 

傾向

出題科目は数学、物理の2科目です。このほか、TOEICの点数が参照されます(点数=min(スコア/750,100))。東京へのアクセスが比較的行いやすく、かつTOEICが使えるからという理由で滑り止めとするのもアリかもしれません。

数学は行列(対角化やそれを利用する問題など)、体積を求める積分(年によって重積分になるか回転体の積分になるかわかれる)、微分方程式(年によって難易度がかなりバラける)の3つの分野から出題されているように見受けられました。

物理は毎年力学が固定で出題、これに加えて音、光、電磁気のうちどれか一つの分野から出題されます。募集要項には「高校の範囲を尊重」という記述がありますが、力学にて空気抵抗を考える自由落下の問題が出題されているのを確認しました(微分方程式の知識が必要)。音、光、電磁気に関しては高校の範囲内(のはず)です。

 

入試前日

当日移動では間に合わなかったためホテルシーラックパルに前泊しました。試験会場まで約700m、程近い場所にベルマート(大型のスーパー)もあり夕飯の調達には困らない、朝ごはんが出る、比較的安価、と非常に便利なホテルだったと思います。

入試当日

面接があるためスーツを着用しました。とても暑い日だったので死にかけました。水分補給はこまめに行いましょう。

8:10頃に会場に集まり、しばらく待機した後試験室に案内されるという流れになりました。預ける場所がなかったのでひとりだけキャリーバッグを引きずって歩いてました。結構恥ずかしかった。試験は数学→物理→面接の順番でおこなわれました。午前中に数筆記試験、午後に面接という配分でした。問題の内容はよく覚えていませんが、コメントにて聞いていただければお答えします。数学の試験問題の回収中、ケアレスミスに気がついて血の気が引いたことと全体的に時間が足りず残り10分あたりでめちゃくちゃ焦ったということだけは覚えています。物理は問題を解く手順が煩雑でなかったためか余裕を持ってとくことができたと記憶しています。
面接では「志望動機」「編入後の進路」「現在の受験状況」などを聞かれました。他に何個か聞かれた気がしましたが忘れてしまいました。比較的カジュアルな雰囲気に終始し、10分もかからないうちに面接は終わりました。宇都宮大学に限らず、面接全般に言える話ですが待機時間中は電子機器が使えません。紙媒体の暇つぶしを持ち込んで対策しましょう。当然勉強の時間に費やすのもアリです。私は2日後に農工大の試験が控えていたので偏微分と戯れていました。この日は受験人数が10人程度、面接自体の時間も短かったため1時間少しで終了しました。

 

 

 

 

 

H31年度 筑波大学情報学群 情報メディア創成学類 編入体験記

2018年7月14日に筑波大学編入試験を受けてきましたのでその体験を書き連ねます。

 

傾向

試験は数学・情報基礎(C言語で書かれたアルゴリズム)の2科目です。面接はありません。数学は2年周期でとても簡単になったり非常に難しくなったりします。特にH29年度は飛びぬけて高難度だったという話をよく聞きます。年度を問わず、情報基礎は数学に比べれば極楽という印象でした。過去問は大学のHPから入手できるのでそちらをご利用ください。

数学は微分積分から1ページ分、線形代数から1ページ分というように出題されます。両方対策しましょう。

 

試験前日

秋葉原駅から乗り換えてつくばエクスプレスに乗ることで行きました。往復で2300円程度です。N時00分には快速が出るのでそれに乗るのが快適だと思います。

つくば研修センターに前泊しました。試験会場の筑波キャンパス春日エリアまで歩いて10~15分程度です。洗濯機と乾燥機を無料で使わせてもらえるため、洗剤さえ持ち込めば最小限の着替えを持つだけで済みます。面接がないのでスーツを着る必要もありません。したがって、服を入れる鞄を用意できればキャリーバッグを引きずって歩く必要はありません。向かいにコンビニもあるので朝食や夕食には困らないでしょう。ただし、早めに買いに行かないと陳列棚が空になっていることもありうるので気をつけてください。

この日は5年度分の過去問を1週した後に早めに寝ました。冷房が机の真正面にあるので風が直に顔に当たってしまい非常に勉強しづらかったことを覚えています。

試験当日

120分で上記の2科目を一気に解く方式の試験でした。それまで受けた試験は全て科目ごとに制限時間が定められていたため、少し面食らった覚えがあります。問題難易度の見積もりが困難だったため、解けそうな印象がつよかった情報基礎から解き始めました。

数学:条件下での最大値と最小値、二重積分、射影
情報基礎:迷路の探索、コサイン類似度の計算

手ごたえは

数学:微積5割

   線形1割

        情報8割

といったところでした。線形代数が意味不明すぎて吐きそうになりました。今でもどうやって解けばいいかわかりません。
情報の問題を見直したところ、0と1を見間違えてそのように書いてしまったり、配列を入れるべきところをなぜか添え字を入れてしまったりというしょーもないミスをしでかしたため取れたはずの10割を逃してしまってました。試験中はわかりもしない線形代数に抵抗しないでわかるところだけに注力したほうがよかったのかもしれません。

試験終了後は逃げるように秋葉原に行きました。筑波を出る際、一緒に試験を受けた同級生と恐らく二度とここを訪れることはなさそうだという話をしました。

H31年度 東京農工大学工学部情報学科 編入体験

 

アクセス・立地

東小金井から歩いて最大10分程度の場所に立地しています。田舎と呼ばれることもあるようですが、近所にスーパーがあるため昼食の調達には困らない、都心へのアクセスが容易に行えるという2点で田舎のようなナニカではないかと思います(地方民の感想)。

傾向

過去問が開示されているので過去問を見てください。傾向は大体つかめると思います。英語は農工大学の赤本が演習に使えるらしいのでそちらを頼りましょう。

配点は数学,英語,専門が200点,物理が100点です(情報の場合)。他の学科はわからないので各自で要項を見てください。

専門の試験には学校によってはまったく取り扱われない分野からの出題もあったので早めに過去問を一周することをお勧めします。数年度分を一回ずつといて、授業で触れられなかった部分をゆっくり対策しましょう。

数学物理の答えあわせには「大学編入のすすめ」さんを頼るのがいいでしょう。ここ数年分の解答が用意されており、私も助けられました。専門はグーグル先生か学校の先生を頼るといいでしょう。

試験当日

試験は2日にかけて行われます。

一日目に数学英語物理が、二日目に専門と面接がありました。問題の内容をよく覚えていないので、過去問が開示され次第そちらをご利用ください。確か専門に面白い問題があったように記憶しています。面接は5分程度でした。遠方の人に配慮してか、東京と離れている人から順に呼び出されていきました。ここでも当然電子機器の類は使用できなかったのでアナログな暇つぶしを持ち込むと安心です。私は10日後に筑波大学編入試験が控えていたためベクトル空間と戯れていました。試験終了後、駅近くで受験票をなくしたことに気がつき発狂しました(結局試験に使った建物の近くでずぶぬれになっているところを発見した)。ないとは思いますが、皆さんも気をつけてください。新幹線の時刻の都合から寄り道する時間がなかったのでまっすぐ戻ることにしました。

試験前日

旅館二幸に泊まりました。農工大の受験者(編入に限らず)の間ではかなり人気があるようです。宿泊場所の少ない農工大周辺ですが、

・徒歩が現実的な距離である

・二日目が終了した後に戻ってくる前提ではあるがチェックアウト後も大きい荷物を預かってもらえる(戻るのが億劫だったので結局使わずじまいとなってしまった)

などのメリットがあります。特に上が強力なメリットです。

注意点

会場には掛け時計すらありません。気をつけてください。私は時計を忘れて大変なことになりました。

合格した場合、7月末までに入学するかどうかの意思表示をしなければなりません。送り忘れないようにしましょう。

メイン以外のスレッドでmatplotlibを使ってはいけないらしい

PyQt5でQThreadを利用したコードを書いていたら次のようなエラーに遭遇した:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSWindow drag regions should only be invalidated on the Main Thread!'

 

調査の結果,サブスレッドでmatplotlibを使うとこうなると判明.

というわけでちょっとやりすぎ感あるけどmatplotlib周りのコードをプログラムから抹消して解決をみた.

 

 

ただ,処理の途中結果を可視化できないのはそこそこ不便なので,プロットが絡む処理をメインに持ってくるかサブスレッド中でも動く可視化手段を模索したい.