CGIを使ってRubyでTwitterスパムを作った

「大人のセンター試験」スパムが流行っているので, これくらいCGIを使えば簡単に作れるやろ〜〜ってノリで作った。試験期間中にも関わらず。ツイートを読み返すと4時間かかったらしい。

引っかかった点をメモする。

システム構成

cgiファイルをcoins機室で書き, 全学計算機から公開する。

Ruby gemを使えない

全学計算機のユーザー環境では gem install できるが, CGIサーバーには反映されないため, requireでエラーになる。幸いにもCGIサーバーにbundler gem はインストールされているため, Gemfile を書き, bundle install --path=./gems でローカルにインストールし, Rubyスクリプト(CGIファイル)内で require 'bundler'; Bundler.require することでgemを使える。

ちなみに, なぜかcoins機室のCentOSではgemをインストールすることができなかった。

セッション管理にはCGIライブラリを使う

RubyCGIを書いている人なんていない(みんなSinatraを使ってる)ので, セッション管理やURIパラメータの取得方法がわかりにくいが, CGIではCGIライブラリを使う。sinatraparams#.[](ハッシュっぽいの)は CGI#.[] に対応。

CGIライブラリはSymbolに対応していない

cgi.header( { status: 'REDIRECT', Location: url }) って書きたくなるけど, これではHTTPヘッダとして扱われないので, ちゃんと cgi.header( { 'status' => 'REDIRECT', 'Location' => url } ) と書かないといけない。

CGIレスポンスの文法

めっちゃ細かかったと思うけど記憶が定かではないから各自で調べて

結局アクセスされたん?

ユーザー認証ページまで進む人はたくさんいるが, 認証してくれたのはこの12時間で1人だけらしい。残念。

政府調達物件の仕様書はインターネットで公開されない

動機

次期全学計算機のスペックや, プリンターやネットワークやサーバーまで更新されるのか気になったので調べようとした

手法

問題点

結果

落札額は14,996,404円だった http://zaimuhp2.sec.tsukuba.ac.jp/public/bid_list.php?y=2016&q=3&c=1

契約内容はわからず。

政府調達物件の仕様書はインターネットで公開されない

一般競争入札案件 (例えば: メ創計算機 http://zaimuhp2.sec.tsukuba.ac.jp/public/data/1482372599756505.pdf )は仕様書もきれいなPDFでネット上に掲載されているんだけど, 政府調達案件(例えば: スクールバス運行業務 http://zaimuhp2.sec.tsukuba.ac.jp/public/data/1482197773679582.pdf )は 文部科学省調達情報 の検索結果をFAXで送信したような汚いPDFが多く, スペックも「入札説明書による」と書いてあるだけである。入札説明会に行かないと契約内容はわからないのかなあ

最後に

筑波大学ショッピングモール計画の入札はまだ公開されていないみたいだけどいつやるんだろう?

筑波大生のアパート選び

自分がアパート選びで失敗したと思ったところを中心に

設備

風呂に窓があるところは避けろ

換気がしやすいだろうからと選んだが、冷気が降りてきて寒い。

鎧戸に網戸が付いているか

付いてないと虫が入ってきて大変

二重窓

冷気が入ってこなくなる。中毒性あり。

住めない地域とその理由

逆走自転車で歩道をロクに通れない

天久保三丁目東側

ローソン前の交差点が筑波大生特有のガバガバ交通マナーでSAN値がダダ下がる

天久保二丁目・三丁目

スーパーが遠い

ループ東側

バスの本数が少ない(西側比)

まとめ

天久保四丁目が最良かな。

「近いところに住めば大学に行きやすくなる」とか考えるな。どうせ気の向かない講義のために布団から出ることなんかできないのだから。

デジタルディバイドとかそういうの

高齢者にWebブラウズを教える

年末年始で帰省して祖母にタブレットの使い方を教えることになった。

昔なら用途ごとにアプリをインストールしていたところだが、今回はGoogleアプリに話しかける方法を教えるだけにした。乗換案内も天気予報もGoogleだけで完結するし。

我々なら白いバーを検索バーだと判断するしリンクの張られているオブジェクトも何となくその雰囲気で判断できるけど、初心者には難しそう。

玉石混交のインターネッツ

祖母から金スマの要点を写真に撮るよう頼まれたが、面倒だったのでテレビのキャプ画像を元にした記事を紹介したら大変お気に召したようだった。(そもそもそういうサイトを紹介するのが良くない、それはそう。)

意識高い系のインターネットユーザーは非公式な情報や単に他のサイトをコピペしただけのサイトを経験による勘で避けるが、初心者にとってはそれらのサイトも「便利なインターネッツの情報」でしかない。

だから、意識高い系インターネットユーザーがアクセスしなくても、悪質サイトの運営者はWeb初心者によるアクセスで収益を得られる。

こういう質の低いサイトを除外するポータルサイトが必要だと思うが、情報の制限は検閲であり思想の誘導に繋がるからどうしたらええんかなと。

最後に

日本メーカーのペコペコアイソレーションパンタグラフキーボードとMSIMEはクソ

年末年始のつくば号

帰省につくば号を使おうと思って大学会館からのルートを検索したらエラーになるばかりだったから「年末年始の時刻変更に対応してないからとりあえずエラーを吐くようにしたのかな〜〜」なんて思っていたら

http://kantetsu.co.jp/img/news/2016/2016-2017_bus/highway_info_tsukuba.pdf

そりゃあ年末年始は大学からの利用客が減るだろうけどさあ, 大学のテスト期間が終わってない頃から運休するなよ。

大学に乗り入れたからって運転に必要な人員が大きく増えるわけじゃないだろうに。

テスト期間が終わって!!!さあ帰省しよう!!!!!って客が多いであろう時期に!!!!!運休するなよ!!!!!!!!

Rubyのシェバン

Twitterを見てたらmikutterのshebangの話が流れてきて,

/usr/bin/rubyRuby がインストールされてない場合にも実行できるシェバンの話の奥が深かった。(今時, Rubyが/usr/bin/rubyじゃなくてホームディレクトリ以下に入ってる人も多そう)

#!/bin/sh
exec ruby -x "$0" "$@"
#!ruby
p ARGV
puts "Hello, World!"

実行するとまずシェルで実行されるじゃろ?

シェルで exec ruby -x "$0" "$@" が呼ばれるじゃろ?

自身の #!ruby 以降の行がRubyインタプリタで実行されるじゃろ??

実行が終わったあとに次の行からのシェルスクリプトとしての実行はどうなるんじゃ??← exec コマンドはそのコマンドが実行した時点で終了するんでした

にわか知識じゃダメですね. はやく情報学群になりたい。

重要なのは, 3行目の #!rubyshebangとしては機能してなさそうだということです。

追記

タイトルを内容に即して 「シェバンがよくわからん」 から 「Rubyのシェバン」 に変えた。

./hoge.rb で実行できることは理解できたが, ruby hoge.rb でも実行できるんか疑問になった。

Rubyリファレンスマニュアル の記述は -x オプションによって#!rubyの行まで読み飛ばされているように読み取れる。

しかし実際はそうではなく, 先頭行にRuby以外のシェバンがあると, 常に #!ruby の行まで読み飛ばされるらしい (じゃあ -x って何やねん……)。一件落着。

これを利用するとRubyスクリプトなのにシェバンが異なることで実行できないファイルもつくることができ,

#!/bin/sh
puts :hoge
puts :hage
puts :boke

を実行すると ruby: no Ruby script found in input (LoadError) と言われる。

昨夜はすっとぼけたことを言ってて,

早とちりは良くない。