コンソールでテトリス

この記事はAdvent Calendar 2014 18日目の記事です。
http://www.adventar.org/calendars/638

どうも44です。
今回はWebから前回、解説したC#のプログラムを動かすという予定でしたが間に合いませんでした、
なので今回は私が作成したコンソール上で動くテトリスについて紹介したいと思います。

なぜコンソールなのかといいますと、私は今年の4月に専門学校に入学しC言語の勉強を始めました。
C言語を初めて一ヶ月がたち制御文を一通り習った頃、クラスの一部でテトリスを作ってみようということになりました。
その頃は、ミノの回転やミノを消す処理を実装できず諦めてしまいました。いつかリベンジしたいと思い10月ごろに完成させることができました。
そのテトリスのソースコードの一部をお見せしたいと思います。

ゲーム画面

タイトル画面
titleプレイ画面bodyゲームオーバー画面gameover

ソースコード

画面表示

上のようにpurintfやputsで■と□を表示して画面を作っています。

見てわかるようにタイトル画面とゲームオーバー画面のコードです。
putsで無理やり書いてます。これ以上の方法が思いつきませんでした。
ですがある意味とても見やすい(てかそのまま)なコードじゃないのかなと自分では思っています。

このプログラムには問題点があります。
それは画面更新によるちらつきが酷いことです。
画面更新時にSystem(“CLS”);しているので実装上仕方がないのかなと思っています。
上記の問題をcurses.hをつかって解決しようと今作り直しているところです。
他にもインベーダやブロック崩しなどをコンソール上で作りたいと思ってますので出来ましたら
記事を書きたいと思います。

最後に

私がアドベントカレンダーで書くのは今回で最後になると思います。
これからもちょこちょこと記事を書こうと思っているので、見てくださると嬉しいです。
ご覧いただきありがとうございました。

SCSSでモダンなサイトデザインを

この記事はAdvent Calendar 2014 N日目の記事です。
http://www.adventar.org/calendars/638

今の一年生がいずれこの記事を見てくれればと思って書いてます。

CSSの問題点

こんなツイートを表示するHTMLがあったとします。

それに対応するCSSもあります。

なにがCSSの嫌なところかというと、何度も.tweetを書くし子要素になってくると.tweet .tool-box aとかアホみたいに書く必要があります。.tweetの名前が変わると全部修正する必要があります。面倒ですよね。

SCSS

これをSCSSという言語で書き直すとこんなふうになります。

大きく見て分かるのは、入れ子になってます。さらに$から始まる変数が使用されています。mixinという関数のような仕組みが有ります。

SCSSはCSSに変換することができるので、これを変換すると上のCSSとほぼ同じ内容になります。


SCSSを実際に使うときは、以下を使えば良いかと思います。

jsfiddleという学習サイトがあります。
開けば、HTMLとJavaScriptとCSSを書く箱が出てきます。htmlとかheadとかbodyタグ無しにHTMLを書いて、それに対して簡単にカスタムできます。
http://jsfiddle.net/
左のメニューのLanguagesからCSSをSCSSに変更可能です。

SCSSファイルを編集すると自動的にCSSに変換するソフトも有りますが使用方法などは他所に任せたいと思います。

レッツSCSS!

Vagrantを使ってみる。VagrantでWeb開発

この記事はAdvent Calendar 2014 13日目の記事です。
http://www.adventar.org/calendars/638

初めに

Web開発するときの問題って何がありますか?
Apacheのバージョン、PHPのバージョン、必要なモジュール、他のコンポーネント…
本番環境と開発環境が違うなどなど。
この問題を解決する方法を見つけました。

開発専用のOSを仮想として準備してあげれば…

よくあるのが本番環境はLinuxでApacheのバージョンはx.xでPHPは5.xなどのようなパターン
ホストPCにそれに合う環境が入ってるとは限らないので、
仮想に作ってあげればWebアプリごとに準備できます。
でもインスタンス一つ立ち上げるにもウィザードがあり作るのが負担になりますよね

Vagrantならコマンド一つでLinux準備できます

このVagrantとは、
開発を行うときの様々な依存や設定作業から開発者を開放します。
それはチームで開発する際も同様です。
誰かがVagrantfileを作ってしまえばvagrant upを行うだけで、インストールされ、設定されます。
つまり私のマシンなら動く というバグは消えるのです。

Vagrantは、インフラ管理スクリプトの開発/テストも行うことも出来ます。
シェルスクリプト、Chef cookbooks、Puppet modulesなどのテストを行うことも出来ます。
テストを行ったら、AWSなどのクラウド環境に流し込むことができます。

インストール

こちらからダウンロードしてインストールすればOK
https://www.vagrantup.com/downloads.html

RubyとVirtualBoxが必要になります。

使い方

とりあえず動かしてみます。
適当なディレクトリを作って、

もうこれだけでUbuntuが動きます。
sshするなら、

一通り遊んだら

で生成されたデータを全て消すことができます。

とりあえずわからないことあったらドキュメント読めばいいよ!

ここに日本語でドキュメント書いてます。
http://lab.raqda.com/vagrant/index.html

こちらはたぶん公式ドキュメントです。
https://docs.vagrantup.com/v2/

Web環境作ってみましょう

まず必須要件として
* Apache2が稼働している。
* 127.0.0.1:1080でアクセスできる。
* [project Direcoty]/www でDocument Rootにアクセスできる。
これらの要件を満たすように作っていきましょう。

apache2の自動インストール

vagrantにはprovisionという機能があり、
指定したスクリプトを実行することができるのでそれ使います。

まずはvagrant projectの作成

  • 起動時に実行するファイルを作ります。 touch bootstrap.sh

Vagrantfileの編集

これで設定は終わりです。
後は

//document rootにファイルが無いので
echo index >> www/index.html
などをしてファイルを作ってあげれば・・・

http://127.0.0.1:1080/ でアクセスできました。

今回は以上です。

Arduinoでビンゴマシーン②

この記事はAdvent Calendar 2014 11日目の記事です。
http://www.adventar.org/calendars/638

こんばんは、44です。
今回はC#を使って番号管理とランダムで番号生成、Arduinoへのシリアル通信をしたいと思います。

ランダム

まずは番号管理とランダムで番号生成について解説したいと思います。

14行目のcRandom.Next(1,75)で1~75までの値をランダムで取ります。取り出した値がiに含まれるかをi.where(elem => elem == Num).Count.Equals(0)で調べます。
where(elem => elem == Num)ではiの中のNumと同じ要素を取り出します。続いて.Count()では取り出した要素の数を調べます。
20~22行はシリアル通信の方で解説します。

シリアル通信

各行の内容などはコメントに書いてある通りです。
ポート名は今回はCOM4と指定したのですがおいおい接続されているポートを所得して指定したいと思っています。

次回はWebの処理の紹介をしたいと思います。

以下に今回のコードの完全版を載せておきます。

RC4とか

実装しようと思ってました。
WEPとかWPAとかで使われてるらしいので、
知ってるとベンリかなと思い立って、
拙い頭では思いのほか理解に時間かかって、
今日投稿してくれてるし別に遅れてもいいかな。
なんて思ってコード書いたり、書きなおしたり、書いたり。
あと数時間かかりそうだったので、諦めて記事書くことにしました。

この記事はAdvent Calendar 2014 10日目の記事です。
http://www.adventar.org/calendars/638

一応RC4の簡単な説明
-特に関係ないので読み飛ばして下さい-


RC4(ARCFOUR)とはRSA Data Security社のロナルド・リン・リベスト(Ronald Linn Rivest)さんによって開発された可変長鍵のストリーム暗号。
RCは「リベスト暗号(Rivest Cipher)」の略、あるいは「ロンのコード(Ron’s Code)」の略とされているらしい。(ちなみに開発者としてRSAのRも。ちなみにMD2,MD4,MD5の開発者。)
WEPって何?ストリーム暗号って何?共通鍵暗号って何?
とかはセキュリティのスペシャリストの人にでも聞いて下さい(丸投げ)


公式は認めてないけど1994年にソースコードがインターネット上に匿名で流された(ARC4(Alleged RC4) や arcfourと呼ばれる)アルゴリズムを参考にしました。

==========Algorithm==========


KSA(K):
for i = 0 to N − 1 do
S[i] ← i
end for
j ← 0
for i = 0 to N − 1 do
j ← j + S[i] + K[i mod l]
Swap S[i] and S[j]
end for

PRGA(K):
i ← 0
j ← 0
S ← KSA(K)
loop
i ← i + 1
j ← j + S[i]
Swap S[i] and S[j]
Output Z ← S[S[i] + S[j]]
end loop


簡単に説明すると、
KSAは鍵を初期化ベクトルというもので疑似乱数を作るためのハッシュテーブル(?)的なものを初期化するアルゴリズム、
PRGAはそれを用いて擬似乱数を作るやつです。ちなみにこれをキーストリームと言うらしいです。
擬似乱数なので、やはり偏りとかあったりなので、そこが弱点だったりするらしいです。
次があればそこら辺も書ければなあと思います。
擬似乱数じゃないバーナム暗号とかあるらしいですけど、基本情報止まりの自分にはさっぱりなので
詳しいことはやはりセキュリティのスペシャリストに(以下略

ちゃんと説明できる気がしないのであとはこれを見て下さい。(丸投げ

英語版のウィキペディアにもわりと詳しく載っているので資料としては良かったです。

完成してないので、進捗ダメですなので、
あとは時間かかったトコロとか、悩んでいたトコロとか、ベンリかなとか、ちょっと書きます。
一応雑談ということで

・JSでのビット演算がちょっと良くわからなかった問題。

Chromeで2進数の文字リテラルが使えないんですよね。(火狐なら使えるとか
10101100 ^ 11010011のXORが使いたいとき
(parseInt(10101100,2) ^ parseInt(11010011,2)).toString(2)
みたいにイチイチ10進数にすれば解決したんですが、他にやりかたあるなら教えて下さい。
というか、
そもそもそんなにビット演算とかする言語でもないのかもしれないけど、
FileAPIとかでバイナリとか全然いじれるし、わりと楽しいので、
バイナリいじりましょう。JSで。

・一行で変数入れ替え
B = [A, A = B][0];
配列作ってるだけですけど、ちょっと感動したので。

JSでyieldが上手いこと動かなかったのですが、
yield無しで動かせばなんとかなりそうなので、完成したらカレンダー埋まってないところにねじ込んでおこうと思ってます。
ジェネレータ便利そう。

OpenCVが動かなかったり。
Gitが大変なことになったり。
TwitterAPI楽しい。
そんな今日この頃なので、いつ完成するかわからない状況ですが、進捗あったらまた書きます。

CentOS7でnbd moduleが見つからない

OpenStackで”No valid host was found”と出てインスタンスが立ち上がらなかった。

原因を調べていくとNBDが存在しないということなので今回はモジュールの追加を行います。

nbd moduleって何?

NBD(Network Block Device)とは、
他のマシンや自分のマシンに存在するブロックデバイスをマウントするためのデバイスです。
他のマシンに存在してるブロックデバイスをネットワーク経由でマウントすることが可能になります。
このデバイス自体はファイルシステムに関係せずマウントすることができます。

nbd moduleをビルドして入れる

デフォルトではnbd moduleが入っていないみたいなので、自分でビルドして入れます。

この作業はrootで行います。
$ su –

まずはじめにkernelのバージョンを確認します。

今回私の環境では 3.10.0-123.el7.x86_64 です。

これでNBDが使えるようになります。

在 CentOS 6 使用 qemu-nbd 掛載 Disk Image

OpenStackでNo valid host was foundが出る

OpenStackで”No valid host was found”というメッセージが出た場合

このメッセージに関しては問題を確定することが困難です
(OpenStack側のログを見ても有力な情報は出ないので)

ですので、

という感じでログを確認するのが一番早く解決出来ると思います。

UNITY会学習講座 第一回

この記事はAdvent Calendar 2014 9日目の記事です。
http://www.adventar.org/calendars/638
Advent Calendarに便乗して第一回UNITY会報を刊行します。

今回は技術的な話でなく、素人2年生がいかにしてUNITYを学習したか、その参考資料を紹介します。

・ドットインストール様
http://dotinstall.com/lessons/basic_unity

動画で学べるIT学習サイト。1回5分程度でさっくり学習できます。

・テラシュールブログ様
http://tsubakit1.hateblo.jp/

旧テラシュールウェア。様々な実装サンプルが掲載されています。ネットワークにも対応。

・公式リファレンス
http://docs-jp.unity3d.com/Documentation/Manual/index.html

実は日本語リファレンスもあります。どこにも情報がなければここを読みましょう。

この御三家にはお世話になりました。書籍なんて必要ありません。

今回はあまり時間もないのでこれで〆ます。
ありがとうございました。


“まずは、クソゲーから。”
———ITC UNITY会

モテないし、Androidアプリを作ってみる

この記事はAdvent Calendar 2014 8日目の記事です。
http://www.adventar.org/calendars/638

この土日でAndroidアプリの勉強をしましたよ。
何が出来たってわけでもないですけど、とりあえず報告します。

Androidアプリを作るのって難しいんじゃないの?

「なんか環境作るだけで大変そう」
「そもそもJavaを知らないし」
「無理だよそんなの……。見たことも聞いたこともないのに、できるわけないよ……!」

そう思ってる人も多いと思います。

安心してください、大体合ってます。
土日使った割には何の成果も得られませんでした。

こんな感じでコードを書いていくみたいです。
この時点で何やってっか分かんないでしょう?…………いやもうマジで分かんないです。
これに加えてレイアウト用のXMLファイルを用意します。そっちはAndroid Studioを使えばある程度GUIで楽に出来るみたいです。


勉強するにあたって、この参考書を使うことにしました。
Androidアプリ開発についてかなり詳しく書かれています。
この赤い魔本にはAndroidの仕組みからSQLiteやGoogleMapの利用法まで幅広く記載されています。
他のAndroid関連本に比べてかなり厚い。ロベールより少し薄いくらい。
心の力が足りないと読み切るのは厳しいと思います。

とりあえず今こんな感じです。
Screenshot_2014-12-08-02-45-23
まぁぼちぼち進めていくことにします。

次の報告は完成したときにでも。

Linux(Ubuntu)で削除したファイルの復元

この記事はAdvent Calendar 2014 7日目の記事です。
http://www.adventar.org/calendars/638

タイトルからだいたい察せるとは思うが今あったことを話すぜ…

今日も元気よく深夜コーディングを行っていたわけだ…

Scala万歳!!とか言いながらいつも通り気持よくコードを書いていたわけだ…

一部のファイルをコピーするときにエラーが出て、
古いバージョンと新しいバージョンが出来てしまったらしい…

オレはすぐさまrm -r assetを叩いた…

なんてこったい!!!!
新しいバージョンも巻き込まれて消えてるじゃねーか!!!!!!

ファイルパス確認しときゃよかった!!!!なんでDropbox入れてなかったんだこのファイル!!!

現状維持

悩んでいても仕方ないです。
今回の環境では仮想で動かしていたので、すぐさま強制的に電源を落としHDDにリードオンリー属性を付けました。Vmwareの仮想マシンでリードオンリーをつけると、変更はできるけどコミットはされないみたいな感じになるそうです。

インストール

そして、ファイル復元パッケージをインストール

復元

復元するファイルが削除されたUnix時間が必要になるので、だいたい計算してから実行!

最後のコマンドを発行すると、カレントディレクトリに復元可能ファイルがずらずら出てきます

まとめ

Dropbox使え