CGIを使ってRubyでTwitterスパムを作った
大学でTwitterスパム作るか
— 人生ノリと勢い (@y_sni) 2017年2月13日
「大人のセンター試験」スパムが流行っているので, これくらいCGIを使えば簡単に作れるやろ〜〜ってノリで作った。試験期間中にも関わらず。ツイートを読み返すと4時間かかったらしい。
引っかかった点をメモする。
むっずwwこれまじで難しいwwww
— 人生ノリと勢い (@y_sni) 2017年2月13日
■大人センター試験
評価判定: C
正解数 : 6問/10問中
【大手企業就職可能レベル 】
□コメント あなたならもっと出来たはずhttps://t.co/GHtSVwpgMQ
Do what you like
— 人生ノリと勢い (@y_sni) 2017年2月13日
システム構成
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ライブラリを使う
RubyでCGIを書いている人なんていない(みんなSinatraを使ってる)ので, セッション管理やURIパラメータの取得方法がわかりにくいが, CGIではCGIライブラリを使う。sinatra
のparams#.[]
(ハッシュっぽいの)は CGI#.[]
に対応。
CGIライブラリはSymbolに対応していない
cgi.header( { status: 'REDIRECT', Location: url })
って書きたくなるけど, これではHTTPヘッダとして扱われないので, ちゃんと cgi.header( { 'status' => 'REDIRECT', 'Location' => url } )
と書かないといけない。
CGIレスポンスの文法
めっちゃ細かかったと思うけど記憶が定かではないから各自で調べて
結局アクセスされたん?
ユーザー認証ページまで進む人はたくさんいるが, 認証してくれたのはこの12時間で1人だけらしい。残念。
政府調達物件の仕様書はインターネットで公開されない
動機
次期全学計算機のスペックや, プリンターやネットワークやサーバーまで更新されるのか気になったので調べようとした
手法
- 筑波大学 | 入札・契約 を見る
- Googleのキャッシュに頼る(
filetype:pdf site:zaimuhp2.sec.tsukuba.ac.jp/public/
で検索して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値がダダ下がる
天久保二丁目・三丁目
スーパーが遠い
ループ東側
バスの本数が少ない(西側比)
まとめ
天久保四丁目が最良かな。
「近いところに住めば大学に行きやすくなる」とか考えるな。どうせ気の向かない講義のために布団から出ることなんかできないのだから。
Jetstarの座席
- 足が長い人は膝が前席に当たる
- シートが薄く, 後席の膝が当たっている・座席のポケットを触っているのが感じられる
デジタルディバイドとかそういうの
高齢者にWebブラウズを教える
年末年始で帰省して祖母にタブレットの使い方を教えることになった。
昔なら用途ごとにアプリをインストールしていたところだが、今回はGoogleアプリに話しかける方法を教えるだけにした。乗換案内も天気予報もGoogleだけで完結するし。
我々なら白いバーを検索バーだと判断するしリンクの張られているオブジェクトも何となくその雰囲気で判断できるけど、初心者には難しそう。
玉石混交のインターネッツ
祖母から金スマの要点を写真に撮るよう頼まれたが、面倒だったのでテレビのキャプ画像を元にした記事を紹介したら大変お気に召したようだった。(そもそもそういうサイトを紹介するのが良くない、それはそう。)
意識高い系のインターネットユーザーは非公式な情報や単に他のサイトをコピペしただけのサイトを経験による勘で避けるが、初心者にとってはそれらのサイトも「便利なインターネッツの情報」でしかない。
だから、意識高い系インターネットユーザーがアクセスしなくても、悪質サイトの運営者はWeb初心者によるアクセスで収益を得られる。
こういう質の低いサイトを除外するポータルサイトが必要だと思うが、情報の制限は検閲であり思想の誘導に繋がるからどうしたらええんかなと。
最後に
年末年始のつくば号
Yahoo!乗換案内で12/28のつくば号を検索するとエラーになるんだけど
— 大学卒業程度認定試験 (@y_sni) 2016年12月22日
帰省につくば号を使おうと思って大学会館からのルートを検索したらエラーになるばかりだったから「年末年始の時刻変更に対応してないからとりあえずエラーを吐くようにしたのかな〜〜」なんて思っていたら
つくば号 >特別ダイヤ<
— 大学卒業程度認定試験 (@y_sni) 2016年12月22日
年末年始の高速バス運行ダイヤついて|ニュースリリース|関東鉄道|地域のふれあいパートナー https://t.co/1GBjFNWZpR
年末・年始期間中(12月26日(月)から1月3日(火))は,『筑波大学』・『大学会館』・『筑波大学病院』停留所は全時刻運休いたします。
— 大学卒業程度認定試験 (@y_sni) 2016年12月22日
http://kantetsu.co.jp/img/news/2016/2016-2017_bus/highway_info_tsukuba.pdf
そりゃあ年末年始は大学からの利用客が減るだろうけどさあ, 大学のテスト期間が終わってない頃から運休するなよ。
大学に乗り入れたからって運転に必要な人員が大きく増えるわけじゃないだろうに。
テスト期間が終わって!!!さあ帰省しよう!!!!!って客が多いであろう時期に!!!!!運休するなよ!!!!!!!!
Rubyのシェバン
Twitterを見てたらmikutterのshebangの話が流れてきて,
@y_sni よくわかっていないのですが https://t.co/YpkomWWMxM こういうことだそうです
— Izumi Tsutsui (@tsutsuii) December 11, 2016
/usr/bin/ruby に Ruby がインストールされてない場合にも実行できるシェバンの話の奥が深かった。(今時, Rubyが/usr/bin/rubyじゃなくてホームディレクトリ以下に入ってる人も多そう)
#!/bin/sh exec ruby -x "$0" "$@" #!ruby p ARGV puts "Hello, World!"
実行するとまずシェルで実行されるじゃろ?
シェルで exec ruby -x "$0" "$@"
が呼ばれるじゃろ?
自身の #!ruby
以降の行がRubyインタプリタで実行されるじゃろ??
実行が終わったあとに次の行からのシェルスクリプトとしての実行はどうなるんじゃ??← exec コマンドはそのコマンドが実行した時点で終了するんでした
にわか知識じゃダメですね. はやく情報学群になりたい。
重要なのは, 3行目の #!ruby
はshebangとしては機能してなさそうだということです。
追記
タイトルを内容に即して 「シェバンがよくわからん」 から 「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)
と言われる。
昨夜はすっとぼけたことを言ってて,
@tsutsuii
— すに@地雷 (@y_sni) 2016年12月11日
-xオプションなしだとexec行もRubyスクリプトとして解釈されるようですが, execメソッドがRubyにもシェルと同様の挙動で定義されているので, 結局ruby -x で実行されるようですね。
これは間違い(シェバンを書いてないテストコードで誤解した。よく考えたらexecの引数がクォートで囲まれてないからRubyならundefined variable or methodを吐くはずだった) https://t.co/8vAQO0yqPl
— すに@地雷 (@y_sni) 2016年12月12日
早とちりは良くない。