読者です 読者をやめる 読者になる 読者になる

ICTトラコン7に参加した

ICT の トラブルシューティングコンテスト に参加してきました。
先輩は前回も参加したようですが、自分は初参加でしたのでめっちゃ緊張しました。
問題の範囲はネットワークとサーバで、自分が解いた問題はサーバなのでサーバ問題について触れようと思います。
※この記事はガチ解説ではなく、ざっくりと自分が解いた問題についてと、その感想について書いてあります。

全然関係無いですが、懇親会でこんなスライドやった人です。(Twitter@ice_arr)

問題について

・A社 から G社 まであり、それぞれの会社が起こすトラブルを解決するという形
・問題サーバに問題が置いてあり、トラブルが解決出来たらそこに解答を送信する
・A社, C社, D社, F社がサーバ系 (のはず)
・各社2, 3問ずつあって、1問目を解かないと次へ行けない
・OS は ubuntu (多分) と CentOS7 があったが、なんとなく CentOS7 のほうが多かった気がする

担当した問題

・A-1:apt-get が出来ないトラブル、/etc/resolve.conf で参照しているDNSサーバが駄目っぽかったから 8.8.8.8 にした
・A-2:apt-get が出来ないトラブル、過去に実行されたaptによってDBがロックされたままだったから解除した
・A-3:webサーバに SSH 出来ないトラブル、IP制限&ルーティングミス だと思っていたが全く見当違い、正解はWoLとかいうのを使うらしい
・C-1:Docker のコンテナからインターネットにアクセス出来ないトラブル、ホストの iptables の設定が悪かったらしい (iptables の書き方がわからず死ぬ)
・C-2:辿り着けず…
・D-1:DNS で名前解決が出来ないトラブル、解決方法は全く検討がつかなかった
・D-2:辿り着けず…
・F-1:NFS でマウント出来ないトラブル、設定ファイルのIP設定でホスト部ワイルドカード(*) を使ってたのが駄目っぽかったから、実際にアクセスするクライアントのIPにした
F-2:辿り着けず…
・F-3:キャッシュサーバがあるけどキャッシュからデータを取得しないトラブル、設定ファイルが駄目だったらしい (時間が足りず死ぬ)

問題の進め方

・その問題にどれだけ時間を掛けるか、最初に決めておく
・トラブルの原因予想を Evernote に書き出す
・トラブルが解決したら Slack で適当に投げて、解答を送信する人にいい感じにまとめて送信してもらう
・1時間ぐらい詰まったら廊下に出てコーヒー飲む (タバコを吸いに行くメンバーも居た)
・進捗はホワイトボードに ○ △ ☓ で書いて共有する
f:id:yakimelon:20170306020548j:plain

感想

・順位は下から数えてかなり上位…、正直自分がそこまで出来ないとは思ってなかったのでかなり悔しい
・自分はwebが本業なので web が全く出ない今回のトラコンはかなり辛かった (MySQL の問題はあったらしい)
・サーバの勉強はもちろんしたが、DNSとネットワーク周りがカバーしきれていなかった
・Dockerも使ったことあったけどネットワークがどうなってるのかは知らなかった、ツールは使えるだけじゃなくてアーキテクチャも大事なんだなと身を持って思い知った
WoL は初めて聞いた、でも半分近くのチームが解答出来てたみたいで本当に学生なのか?と思った
・今までほとんど Linux 触ってなかったので深く学ぶ為のいい機会になった
・次回のトラコンは8月にあるらしいので、その時までには目をつぶってArchLinuxをインストール出来るぐらいになりたい
・運営の方々には感謝してもしきれないです、本当にありがとうございました!

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38) の対処

MacBook ProMySQL を起動しようとしたら、下記のエラーが出ました。

$ mysql

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

この対処法はネットで検索してすぐに出てきて、下記のコマンド打てば解決します。

$ touch /tmp/mysql.sock

しかし、自分の場合はこの後に別のエラーが出てしまいました。

$ mysql

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)

ネットで調べても原因がなかなか出てこなくて悩んでいてなんとなくプロセスを確認してみたところ、 なんとすでに MySQL が動いていました。

$ ps -ax | grep mysql

_mysql            1548   0.0  2.7  3085236 459960   ??  S     8:41PM   0:01.07 /usr/local/Cellar/mysql56/5.6.29/bin/mysqld --basedir=/usr/local/Cellar/mysql56/5.6.29 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql56/5.6.29/lib/plugin --user=mysql --log-error=/usr/local/var/mysql/user-no-MacBook-Pro.local.err --pid-file=/usr/local/var/mysql/user-no-MacBook-Pro.local.pid

すぐさま kill して再びMySQLを起動してみると、今度はちゃんと成功しました。

$ sudo kill 1548
$ sudo mysql.server start

Starting MySQL
.. SUCCESS!

amazon の仮想デスクトップでPCゲームを動かそうとした

自分は Mac Book (借り物) 使いなので、win向けのPCゲームをプレイすることが出来ませんでした。
デュアルブートVirtualBox を使ってもよかったのですが、借り物のPCにゲームをインストールするのには気が引けました。

そこで出会ったのが amazonクラウド上の仮想デスクトップで、AWS のサービスである「Amazon WorkSpaces」です。

今回はこの「Amazon WorkSpaces」でwin向けのPCゲームを動作させようとした記録を残します。

目次

  • AWS とは
  • Amazon WorkSpaces とは
  • AWS の学生サービスを受けて $150 を貰う
  • ルートアカウントの MFA を有効化
  • WorkSpaces をセットアップ
  • ブラウザからアクセス出来るようにする
  • 仮想デスクトップを起動させ、ゲーム体験版をインストール

AWS とは

ベンチャー企業が大好きなナウくてイケてるサーバやインフラ系の web サービスです。
詳しくは下記のリンクを参照して下さい、理解出来たらアカウントを作りましょう。(クレジットカード必要)

AWS について
0から始めるAWS入門:概要
「AWS is 何」を3行でまとめてみるよ

Amazon WorkSpaces とは

環境構築を含め、下記のエントリが参考になると思います。

公式サイト
Amazon WorkSpacesを使った感想
Amazon WorkSpacesでWindows仮想デスクトップ環境を作成する (Windows 7 + Office 2013)

簡単に説明すると、amazon が用意してくれた windows を自由に使えるサービスです。

ただし、OS は windows server 2008 r2 datacenter です。(謎)
windows7 や windows10 のライセンスを持っていれば、そちらを使うことも可能なようですが。

AWSの学生サービスを受けて $150 を貰う

Amazon WorkSpaces は学生サービス対象外です。(追記2参照)
Amazon WorkSpaces はそれなりにお金がかかります、詳細は下記リンクを見て下さい。
料金表

ちょっと試してみるだけで高額なお金を請求されるのは嫌なので、学生の身分を利用してお金を貰おうと思います。
GitHub アカウントを登録して、.ac.jp 等の大学メールアドレスを登録するだけで amazon から $150 も貰えます。

詳しくは、下記のエントリを参考にすると良いでしょう。
AWS Educate を使ってみる

ルートアカウントの MFA を有効化

AWS を利用する上でのセキュリティ設定で、こいつを設定しないと WorkSpaces にはアクセス出来なかったです。
AWS のコンソールのホームに、「Identity and Access Management」という項目があるのでそこから設定しましょう。

WorkSpaces をセットアップ

資金調達も出来たので、いよいよ WorkSpaces をセットアップします。
AWS のコンソールホームに、「WorkSpaces」という項目があるのでそこからセットアップします。
下記のサイト通りにやれば恐らく上手く行くでしょう、自分は MFA の有効化を忘れてたので一日掛かりましたが。

Amazon WorkSpacesを使ってみる

ブラウザからアクセス出来るようにする

2016年11月18日 より、WorkSpaces にブラウザからアクセス出来るようになりました。
せっかくなのでその恩恵を受けましょう、下記のリンクにある設定をして下さい。

Amazon WorkSpacesがChrome,Firefoxのブラウザ利用に対応しました

仮想デスクトップを起動させ、ゲーム体験版をインストール

遂に windows が立ち上がったので、本来の目的であったwin向けのPCゲームのインストールを行います。
ここで体験版で検証を行う理由は、インストールディスクを WorkSpaces が認識することが出来ない為です。
インストールディスクを吸い出して WorkSpaces に転送すれば製品版もプレイ出来るのではないかと思いますが、 犯罪かもしれないのでちゃんと調べてた上で試してみようと思います。

今回インストールを試みたのは、下記2つのタイトルです。(適当に頭に思い浮かんだ奴です)

  • サノバウィッチ
  • 運命線上のφ

日本語アプリケーションを実行するには OS 設定を弄る必要があるみたいです。(追記参照)
早速ダウンロードしてみましたが解凍しても文字化けしてまうので、文字化けしない解凍ツールをダウンロードしました。 unar というやつです。

文字化けはしなくなりましたが、サノバウィッチは実行しようと思っても「文法エラーです」という情報量0のエラーが吐かれてしまいます。
また、運命線上のφについてはクリックしてもインストーラが起動しませんでした。
OS が windows server とかいう意味不明な奴だからでしょうか、非常に残念です。

まとめ

グラボ積んでる構成にしたら動きました。(追記3参照)
Amazon WebSpaces でwin向けのPCゲームは動かせませんでした、試したゲームが少ないのでもしかしたら動くゲームもあるかもしれないですが、このまま試し続けるなら OS を win7 等にして再チャレンジしようかなと思います。

自分のように MFA 設定を忘れて WorkSpaces にアクセス出来ないと嘆いている人が救われればと思います。

追記 (2016/11/23)

海外の windows で日本語アプリケーションを実行するには OS の設定を変更する必要があるみたいです。
下記リンクを参考に、日本語アプリケーションを実行出来るようにしました。

日本製じゃない Windows 7 で日本語のアプリケーションを使いたい

これでやっとゲームが動かせる!!っと思ったのですが、下記のグラフィック関連と思われるエラーが出てしまい動作しませんでした。

  • DirectXの初期化に失敗
  • ディスプレイアダプタの取得に失敗
  • メモリアクセス違反

一応 DirectX を最新版にしてみたりしたのですが、やはり結果は変わらず...。
次はグラボのデバイスドライバを最新にしてみようと思います。

追記2 (2016/12/2)

AWS の学生サービスを受けて $150 を貰う」についてですが、残念ながら Amazon WorkSpaces は対象外だったようです。

$150 の対象は、下記のサービスに限定されます。

AWS Config
AWS Data Pipeline
AWS Data Transfer
AWS Elastic Beanstalk
AWS IoT
AWS Key Management Service
AWS Lambda
AWS OpsWorks
AWS Storage Gateway
AWS Support (Basic)
Amazon AppStream
Amazon CloudFront
Amazon CloudSearch
Amazon DynamoDB
Amazon ElastiCache
Amazon Elastic Compute Cloud
Amazon Elastic File System
Amazon Elastic MapReduce
Amazon Elastic Transcoder
Amazon Glacier
Amazon Kinesis
Amazon Machine Learning
Amazon RDS Service
Amazon Redshift
Amazon Route 53
Amazon Simple EDI
Amazon Simple Email Service
Amazon Simple Notification Service
Amazon Simple Queue Service
Amazon Simple Storage Service
Amazon SimpleDB
Amazon Virtual Private Cloud

追記3 (2016/12/11)

Amazon Workspaces の Bundle の選択時に、グラフィックボートを積んだ「グラフィックス」を選択したところ、ゲームを動作させることが出来ました。
しかしこの Bundle は1時間で $1.75 (大体180円?)かかり、8時間動作させるだけで 1,500円 近く掛かってしまうのでPCゲームをやるのには向かないのではないかと思いました。

記事が修正だらけでかなり見にくくなってしまったので、近いうちに綺麗にまとめた記事を公開します。

FuelPHP で DBUnit 使ってみる

最近、自動テストの重要性に気が付き PHPUnit を導入しましたが、DB のデータを使ったテストが Rails のように上手く出来ないことに軽く絶望していました。
しかし、DBUnit なるイケてる拡張があるみたいなので試してみました。

ざっくり DBUnit とは

テストの度にテスト用DBに初期値入れたり、DBを初期化するのが面倒...。

でも DBUnit さえいれば!!!!テストの度に自動でDBを初期化してくれて、初期値入れるのも楽!!!!!!素敵!!!!!!!!!!

やったこと

  • DBUnit 拡張の導入
  • とりあえず動かす

DBUnit 拡張の導入

下記のサイトを丸パクりしましたので、この記事の内容も下記リンクの流れに沿っています。 DBUnit拡張を使ったFuelPHPのテストを考える

とりあえず動かす

まずは下記コマンドで、DB構築。
* FUEL_ENV=test oil r migrate
* FUEL_ENV=test oil r migrate --packages=auth

そして、APPPATH/config/test/db.php でテスト用のデータベースへアクセスする設定をする。

テスト環境のDB設定が終わったので、とりあえず初期データも投入せず DbTestCase を継承した状態でテストが動くか確認しました。
その結果、下記のエラーが出ました。

Error - Argument 1 passed to PHPUnit_Extensions_Database_AbstractTester::setDataSet() must be an instance of PHPUnit_Extensions_Database_DataSet_IDataSet, null given, called in /Users/test_user/fuel_test/fuel/vendor/phpunit/dbunit/src/Extensions/Database/TestCaseTrait.php on line 178 in DOCROOT/fuel/vendor/phpunit/dbunit/src/Extensions/Database/AbstractTester.php on line 88

なぜコピペしたのに動かないのでしょうか?

とりあえずエラー文的には setDataSet() は絶対定義しろ的なことが書いてあると思うので、からの setDataSet() を定義してみましたが、結果は変わらず。
よく見直してみると、 testcase.phpnamespace Fuel\Core; を入れるのを忘れていたのでちゃんと入れてテストを実行したところ、今度は次のようなエラーが出ました。

Fatal Error - Class 'DbTestCase' not found in APPPATH/tests/controller/test.php on line 7

困りました、not found と言われてしまってはどうしようも無いので、とりあえずさっきの状態に戻します。

ふと、 setDataSet() が問題なのでは無く、getDataSet() が空なのが問題なのでは無いかと思ったので、先程参考にしたサイトに書いてあったものをテーブル名だけ変えてコピペしてみたところ、なんと正常に動作しました。
大して難しくないところで余計な時間が取られてしまいました...。

しかし、namespace Fuel\Core; を入れてエラーが出てしまう事象については PHP への理解が足りないこともあって謎なので、「coreクラスの拡張」か何かでググってみようと思います。

まとめ

とりあえず動いたので、後は適当にググりながら Rails のようにイケイケなテストが書けると思います。
何か進展があればまた記事書きます。

FuelPHP の軽い感想

 私は今年の4月ごろからFuelPHPを触っていて、簡単なサイトを作ったりしています。 自分がFuelPHPを使う理由は、実行速度が早いからや、生PHPよりも管理しやすいコードが書けるからです (他のフレームワークはあまり触ったこと無いです)。 他に書いた経験のあるフレームワークRuby on Railsで、バイト先で使っています。

 今回は普段Railsを使ってる自分からみたFuelPHPの軽い感想を書いてみようと思います。

環境構築が楽

 FuelPHPはプロジェクトの雛形のzipファイルを公式サイトからダウンロードして解凍するだけで使えるので、環境構築がかなり楽です。 PHPが動作するサーバーではすぐに使うことができるので、お手軽感がいいですね。

Railsエンジニアがとっつきやすい

 全体的にRails感があり、Railsを触ったことがある人は特に戸惑うことなく弄れるのではないかと思います。 これはFuelPHPRailsをリスペクトしていることが強く影響しているのではないかと思います。 具体的には、コマンドの使い方やMVCを採用している点です。

 もちろんFuelPHPにも自動化テストがあるので、テストを書かないと死んでしまう人も安心して使えます。

日本語リファレンスが充実している

 FuelPHPは日本語リファレンスが充実しており、わからないことはリファレンスをみれば大体解決していました。 また、学習もしやすいよう体系的に学べる構成となっているので、フレームワークをあまり触れたことのない人にもオススメ出来ます。

 また、原因不明のエラー等も検索してみるとほとんどが解消されるのもいいところです。

まとめ

 FuelPHPのメリットは学習コストが低いことだと再認識しました。 小規模なプロジェクトでRailsに慣れていないのならば、FuelPHPを選択しても良いのではないかと思います。 個人の偏見入りまくりの雑な記事でしたが、最後まで読んでくださりありがとうございます。

スマホアプリのアイデアを出す

 世の中には普通に思いつきそうなアイデアや、誰も思いつかないようなアイデアを実現したスマホアプリがたくさんあります。 そこで、自分も何かアイデアを形にしたいと思ったので、実際にアプリを開発することにしました。

 しかし、普段からあまり自分のアイデアを考えることがなかったので、何を作れば良いのか思いつきませんでした。 ですので、まずは世の中のアプリにはどういうジャンルがあってどんなことが出来るのかというのを自分なりにまとめてみました。

目次

  • アプリのジャンル
  • どんなアプリを作ればいいか
  • アプリの操作対象
  • 世の中のアプリの例

アプリのジャンル

  • 健康
  • 音楽
  • 料理 グルメ
  • 植物
  • 写真 動画 (加工、管理)
  • 教育 学習
  • 育児
  • 生活
  • 地図
  • 情報収集 (ニュース、天気、交通状況等)
  • 情報整理 (見る予定のアニメ、待ち合わせの時間、持ってる本)
  • エンタメ
  • ファッション
  • ビジネス
  • 仕事効率化 (電卓、メモ帳、TODOリスト、リマインダー)
  • 会計 (お小遣い帳、家計簿)
  • コミュニケーション (SNS)
  • デジタルアート
  • 災害時用
  • クリエイティブ (作曲、小説、プログラミング)
  • ゲーム

どんなアプリを作ればいいか

  • 現実の物(行為)をアプリに置き換え (タイマー、塗り絵、じゃんけん、読書)
  • 流行を取り入れたもの (ポケモンがいる場所がわかるマップ)
  • 面倒なものを楽にしてくれる (自動化アプリ)
  • 悩みを解消してくれる (物を無くす、電車を乗り過ごす)
  • 知りたい情報が得られる (天気、電車の時刻、ファッション、マナー、SNS通知)
  • 時間が潰せる物 (単純なゲーム)
  • 決められた目標を達成する (スコアやレベル)
  • 欲求が満たせる (破壊欲求、自己顕示欲、女の子に会いたい欲求)

アプリの操作対象

 ゲームのようにスマホ内だけで完結するものもあれば、センサ等で取得した現実の情報とスマホアプリが連動しているものも多くあります。 アプリの操作対象というのは、現実とスマホのどちらからインプットし、どちらにアウトプットするのかということです。

世の中のアプリの例

 自分が便利だなーと思ったアプリです、3種類あげていますが特に関連性はありません。

まとめ

 世の中のアプリはジャンルや操作対象が違うだけで、大半は似たようなものばかりだと思います。 ですので、何を作るか迷ったらジャンルや操作対象を何にするか考えてみると良いかもしれません。

 当たり前のことを書き連ねましたが、何かの参考になればと思います。

学生プログラマはプログラミングバイトをしよう

 今回の記事に出てくる「学生プログラマ」には高校生は含まれておりません。高校生は労働基準法で勤務時間が制限されてしまう為、プログラミングバイトが難しいと思われるからです。

 しかし、100%不可能であるとは断言出来ないので、メンタルの強い方は挑戦してみてもいいかもしれません。(責任は取れません)

 

独学には限界がある

 プログラミングをしている学生さんは、独学や学校の授業でプログラミングを学んだことでしょう。自分で処理を考えて思った通りに動作した時は、何よりも気分が良い物だと思います。 

 しかし学生でプログラミングの勉強をしていると、下記のことに悩んだりしたことがあると思います。

  • 実際のシステムがどうコーディングされているのか
  • チームで開発をするときはどのように進めればよいのか
  • 自分のコードの書き方は本当に正しいのか  
  • 今の技術レベルは、業界的に見たらどれくらいなのか 

 そんな時は実際にIT企業にインターンやアルバイトに行き、現場のシステムやプロジェクトに触れてみることが良いと思います。

 自分の中の勝手なイメージですが、学生プログラマの方々は勉強会やコンテスト等には参加していても、プログラミングバイトをしている方は少なく思います。

 勉強会へ行くことは確かに大切ですが、実際に利益を生んでいるシステムの開発に関わることはより価値のある経験だと考えています。

 

プログラミングバイトはどうやって探す?

 プログラミングのバイトは「バイト探しはan」「マイナビバイト」等の普通のアルバイト求人サイトで応募しても、学生である以上ほとんど受かりません。

 自分は高校三年の冬に三社のIT企業に応募しましたが、悲しいことに三社とも面接さえ受けさせてもらえませんでした。常識的に考えれば、高校生が業務で役に立つとは思えないので正しい判断であると言えますが。

 完全に心が折れていましたが、Twitter で上記の経験を嘆いていると優しいフォロワーさんが素晴らしいサイトを教えてくれました。

 そのサイトは Wantedly というもので、学生プログラマのアルバイトやインターンを募集している企業が多く集まっているそうです。

www.wantedly.com

 早速このサイトである企業に応募してみました。すると、その企業の方は自分と会って話がしたいと言って下さったのです。学生というだけで話させて貰えない経験を3回もしていたので、すごく嬉しかったです。

 面接は新宿のカフェで行われ、IT関係で働いているプロの方といろいろなお話をしました。結果的に不採用となってしまいましたが、プロの方とカフェでお話するのはとても貴重な経験で楽しかったです。

 その後立て続けに7社の企業に応募し、2社から内定を頂くことが出来ました。このような経緯を経て、自分は現在web系の企業でアルバイトとして働いています。

 

学校に行きながらいつ働いているのか

 自分は平日週5日、放課後の 18:00 - 23:00 に働いています。また、自宅での作業も許可されているので、働くのが苦だと感じたことは一度もありません。

 全ての企業がこうであるとは言えませんが、Wantedly に登録している企業のほとんどは相談してみれば遅い時間帯であっても働かせてもらうことが出来ると思います。

 

まとめ

 ホリエモンビル・ゲイツも、学生時代はプログラミングバイトをしていたそうです。プログラミングバイトは技術に関してだけではなく、仕事に対する姿勢やエンジニアとしての物の考え方を身につけることもできます。また、周りの人が大人ばかりなので、人間的にも大きく成長出来ます。

 今の自分よりも更に上を目指したいと思っている学生プログラマの皆さんは、是非一度プログラミングバイトを経験してみると良いでしょう。