2014年12月31日水曜日

ディスクのクリーンアップ

Windows機のCドライブの残量が不足していたので、原因を調べていると、「使用容量」と、「Cドライブ内部のファイルの合計容量」が一致しないことがわかりました。

どうやら、システムファイルの一部などは表示されないようです。(ここより)

対処として、ディスクのクリーンアップがあります。ディスクのプロパティから「ディスクのクリーンアップ」を選択すると実行できます。

下から「システム ファイルのクリーンアップ」を選ぶと、より多くのファイルを削除できます。是非試して下さい。

基本的に古いファイルはいらないと思うので、いらなそうなファイルを削除します。

僕の場合は、5GBほど空き容量が増加しました。

ちなみに、CCleanerというアプリケーションもあり、似たようなことが行えます。僕はこれを定期的に利用しているので、5GBと少なめだったのかもしれません。

ただ、必要なファイルはバックアップを取るなど、しっかり保護してから使ってくださいね。

2014年12月25日木曜日

CODE VS 4.0に参加したい初心者のための補足ドキュメント

RECRUIT社主催の、CODE VS4.0というコンテストがあり、現在予選が開催されています。

12/22〜1/31の間にあるゲームを実行するAIを組み、サンプルのAIと対戦します。そのランキングの上位8人が決勝へ進出できます。
参加は社会人でも可能で、かなりレベルが高そうです。。。

内容はとても面白そうで、だれもがやってみたいと思うんじゃないかと思います。参加方法およびクライアントのエラーについて、いくつか困った点があったので、対処を紹介します。
ゲームのルールなどは、公式ページを参照してください。

僕の環境はMac, Xcode 6, C言語です。

エントリー後、クライアントをダウンロードできます。クライアントは自分のAI(実行ファイル)を指定すると、ゲームを実行するプログラムです。

<CODE VSにつながらない>
Google検索から飛ぶと、つながりません。http://をhttps://にするか、CODE VS 4.0のページからいろいろ移動するとつながります。

<Xcode, クライアント操作>
XcodeのNew Project → OSX → Command Line Tool
コーディング後、ビルドすると、
/Users/(ユーザー名)/Library/Developer/Xcode/DerivedData/(プロジェクト名)-(ハッシュタグ)/Build/Products/Debug/(プロジェクト名)
に実行ファイルが保存されます。
これをクライアントで読み込んで、実行させます。

「ローカル実行」はいつでも実行できますが、チェックを外すと、一時間に一回しか実行できなくなります(ランキングに反映される)

終わった時でも、Stopで中断した時でも、そこまでの履歴を「ローカル履歴」もしくは「履歴」で確認することができます(わりとかっこいい)

<クライアントのエラー>
「プロセスの起動に失敗しました」……ファイルのアドレスのエラーです。「ファイルを選ぶ」からファイルを選ぶと" "がつきますが、これもはずさないとこのエラーが出ます

(実行しても何もでない)……おそらく、出力形式が間違っています。サンプルコードを見ながら、直してみてください。僕の場合、ID出力をinputの後にしていたためこれが起こりました。起動と同時にIDを標準出力しなければなりません。

"You have not enough resources"……読んでそのまま、資源不足です。

"L1:[(内容)]"……不正な入力です([ ]内部が内容)


僕が把握してるのはこんなもんです!頑張りましょう!

2014年12月23日火曜日

MIPSアーキテクチャにおける命令

ほとんど「計算機工学」の講義の受け売りですが、MIPSアーキテクチャについて
メモ程度に、軽く書きます。
内容も微妙ですので、自分用のメモみたいな記事になってしまいました。また、HTMLもぐちゃぐちゃです。

でも、せっかく書いたので公開します

MIPSの命令セットは、

MIPS "Green Sheet"

からダウンロードできます。

MIPSは3オペランド命令のみ実行できます。たとえば加算命令adduにおいて、
    addu $t0, $s1, $s2
演算対象である$s1, $s2と、結果の代入先$t0はすべてオペランド(operand)と呼ばれます。MIPSにおいては、このオペランドが必ず3つです。

演算はレジスタに保存された値しかできません。即値に対して演算を行うには、レジスタにロードする必要があります。

MIPSの命令コードは必ず32ビットです

MIPSのレジスタは32個あり、GreenSheetの1ページ目右下に示されるように、零レジスタ、一時変数用レジスタ、OS用レジスタなど、用途が割り当てられています。

<命令コードの形式>
アセンブリ言語を数値化したものを命令コードという

命令により、レジスタ型命令(R)、即値型命令(I)、ジャンプ型命令(J)に分類される


 ・R形式
内容:           op   rs   rt   rd   shamt   funct
ビット数:     6     5    5    5       5         6

op……オペレータ(演算子)
rs,rt……演算対象のレジスタ
rd……計算結果の代入先レジスタ(destination operand)
shamt……シフト命令におけるシフト量
funct……演算の種類(GreenSheetの2ページ目は見にくいので、MIPS Instruction Referenceを参照)

R形式の時、opは必ず0b000000

 ・I形式
内容:           op   rs   rt   const
ビット数:     6     5    5     16

即値(定数)を表現できる
rsはR形式でのrsだが、rtはR形式でのrd
constは定数で、16ビットまで表現可能

・J形式
内容:           op   target
ビット数:     6       26

targetでジャンプ先アドレスを表す
opはjなら2(0b000010)、jalなら3(0b000011)

<基本命令>
命令の右端にiがつくとimmediateの略であり、I形式であることを示します。
ここではiのつかないものを示します

lw $t0, 1200($t1)
32ビット読み込み(load word)
I形式で、opは35

add $t0, $t1, $t2
$t1と$t2を加算した結果を$t0に代入
加算前に符号拡張される。すなわち、桁数が足りない場合、最上位ビットをそれより上のビットに対してコピーする
R形式で、opは32

sub $t0, $t1, $t2
$t1-$t2の結果を$t0に代入
R形式で、opは34

lui $t0
上位16ビットにロード(load upper immediate)
下位16ビットは0で埋める
I形式

sll $
左シフト(shift left logical)
下位ビットは0で埋める

srl $
右シフト(shift right logical)
上位ビットは符号ビットで埋める

slt $s1, $s2, $s3
大小比較を行う(set on less than)
C言語では
if( $s2 < $s3){ $s1 = 1; }else{ $s1 = 0;}
のようなかんじ

beq $t0, $t1, label
$t0と$t1が等しければlabelへ分岐(branch if equal)

bne $t0, $t1, label
$t0と$t1が等しければlabelへ分岐(branch if not equal)

j label
labelへジャンプ
J形式


<擬似命令>
実行可能なコードの組み合わせで実行する処理を、アセンブリにおいてはひとつの命令のように表記することができます

・大きな即値をレジスタに代入するとき
*li (load immediate)
    lui $s0, 61
    ori $s0, $s0, 2304

これで代入したい即値xの上位16ビット:61 = 0b0000000000111101、および下位16ビット:2304 = 0b0000100100000000を用いて、
$s0 = 00000000001111010000100100000000 = xを実現できます

・ループする時
    Loop: (内容)
     j      Loop

・分岐するとき
    beq $t0, $t1, label1
    j label2
    label1: (if)
    label2: (else)

これを

・絶対値を求めるとき
 *標準(分岐を用いる)
    slt $t0, $t1, $zero
    beq $t0, $zero, label
    sub $t0, $zero, $t1
    j Exit
    label: addi $t0, $zero, $t1
    Exit:





*高速ver
    srl $t2, $t1, 31
    xor $t0, $t0, $t1
    sub $t0, $t0, $t2




これの高速verを機械語にすると
000000 00000 01001 11111 00000 000010
000000 01000 01001 01000 00000 100110
000000 01000 01010 01000 00000 100010


ここで、srlは即値を用いているように見えますが、shamtに代入しているため、R形式を用います。また、rdは00000にしておきます。




・ビット反転
いわゆるNOT演算
3オペランド命令として、norなどで代用します。
    nor $t0, $t1, $zero

これで$t0への$t1のビット反転結果を代入を実現できます。


・変数コピー
    add $t0, $t1, $zero

これで$t1への$t0のコピーを実現できます。



・なにもしないとき
何もしない命令nop(no operation)が用意されています。
nopの命令コードは00000000000000000000000000000000です。
すなわち、R形式であり、
    sll $zero, $zero, $zero
を表します。

中途半端ですがこのへんで!




CODE THANKS FESTIVALに参加してきたよ


リクルートの主催する、CODE THANKS FESTIVAL 2014に参加してきました。場所は東京のテレコムセンタービルです。
僕にとっては初めての競技プログラミングで、とても難しかった……

CODE FESTIVALと並行した大会で、予選のあと、本戦に残れなかった人のうちの上位の人だけが参加可能でした。
問題は
http://code-thanks-festival-2014-b-open.contest.atcoder.jp/
から見ることができます。僕の解答で良ければ、コードもお渡しします(コンテスト中のものなので、かなり汚いです)

今回のコンテストは3hで8問も出されるので、全部解ける人なんていないと思っていたら・・・2人いました。すごいです・・・
僕は結局8問中5問(A〜E)でした。五問以上解けた人は50人/85人程度でしたので、まあ微妙な感じです。ただ5問以上とけるとトートバッグがもらえました笑

今回のコンテストはなによりも待遇が素晴らしく、交通費全額支給(¥28000程度)、昼食(叙々苑焼肉弁当)つき、(謎のTシャツ支給)、お菓子・ドリンク食べ放題で、懇親会では寿司などビュッフェ形式で出てきました。最高です。


懇親会のときに同時開催されたものが、
  ・DDR(家庭用、マット使用)大会
  ・太鼓の達人(家庭用のたいこ使用)大会
  ・書道コーディング(書道で美しいコードを書くコンテスト)
でした。

上の写真が書道コーディングの作品たちです。

それで、結論から言うと、書道コーディングでAtCoderの社長さん(高橋直大さん)から大賞を頂き、Amazonギフトカード¥3000までもらいました。僕の作品(?)は、
です。画力0です。
こちらは一人しか選ばれないので、非常に栄誉ある賞でとても嬉しいです笑

また、このとき高橋直大さんに、プログラミングコンテストチャレンジブックの表紙の裏に、サインも頂きました笑
世界で三番目にアルゴリズムプログラミングが出来る人・・・やばいです

懇親会などでフォロワーが増え、なぜか京都の知り合いも増え、いい日でした。

ついでに東京観光をして、等身大ガンダムをみたりした話はまたのちほど。

2014年12月22日月曜日

iOS 8.1.2にアップデート→LINE通知が来ない不具合

iOSを8.1.2にアップデートしたら、LINE通知が来なくなりました。

原因は、勝手にLINEの設定で通知がOFFになっていたためでした。

iPhone側の通知設定ではなく、LINE側の設定です。

対処法は、LINEを開いてその他→設定→通知から、通知をONにし、更に「新規メッセージ」「メッセージ内容を表示」もONにします

これで元通り、プッシュ通知が来るようになります。

LINE側の設定が変わったのは不思議で、発見がかなり遅れました。

どうぞ参考にしてください。

※追記(2014/12/24)
同時に、もっと多くの設定が書き換えられていました。

通話の着信設定がOFFになっており、そのままではLINE通話が来ません。通話したい場合は、ONにしておくのも忘れないようにしてください。

2014年12月11日木曜日

Swiftでの開発について


2つ前の記事iOS Developer Programについて書きました。

つまり手順を省略して書くと、Xcode(無料)さえあればSwift開発できるけど、実機デバッグするには有料の登録が必要、ということです



Swiftはまだ新しい言語で、書ける人は少ない、とおもいきや、めっちゃ簡単に書ける言語でびっくりです!
ドキュメントははじめこそ英語しかなかったですが、もう日本語もいっぱいでていて、初心者でも十分書き始められると思います!

ただ、わざわざSwiftに手を出そうとしてる人はきっとCぐらい書けると思うので、そういう人向けのドキュメントを紹介します。
(僕もまとめようかと思いましたが、既存のドキュメントで十分に揃っていますので、今後適宜、詰まった所や詰まりやすいところをご紹介していこうと思います)

準備は上記の通り、Xcodeだけです!



まずSwiftの入門として、僕がプログラミングを始めた中高時代にプログラミングを教えてくれていた先輩の記事
CAMPHOR- Tech Blog
すごく教えるのがうまい方で、とてもわかりやすいです。ただ、ToDoアプリを作ろう、のほうが少しまだエラーがあります。

基礎がわかったら、応用として、
Swift Docs
がおすすめです。
逆引きSwiftが強いです。正直、コピペだけで簡単なアプリが作れます



オブジェクト志向については別で学ぶ必要があるかもしれませんが、この2つでかなりのことができるようになると思います。


以下、少しだけ補足説明を。(CAMPHOR- Tech Blogを読み終わったあたりで読み返してみてください)



※Optional型について
Swift独自の特徴としてOptional型の変数があります。
var a: Int = 5
var a: Int? = 5
nil(空データ)をいれられるかどうかの違いですが、Swiftでは、変数を空にできないためにある仕様です。バグ防止のための仕様みたいですが、Cで言う"int a;"みたいなことができないことにはじめは戸惑うかもしれません

※CGFloatみたいな特殊な型について
オブジェクト志向なので、変な名前の構造体やクラスがあるのは当然のことですが、CGFloatみたいな、特殊な変数の型もあります。Objective-Cをしていないと戸惑うと思います(僕もそうでした)
これ実は裏ではtypedefされていて、たとえばCGFloatは64bitsシステムならdouble、32bitsシステムならfloatを表します。
怯まずに進みましょう。

2014年12月9日火曜日

かっこいい名前


あるプログラミングのコンテスト(?)に参加するにあたり、チーム名を考える機会がありました。

”かっこいいチーム名”を目指して多くの議論を交わしましたが、その中で気づいたこと。なまえのかっこよさの要素

・字面のかっこよさ
・発音のかっこよさ
・意味のかっこよさ

単純に「かっこいい」といっても、この3つの観点があること。

大文字小文字でかっこよさが変わるのが字面のかっこよさのいい例です
Appleは、かじられた後がbite-byteのかけことばだったり、リンゴはキリスト教圏で知恵の実の象徴だったりするのがかっこよさを更に増しています
発音のかっこよさは…考えたら大体わかるでしょう!

この3つの要素全て満たせるような名前が理想です。

日本人から見たらたいていの英語はかっこいいですが、よく考えてみると日本人の書く英語に感動させられることはあまりありません。"That's OK, all right."と"You have my permission!"との違いです。
ここのNAVERまとめに、かっこいい英語表現がまとめられています。かっこいい・・・

他にかっこいい言語として、ドイツ語が有名です。
”Weiß Schwarz”は「白黒」という意味で、字面も意味もさほどかっこ良くなくても、ヴァイスシュヴァルツという発音にはかっこよさを感じます。
ここにドイツ語の発音や意味などがまとめられています。こちらもかっこいい


考えてるうち、リッチマン・プアウーマンを思い出しました。記事上部の画像もリッチマン・プアウーマンのものです

かっこ良すぎて憧れます。
リッチマンプアウーマンでは、まずはじめはNext Innovationであり、次はWONDER WALLになりました。
今回のテーマとは関係ないですが、Innovativeな開発で世界を変えたい、ってほんとに思ってます笑


最後に、かっこいいチーム名といえば、バンドがあります。
バンド名やグループ名の由来のNAVERまとめがキレイにまとめられています。


参考資料はいくつもあり、かっこいい候補はいくつもあるのに、いざとなると決まらないものなんですよね・・・



iOS Developer Programへの参加


iOS Developer Programに登録しました。
登録がややわかりにくかったので、まとめておきます。

年会費¥7800かと思えば税抜で、税込¥8424になります。消費税8%を久々に恨みました……
それにアプリで¥7800も稼げると思えないので、明らかに赤字です……

Apple Developer Programへの登録がまだの人は、ここから登録してください。こちらは無料で、登録するとXcodeがダウンロードできるようになり、Objective-CSwiftも、ひと通り開発できるようになります。OSXのアプリもiOSのアプリも開発できます。
また、iPhoneのSimulatorも付属しているので、実際に動かして試すこともできます。

ただ、iOS Developer Programが有料、それもかなり高額な理由にはわけがあります。

まず1つ目は、Simulatorではハードウェアに制限があります。GPS情報はある地点に固定されていて、カメラを起動しようとするとエラーで終了します。加速度センサなども同様です。

2つ目は、アプリをiPhoneに転送出来ず、Simulatorで動かすことしかできません。登録すると、Xcodeから直接端末転送して、動かすことができます。カメラなどを使うにはこの方法しかありません。

3つ目は、Apple Storeにアプリを並べられません。


iOS Developer Programの登録はわかりにくかったので、簡単にまとめます。

まずここからiOS Developer Programに登録します。ギフトカードのみ、またはクレジットカードのみでの支払いが可能です。

登録後、Apple Developerのページの右上"Member Center"から"Your Account"→"Legal Agreements"に
iOS Developer Program License Agreement
があることを確認して下さい。

確認できたら、証明書を発行してもらう作業が必要です。
ここのサイトを見ながら、発行し、登録しましょう

ここを見ながらApp IDの取得、デバイスの登録を行います。iOS Dec Centerのページから行います。
ただし、OrganizerからDevicesを見よ、と書いてありますが、Xcode 6ではDevicesはWindowメニューにOrganizerと並列して存在します。

しかし、Provisioningファイルの読み込みがうまくいきませんでした。Xcodeの仕様がかわったためのようです。
ここを参照してみてください。とりあえずXcodeのPreferenceからApple IDにログインし、右下のView Detailsから詳細をみて、さっき作ったprofileが入っていればOKです


以上で作業は完了です。とても複雑ですね。

Xcodeの左上のボタンから、デバッグ先を接続中のiPhoneにできます。
プロファイルのエラーおこっても、何度も繰り返していると治りましたので、なんども繰り返してみてください

Swift頑張ります〜〜7800円〜〜