投稿

2012の投稿を表示しています

Nexus7の人柱に、俺はなる!!

イメージ
ついに買いましたNexus7!! 初期設定すげぇ簡単すぎて怖くなるレベルでした。 だって、クレカ登録してGoogleアカウント同期するだけなんだもの。 個人情報を掌握した企業の強さ。。。 クレカ登録したら2000円分のGooglePlayで使えるマネーが貰えちゃうのでかなり得した気分。 ネット上のコンテンツに金を払うっていうのにはまだ抵抗があったけど、 この2000円で勢いづいて電子書籍とか買ってしまうかも。 電子書籍で思い出したがLPICがLINUX教科書をフリーダウンロード始めたとのことで、ダウンロードしてみた。 EPUB形式とPDFで配布してます。 →  http://www.lpi.or.jp/linuxtext/text.shtml ここで落としたEPUBはUSB経由で電子書籍としてNexus7に入れました。 明日の通勤時にでも読んでみよー。 さらに適当にいじくってみた。 無線屋さんの私は、NFCだBluetoothだって機能を弄りたくなるわけで。。。 Bluetooth機能使ってこんな使い方もできちゃうんです。 いわゆるキーボード付きタブレット端末を想起させる使い方。 ちなみにこのキーボード、結構話題になってる奴なんです。 http://getnews.jp/archives/247873 http://weekly.ascii.jp/elem/000/000/095/95683/ このキーボード、安い、軽い、電池もちいい、堅牢。 子供向けのDSソフトに付属する品なので、かなり堅牢に作られてます。 タッチできる液晶って意外と便利かも、マウス要らんし。 MSのSurfaceはこれよりスタイリッシュになると思うし更に期待してしまう。。。 ついでにWiiリモコンともペアリングしてみた!! WiimoteControllerっていうandroidアプリであっさりペアリングできます。 WiiリモコンとGalaxy S2とはペアリングできなかったけど、Nexus7はできた。 このアプリの開発者は、Wiimote for AndroidみたいなSDKとして配布して欲しい。 Wiiリモコンとタブレット端末の可能性を世界中の開発者に広めていただきたい! なんか夢広がるー

英会話学校の価格破壊

Skype英会話が流行っている。 昔の人は従来型の、部屋を構えて正社員の講師が一対一で教えるスタイルを想起するかもしれないが、今はSkype一つで家から英会話ができてしまう時代。 これはもう一過性のものではなく、今後のスタンダードになると思われる。 最大の要因は価格差。 私は、マンツーマンを謳った従来型の英会話学校を2社ほど回った。 プランとして提示されたのはどちらも1回(50分)あたり8000円程度。 一方でSkype英会話の方は1回(25分)200円程度。 分単位で比較して、20倍も価格差がある。 Skype英会話が出せるこの価格競争力は人件費と固定費が劇的に低いということがある。 明らかなことではあるが以下の3点は明確な差になっていると思う。 - 店舗を構える必要がない - フィリピン人のアルバイト講師は給与が安くて済む - 予約システムが使いやすい(Web上ですべて済む) また、受講者側にもメリットがある。 - 時間がフレキシブル(24:30まで講義がある) - 圧倒的安さ まだまだサービスの悪さがあったり、講師の当たり外れがあるところがあるが、 低価格で、夜遅くに英会話をしたいニーズを完全に掴んでいると思う。

Androidのソースコードを落としてくる作業

低レイヤーのドライバ等を実装する身としては、Androidのソースコードから学ぶものが多いはず! そんなきっかけで今日はAndroidのソースコード落とす方法の備忘録。 殆どここ↓みればわかるんだけど http://greety.sakura.ne.jp/redo/2012/02/windowsandroid.html とりあえずまとめてみる。 うちのPC環境はWindows7 + Cygwinな環境です。 gitインストールしたあと、以下のコマンドを実行して超待つだけ!超! $ mkdir android_source $ cd android_source $ git init $ git clone https://github.com/OESF/OHA-Android-4.0.3_r1.0.git ツリーまるごと落とすのでかなり時間かかります。

第2回関西ソーシャルゲーム勉強会

関西ソーシャルゲーム勉強会 なるものがあったので参加してきました. 以下そのまとめ&備忘録 ■日本マイクロソフト 砂金信一郎 様 ソーシャルゲームにおけるAzureデザインパターン - クラウドガール のプロデュース  クラウディアさんは知らなかった... - Windows Azureの概略  マイクロソフトが提供する安心・安全なクラウドサービス  ベンチマーク先がAWSで,あとだしジャンケンでより良い物を提供  Azureデータセンター基盤への投資  Azureは国内でも様々な会社で採用されている  エンタープライズ系だけでなくエンタメ系の利用が目立つ  クレカがあれば90日間は無料でできる.  本人の承諾なしに課金がスタートすることはないので安心  VMがGUIで簡単に立ち上げられる  開発言語を選ばないよう,SDKすべて提供されている - ソーシャルゲーム向けの応用  システムの運営だけがしたくて運用は任せたい小規模な会社でも便利  キャンペーンもので一時的に必要な場合も効率的  例)FFXⅢのキャンペーン,カプコンのドラゴンズドグマ  mixiクリスマスの運用は前年度と変わらないユーザー数(250万ユーザー) - Windows Azureの変革  - PotterMore :RPG仕立てになったオープン後数日で100万ユーザー,1.1億PV/日  - BigData Hadoopにも近日対応 ■サイバーエージェント 山田元基 様  ソーシャルゲーム開発パッケージ化とネイティブアプリ開発 - 開発したゲームの紹介  東京ガールズスナップ:ガラケー向けゲーム,3ヶ月で実装,MongoDBを利用  天空のクリスタリア :スマホ向けゲーム,2012年6月リリース,Ajax多様 - ソーシャルゲーム開発のパッケージ化  現状:スマートフォン特化,カードゲーム増加,標準搭載機能の増加  →パッケージ化に向けて,ゲームノウハウの共有->ライブラリ/APIの開発を行う   ・ライブラリAPI一覧    ガチャ,ショップ,ランキング,招待機能,トレード,掲示板 . . .     (サイバーで

GAE for python の環境設定をしたときの備忘録

GAE for python はDjangoっていうフレームワークを使って簡単にウェブサイトが作れるお! って情報を、今日本屋で立ち読みしてた。 とりあえずローカルで動かして確認して、デプロイするところまでをやってみました。 以下その備忘録! まず、そもそもPython2.7とGoogleAppEngineは入れてたので以下の2点のみで環境設定が済んだ。 1.EclipseにPyDevを入れよう  ※Eclipseは日本語化しておりませんのであしからず ・Help -> Install New Softwareを選択 ・Work with の欄に ”http://pydev.org/updates”を入れて”Add”を選択し、インストール 2.PythonのインタプリタをEclipseで設定しよう PyDevインストール後に、GAEのプロジェクトを作成しようとすると、 「Project interpreter not specified」 と怒られるので、インタプリタのパス設定が必要。 設定は、、 メニューバー -> Window -> Preferences -> PyDev -> Interpreter - Pythonを選択肢、Pythonのインタプリタ(python.exe)を選択しApplyを押下! 以後は新規のプロジェクトを作成してRun ・メニューバー -> File -> New -> Otherを選択 ・ PyDev Google App Engine Projectを選択し Next ・GAEのディレクトリを入力 Run As -> PyDev: Google App Run でローカルで動きます。 確認方法は、ブラウザから http://localhost:8080 にアクセスするだけ。 3.デプロイで公開しよう ・GAEでApplicationを作成 ・Eclipseで先ほど作成した名前と同じプロジェクトを右クリックして  PyDev:GoogleAppEngine -> Uploadを選択。 ・Googleのメールアドレスとパスワードを求められるのでそれを入力すればデプロイ完了。 確認方法は、

Developers Summit 2012 Kansaiにいったときのまとめ

名称 Developers Summit 2012 Kansai (通称:デブサミ関西) 会期 2012年9月14日(金) 会場 神戸国際会議場 5F(兵庫・神戸)  アクセス 、 5Fレイアウト 主催 株式会社 翔泳社 お勧めする方 技術者、ソフトウェア開発者、システム開発者、ネットワーク管理・運用者、IT教育担当者、 ITマーケティング・セールス担当者、IT関連部署マネージャ、プロジェクト関連マネージャ 参加費 無料 完全にミーハー精神で及川さんの話を聞きに行きました! 以下それのまとめ。 Google及川さん: ■chromeのプロジェクトに学ぶAgileでScaleするソフトウェア開発  // 及川卓也 @Google - クラウド時代のソフトウェア開発 大規模ソフトウェア開発  大規模ソフトウェアって?   -> みどりの窓口,発電所,社会インフラを支えるシステム     ウォーターフォールモデル   plan design implementation stabilization release - 大人数開発で必要になってくることが工程管理(ガントチャート)  大規模なものを小さい単位に分ける   Googleではチームが小さい(5人程度)   不必要なドキュメントの生成やコミュニケーションを減らすため.   できるだけ少人数にして権限を移譲する   小さいチームではテーマを共有することが大切  Branch管理,  Test: Priorityが低いものについては修正するか否かをしっかり検討する  Release: 回収はありえない - クラウド  クラウドにおいてはデバイス側のソフトウェア更新が要らない  低いデプロイメントコスト  Release後も,ダウンしないかどうかが懸念事項  ユーザーのトラフィックに対応できるか - クラウドの開発サイクル  Launch & Iterate : 何回も反復する.はじめから完璧を求めない  完成度が許容出来るレベルのものを作成し,  反応を見て改良を加えることで完成度を高めていく  仮説と実証を繰り返していく  VersionLess: 利用者はバージョンを意識することがない  リニアな

京大情報学OBが京大フェス2012にいってきたときのまとめ

京大フェス2012 に行ってきました。 想像以上に良かった!俺の3000円は無駄じゃなかった! 最後のほうは意識飛んでしまったけど。。。 京大フェスは4構成で、 Session1: 新しい挑戦だけが、世の中を変える -> ベンチャー社長の人生振り返り、どんな挑戦をしてきたか。なにが自分を変えたのかについて話されてました。 Session2: 次はこうなる!時代を見通すヒント -> 岡田斗司夫さんのお話しか聴いてなかったけど、大衆の視点とは違った鋭い視点でのおもろい話してた。このセッションのテーマと内容が合ってるのかは謎。 Session3: OBプレゼンテーション -> 京大を出て、様々な業界で活躍されてるOBの話。 Session4: 受けてみたい、京大白熱授業 -> 瀧本哲史さんと、北川智子さんのお話。 以下、講演中にとったメモ。 Session1: 新しい挑戦だけが、世の中を変える 孫泰蔵@MOVIDA JAPAN CEO: - 人生を変えたきっかけ  Yahoo創業者との出会い  若くして必要な情報を必要な人に提供する使命を持って、世の中に新しい価値を提供しているのに刺激を受ける →  早期にロールモデルとなる人に出会うことが成長につながる - アントレプレヌールとは  技術革新や規制緩和によって起きる変化に気づき,社会を変えること  新しい価値を創るにあたり,変化はチャンスである. - これからWebサービスを作るなら  英語で作れ。 なぜなら世界中がマーケットとなる。不得意な英語だと言葉数は減り、ビジュアルにサービスが構築される点が良い。なぜなら言葉に頼った説明はユーザビリティを低下させるからだ。   「知ってるから通じる」がガラパゴス化に繋がる - Think Big  物事は大きく捉える ex) サグラダファミリア:一代ではできない大きな仕事 クリストファー・テイト@ コネクトフリー CEO: - コネクトフリー株式会社の事業(ex: ジュンク堂書店の事例 )   書店内に無線LANを提供し、店内の書籍を検索できる仕組みを構築。  地元に密着したローカルな広告を打つことでペイするビジネスモデル。 - be the

Callback関数を知らん人がまず理解すべきことのまとめ。

未だにへっぽこプログラマーの私が、「Callback関数なにそれ美味しいの?」状態から、 Callback関数、「それはとっかえひっかえされる関数だお(キリッ」ってなるまでにとった行動のまとめ。 ちなみに私、C言語とPythonくらいしか喋れませんので、今回はC言語に特化した内容でお送りします。 ※Webから漁ってきた情報から手っ取り早くまとめたものなので間違いもあると思われます。間違った点はゴリゴリ指摘していただけるとマンモスウレピーです。 Callback関数とは? ■プログラム中で、呼び出し先の関数の実行中に実行されるようにあらかじめ指定しておく関数( IT用語辞典 より引用) 初心者が読んでもわけわかめだと思います。いきなり定義が頭に入る奴なんていません。 これはまだマシな方で Wikipediaの解説 なんてクソイミフです。 アホだと自覚してる私は読む気さえ起きません。 完全理解は無理で、ある程度の理解水準に素早く到達して、 「とりあえず実装できる」状態になりましょう。 その後、徐々に理解を深めていく方が学習は早いです。 ここでは3段階で解説して、「とりあえず実装できる」状態になりましょう。 Callback関数を理解するためには、 1:ポインタの理解、2:関数ポインタの理解、3:callback関数のメリットと実装方法 を学ぶ必要があります。 1:ポインタとは? C言語入門者を悩ませるポインタです。 まずは軽くポインタって何?ってところから。 ポインタ⇔指す人ってわけで、C言語の入門書では以下の様なコメントが書かれてます。 int *p;    // int型を変数を 指す ポインタ int data; // int型の変数 p = &data; // pはdataを 指す 1行目: いつも「指す」って何やねんってなります。 私は、 ポインタはアドレスを格納する変数 だと思ってます。 だからpはアドレスを格納するための変数です。 指すとか意味分かんないからアドレスを格納するただの変数だと思うのです。 2行目: int data; って書いた瞬間に、メモリ上でプログラムが使える領域に対し

Pythonセットアップ @ cygwin

UNIXコマンド使いつつpythonしたい@Windows そんな時のセットアップ手順の覚書 1. cygwinをインストール←よくわかんないのでフルインストール(あんま良くない習慣) 2. cygwinのパスを通す t 3. pipのインストール  3-1  $ wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py  3-2  $ python get-pip.py macだとwgetは無くてcurlでいいみたい. pipとはPyPI(Python Package Index)と呼ばれるPythonパッケージを共有するリポジトリからモジュールをインストールする際に用いるコマンド。 新たにモジュールインストールしたいときに便利なのでここでインストールしておく。 4. emacsをpython向けに改良 → ここ を参考にして.emacsを変更する 5. モジュールインストール  基本的に "$ pip install ライブラリ名" で行ける。 入れたのは feedparser, numpy, PIL, ipython, matplotlib 6. 散布図の作成 ここ に記載されてるコードを実行してインストールされてるかどうか確認 [ついでにシンタックスハイライトの入れかたの覚書] 1. Syntax Highlighter Scripts Generator にアクセスしてコード生成 2.生成したコードをbloggerのテンプレートの</head>直前にコピペする 3.記事で使いたいコードを <pre class="brush: プログラミング言語名" title="タイトル">   色づけしたいコードを記述 </pre> ではさめばOK

ゲームハード開発エンジニアが作業効率化のためPythonを勉強してみた

Python最速学習方法 → サンプルコードから学ぶ! 参考にしたサイト: http://www.python-izm.com/ 内容 1: インタプリタ設定 2: ソースコードが書かれるencodeを設定 4-6: 関数定義 10: __main__ (よくある構文) 15-19: 複数行に渡る文字列 24: 数値->文字列変換 28: 文字列->数値変換 36: タプル 44-46: コマンドライン引数の取得 49-52: リスト 53-54: for文 56-64: while文 66-68: ファイル書き込み 70-73: ファイル読み込み 76-80: HTML解析 コード   #!/usr/bin/python # -*- coding: utf-8 -*- # function def test(): print "call test function" # インタプリタからimportされたときに実行されない構文 if __name__ == "__main__": test() test_str = """ hoge hogege hogegege """ print test_str int_data = 100 str_data = "yen" print str(int_data) + str_data print str_data.replace("yen","dollar") test_str = "100" print int(test_str)*100 import datetime today        =    datetime.date.today() print today def getToday(today): value = (today.year, today.month, today.day) return value tuple_data

GoogleAppEngine for Java

【開発環境設定メモ】 1. JDKのインストール  各OSに合わせたものを Oracleのサイト からダウンロード  私の環境は64ビットWindowsなので jdk-7u5-windows-x64.exeを選択 2. Eclipse 4.2を ここ から インストール  私はEclipse IDE for Java EE Developersを選択 3. GoogleAppEngineのプラグインをインストール   (i) Help > Install New Software を選択  (ii) http://dl.google.com/eclipse/plugin/4.2 をLocationにセットしてPluginをチェック  (iii) ダウンロード開始(結構時間かかる) これから Javaでウェブサイト作ってみる。 参考サイト: http://blog.livedoor.jp/morituri/archives/53251828.html

Emacsにおけるlispファイル

Emacsの設定をするにあたり、大切なことは2つ。  1. $HOMEディレクトリに.emacsファイルを置く( 前回 述べた)  2.  load-pathを通す   今回は2について述べる。 まず、ロードパスとは様々なLispプログラムを読み込む場所のことである。 そこに パスを通す と便利な機能を付け加えてくれるLispプログラムを読み込める。 その結果幸せになるわけです。 http://d.hatena.ne.jp/tomoya/20090121/1232536106 パスを通すには? - .emacs.d以下にelispディレクトリを作成 - .emacsファイルに以下を記述 ( setq load-path ( cons "~/.emacs.d/elisp" load-path )) Lispプログラムを読み込めるようにするには? - .emacsに以下を追記 ;; まず、install-elisp のコマンドを使える様にします。 ( require ' install-elisp ) ;; 次に、Elisp ファイルをインストールする場所を指定します。 ( setq install-elisp-repository-directory "~/.emacs.d/elisp/" ) auto-complete-modeのインストール インストールの例 :  http://d.hatena.ne.jp/tomoya/20090124/1232822594

.emacsの設定

次は.emacsの設定! .emacsとはemacsの設定ファイルで、emacs起動時に読み込まれて好みの環境を提供してくれる。 そこで今回はemacsを半透明にする設定をしてみる。 1. パスを通す スタート>コンピューターで右クリックし、プロパティを選択。 システムの詳細設定>環境変数>ユーザー環境変数の画面で、 "HOME"を"C:\home"に設定。 2. .emacsを作成 Cygwinを立ちあげて $ emacs .emacs を実行し、以下を記述 ( setq default-frame-alist ( append ( list '( alpha . ( 85 40 )) ) default-frame-alist )) 次回以降emacsを立ち上げると半透明emacsの出来上がり。

Cygwin + NTEmacs

PCを変えたので開発環境構築をすることになった。 Windows7上でlinuxライクな開発環境を作るための第一歩として、 CygwinのフルインストールとCygwinのシェルからNTEmacsを起動させるための設定 について解説する。 ・Cygwinのインストール 以下のページにアクセスして、setup.exeをダウンロード。 パッケージを選ぶのが面倒なのですべてインストール。 ミラーサイトは日本のサイトからのほうが断然早い&HTTPよりはFTPということで jaistのftpを利用すると早い気がする。 http://cygwin.com/install.html ・NTEmacsの設定 以下のページにアクセスしてemacs-23.3.zipをダウンロードして " /usr/local"に展開。 Cygwinシェルで、  /usr/local/bin に移動したあと $ ln -s ../emacs/bin/runemacs.exe emacs を実行。 参考URL :  http://www.oki-osk.jp/esc/cyg/cygwin-24.html これでCygwinからNTEmacsを立ち上げることができるようになりました。

Bluetooth(1)

新しい技術を学ぶ時は 開発された理由と目的を正しく理解する. どのような製品やサービスに応用すべきかの判断がつくようになる. ・通信エリアに応じたワイヤレスネットワークの分類

Pythonによるソーシャルデータ分析入門

■あらすじ Facebookやtwitter. いまや無くてはならないツールとなった. いろんな人のつぶやきを見ていて,やってみたいことが出来た. それは,つぶやきを利用して,いろんな会社の勤務時間帯を調べることだ. twitter上にはリスト機能があったり,Facebookではプロフィールに勤務先があったりする. 例えば,twitter上にある「トヨタ2012」みたいなリストとFacebookにいるToyota勤務の人のつぶやきを収集して,そのアップデート時刻をヒストグラム表示してみれば大まかな勤務時間帯が可視化出来る気がしてならない. 勤務時間帯だけでなく生活リズムとかもわかるかも. デスノートで,キラを特定するのにエルが使ってた方法だ. いろいろと面白げなので,まずは,「入門ソーシャルデータ」という本を購入. 自身初のオライリー本ということもあって読破できるかは微妙だけど... ■Python環境設定とtwitterパッケージのサンプルプログラム とりあえず今日やったこと. Mac OS X 10.7 でpython開発環境のセットアップ. 1 . python 2.7のインストール 2. MacPortsのインストール   ここ から  MacPorts-2.1.1-10.7-Lion.pkg をダウンロードして実行. 3. easy_installのインストール ここ で書いてあるように以下のコマンドを実行.    $ curl -O http://peak.telecommunity.com/dist/ez_setup.py    $ python ez_setup.py つぎにパッケージのインストール. ここでは,networkx,numpy,twitter.  $ easy_install networkx  $ easy_install numpy  $ easy_install twitter twitterのトレンド取得について試してみる. API側の仕様変更があり,書籍通りのコードでは実行できない. このサイト の通りに実行すると取得できる. ■ついでにGAEへデプロイ せっかくプログラム作るのだからウェブ上に上げたい! てなわけでレンタ

シェルスクリプト入門

会社の環境で仕事を進めるにあたり、シェルスクリプトの必要性に気づき少し勉強してみる。 ■シェルスクリプトとは? 複数のコマンドをまとめて行う簡易プログラムのこと。 ■サンプルプログラム #!/bin/sh echo "Hello World" ・"#!"以降に書かれたプログラムでスクリプトを実行する ・シェルの実行にあたり実行権限が必要になる場合があるので chmod u+x bashfile ・環境変数に「. 」を記述していない場合はファイルの前に./を入れる必要がある ■シェル変数 変数名="値"  # =前後にスペースをいれてはいけない $# : 与えられた引数の個数 $* : 全引数リスト $number : シェルに与えられた引数名 $? : 最後に実行したコマンドの終了ステータス ■算術演算子 exprコマンドを使う。 (例) `expr 10 + 30`  # 40と表示される ■コメント コメント部分の行頭に#をつける ■条件分岐 "["と"]"の前後に半角スペースを入れる(最後に";"をつけた場合は最後の半角スペースは必要無し) if [ 条件 ]; then else fi ■参考文献 http://cyberam.dip.jp/linux_command/shellscript/shellscript_main.html

Javascript

公式サイト:  https://developer.mozilla.org/ja/JavaScript コンソール出力:  console . log ( i ); コンソール表示(Chrome): ctrl+shift+j ■関数定義  function func1(a,b){   return (a+b); } ■配列 var array = [1,2,3]; console.log(array[2]); // 3が表示される ■連想配列 var array2 = { 'year1000':1,'year2000':2,'year3000':3  }; ■Javascriptのオブジェクト  オブジェクト = プロパティ(属性)とメソッド(処理)  var v =  new String("sample"); //new オブジェクトの種類();  console.log(v.length); //文字列の長さを表示 一定時間後に何かする setTimeout(処理の内容 , 処理までの時間をミリセカンドで) 一定周期ごとに何かする setInterval(処理の内容 , 処理までの時間をミリセカンドで) // 学習ソースファイル1 ☆★☆★☆★☆★☆★☆★☆★ <!DOCTYPE html> <html lang="ja"> <head>     <meta charset="UTF-8">     <title>JavaScriptの勉強</title> </head> <body>     <h1>JavaScriptの勉強</h1>     <script>         // ループ(while) function sum(a,b){ return (a+b); }         var array = [1,2,3]; var array2 = {'year2000':100,

ドットインストール(3)

■ファイルの作成削除コピー移動 作成: vi filename 削除: rm filename コピー:cp file file2(fileをコピーしたfile2の作成) 移動: mv test.txt path(pathの位置にファイルを移動,名前変更にも使える) ■ファイルの中身をみる cat : 中身を見る less / more : コマンド実行結果を少しづつ見る head / tail : 最初/最後の10行を表示 ■ワイルドカード * : 任意の文字いくつでも ? : 任意の一文字 ■ディレクトリやファイルの検索 find find [] -name "" -type [d|f] 例) find . -name "test_*" : カレントディレクトリ内の"test_"ではじまるファイルとディレクトリを探す ファイルだけ見たい時は "-type f",ディレクトリだけ見たい時は "-type d"をオプションで付ける. ■ファイルの中身を検索 grep -[] [] [] grep 111 * : 今いるディレクトリ内のファイルで文字列111を含むファイルを表示 オプションで -c をつけると出てきた回数も表示する ディレクトリ内も再帰的に検索してほしい時は -rをつける. ■コマンドラインの便利な使いかた Tabキー : 補完(2回押すと候補を表示) 矢印キー : 過去のコマンドを表示 history : 過去に行ったコマンドを表示 !222 : 222に実行したコマンドを実行 !! :直前のコマンドを実行 !gr : grepではじまる一番最後のコマンドを実行 !gr:p : grepではじまる一番最後のコマンドを表示 ■便利な小技 man : マニュアルを調べる(スペースで下へ) tree : ディレクトリの構造 date : 時間を表示 cal : カレンダー表示 wc filename : ファイルの行数等を表示(-lで行数)

ドットインストール(2)

Unixコマンドの基礎のメモ ■Unixコマンドを覚えると... - レンタルサーバーのうちSSH接続 - CentOSにMacターミナルから一般ユーザーでログインする ■ログイン,ログアウト ログイン:ssh username servername ログアウト:exit ■パスワード変更 passwd ■ディレクトリの移動 現在地:pwd ディレクトリの移動:cd hoge ホームディレクトリに戻るときはcdのみ .は自分自身 ..は一つ上のディレクトリ ■ディレクトリの中身を見る ls : ディレクトリの中身を表示 オプション:  -l : より詳しい情報 -a : 隠しファイルを見る ディレクトリかどうか, 所有者,グループ,その他の人 r: read, w:write, x:実行 ファイルの所有者 属しているグループ サイズ 最終更新日 名前 ■パーミッションの変更 4r 2w 1x rwx = 4+2+1 chmod _ _ _ ディレクトリorファイル (ex) chmod 755 dir 755⇔ rwx r-x r-x ■ディレクトリの作成削除 mkdir dir : dirを作成 rmdir dir:dirを削除 ■■■■■■■■■■■■

ドットインストール(1)

プログラムの基礎を手軽に学ぶために ドットインストール というサイトで勉強を始めた。 ここでは、初心者向けに3分以内の短い動画でプログラムの基礎を説明しているようです。 ウェブ系のプログラム言語だけでなく環境構築等のことも充実しており、かなり勉強になりそう! てなわけで、まずはMacOS上の仮想端末でCentOSを使えるように設定。 インストールに時間がかかるので同時並行でエディタに慣れる目的でVimの学習をする。 ■CentOSをVirtualBox上で動作させる CentOS、VirtualBox、Hosterのダウンロードとインストール。 細かい設定等は動画を参照。 CentOSにhttpdパッケージをインストールしてWebサーバーが構築される。 Apache,PHP,MySQLのインストール。 セキュリティの設定(selinux,iptablesの無効化)。 Cyberduckの設定 html,phpファイルをブラウザ上で動作確認 ■Vimの学習 insert,select,コピペ、カーソルの移動についてのコマンドを覚えた(つもり)。 -- 覚書 VirtualBox上でCentOSを立ち上げる HosterでIPアドレス解決 コマンドライン上でsshでログイン Cyberduckでファイル作成 ブラウザ上で確認 (http:// ***.dev/ hoge.html ) 

内向的で無口な人向けの会話術

社会人生活をしていて,初対面の人と付き合う機会が増えてきた. 年の離れた人と飲み会で同席することもあった. そこで気づいたこと.... ほんっっっっとうに話す話題がない!沈黙だらけ!超気まずい! どうしたら良いかわからんので,書店でコミュニケーション関連の本を立ち読みしてきた. 以下参考になった点について述べる. 数冊パラパラと読んでみて,「相手に喋らせる」とか「うなづく」とか細かいことが色々書かれていた. 人間っていうのは自分のことを話したがる生き物で,聞いてあげることで相手が気持ちよく喋れるとのこと. 質問の種類は大きく分けて二種類で,一つは 「タテに掘り下げる質問」 . ある人が「○○が好きなんだ」とか言った場合は, 「いつから好きなの?」 「何で好きになったの?」とか5W1Hの切り口で一つの話題を掘り下げて会話を広げる方法. もう一つは 「ヨコの質問で話題を広げる質問」 . これは,会話の最中に出てきたワードについて広げていく方法. 上記2つの方法を使って社会人生活をどうにか乗り切ろう!

構文エラー : ';' が '型' の前にありません

ずっとC++言語の勉強してたけど,久しぶりにC言語をいじってみた. 構造体周りの復習のためにVisual Studio 2010つかってプログラムを書いたところ, ど忘れしてた箇所があったので記載. こんなプログラム書いた. #include <stdio.h> struct Kozotai{ int num; float height; }; int main(){ struct Kozotai aaa = {10,10.22f}; printf("aaa.num : %d",aaa.num); //出力結果確認用 int tmp; scanf("%d",&tmp); return 0; } そしたら 構文エラー : ';' が '型' の前にありません。 って怒られ続ける. 出力結果確認のためにプログラムを一旦止める処理を加えたくてtmpとか宣言してるんだけど,これがダメらしい. C言語では変数宣言が途中にあるとエラーを吐くんです. てなわけで宣言部を上にもってったらコンパイルエラー消えました.

メーカーで働くということ

社会人になって3週間が過ぎようとしている. 某メーカーに就職した俺が今思うことを述べる. 1.成長の遅さ 企業文化に馴染ませるためか,研修を長々やっている. 会社に馴染むという意味では成功しているが,客観的に見て成長しているかは実感が無い. 若いうちは目に見えるスキルを身につけたいが,全くそんなことはやっていない. 自分で食っていけるエンジニアの階段は確実に登れていない. 2.大企業であるということ たくさんいる社員の中の一人になろうとしている. 会社が凄いから付き合ってくれる人はいっぱいいそうだが,自分自身は何も凄くない. 自称優秀な肩書きで就職した大企業. 福利厚生も手厚く収入面では何の苦労も無いだろうが,将来の自分の市場価値には自信がない. GREE田中社長の言葉を思い出す. 「これから成長する市場で,会社とともに成長することが幸せである」 自分で学ぶ姿勢が必要だと最近は強く思う.

信号処理のフレームワーク

ロジカルシンキングというスキルが巷で話題になっている. 私の中では,複雑に入り組んだ問題を頂点に置き,漏れなくダブりのない(MECE, Mutually Exclusive and Collectively Exhaustive )ような切り口(フレームワーク)で複数の要素に切り分ける作業を繰り返し行い,物事の問題点を追及するものであると捉えている. 聞きなれないフレームワークという言葉についてふと思ったことがある. 私は数理科学関連の研究,特に信号処理関連の研究を大学院まで続けていた. 研究テーマは複数種類やってきたが,根底は信号処理ということで考え方や研究の進め方は共通していた. 3年間の研究経験を元に,信号処理の研究の流れを私なりに簡潔に述べると, 考える対象の数理モデルを考え, 何らかの評価基準を立て, 解析可能な最適化問題を導出し, 最適化手法を適用し解を得る. といった内容であると考えている. 私の中では,「信号処理のフレームワーク」として定着している. 作業を効率化する上でも,定着した考え方を自分の中に持っているというのは強みであると思った. 今後の仕事においても,単純作業や繰り返し行う必要のある業務等に関して言えば,こういったフレームワークを自分なりに考えて構築していくのは有益であると思われるので,頭の片隅にでもおいておこうと思う.

デザイン系の衝撃

新入社員研修で,様々な経歴を持つ人たちと触れ合って思ったこと. デザイン系はなんでもグラフィカルに考えようとする. 図にして理解しようとする. 逆に,図に出来ない場合は理解が困難であったりもする. 図解は共有が容易で,万人に対して有効であることを知った. 文系の人たちは人の感情を汲み取り,意見を組み込むことに優れている. あいまいな議論に関して思ったことを雑多に言う傾向はあるものの,議論を活性化する役割をすると言う点でいい働きをしていると思う. 理系は発言数は少ないものの,話の交通整理や,論理の一貫性についてのチェックを怠らないと思われる. 私は理系というカテゴリに属し,典型的な理系人間なのであるが,デザイン系から受けた衝撃は大きい. 考えた内容を図で表現する. 例としては,物流に関しては,モノの流れのフローを時系列で図示したりする. 時系列で切れなければ,要素をカテゴライズし,抽象度に応じて並べたりする. こうしたことは頭の中ではできているが,それを図に表現するというフェーズにおいてはクリエイティブな要素が絡むと思う. 図にできない時点で,頭の中は混乱しているのかもしれないが. とにかく,「なんでも図にして考える」というデザイン系から受けた衝撃は今後何らかのカタチで以下していこうと思った.

社会人になって

大学院を修了し、先週会社に入った。 会社の同期を見ていて、優秀だなと思う人がたくさんいる。 会話を広げるのが得意で、欲しい情報をいとも簡単に聞き出せる人。 学生時代からプログラマとして実績をあげている人。 終業後も自己啓発等に熱心に取り組んでいる人。 いろんな面で学ぶものは多く会社に入ったというより、まだ学校にいる感じ。 学びながらお金をもらえるということはかなり恵まれていると思う。 入社後数年間は、ウェブまわり(サーバー保守やアプリ開発)のスキルを身につけたい。 仕事で得た力を、週末等の空いた時間を使ってアウトプットしていければさらにいいと思う。 給料は数年間はあまりもらえないとのことなので、起業とまではいかないが、アフィリエイト・投資・輸入とかに興味を持っている。 会社に頼るんじゃなく自分でお金を稼げる人間になりたい。

Emacsコマンド

Emacsのコマンドを少しずつ覚えていくことにする。 まずはコマンドラインから $ emacs & // emacsの立ち上げ(バックグラウンドで動かす為に"&"つける) 立ち上がった後は、 Emacsコマンド集 を参考にして必要最低限のコマンドを使いながら覚える。 C-x C-f ファイルを開く C-x C-s ファイルのセーブ C-g コマンドのキャンセル C-x u 最後の操作の取り消し C-x C-c Emacsの終了 C-w 指定範囲のカット M-w 指定範囲のコピー C-y 切り取りorコピーした内容を貼り付け C-x C-w 別名のファイルにセーブ C-x k ファイルを閉じる M-x goto-line 特定の行へ移動 C-x  全選択 C-s 文字列の検索

Linux入門 / Emacs,コンパイラ

作業効率をあげたい! Windows上でGUIベースで作業してると待ち時間が生じてあんまり快適じゃない! そんな気持ちが芽生えたのでエディタを探してみることにした。 既にあの有名なeclipseと呼ばれるIDE(統合開発環境)を使ったことがある俺は、CDTのプラグインをインストールする気満々だった。 学生時代に周囲にいた情強たちはeclipseを経由してから結局Emacsやvimを使っている様子。 調べてみたらエディタ界には 「Emacs VS vim」 みたいな構図があるらしいことがわかった。 拡張性という面でemacsに可能性を感じた俺はEmacs軍につくことにした。 http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E6%88%A6%E4%BA%89 ここからはCentOS上でEmacsのインストール手順の覚書。 スーパーユーザーになって yum を唱えるだけ。 yumって何の略なのか気になったんだけど、 Yellowdog Updater Modified なんだってさ。 語源から抑えたかったけど意味フですわ。 以下コマンド。 # yum install emacs // emacsのインストール # yum install anthy-el // 日本語入力を可能にする ついでにCコンパイラもインストールしたった! # yum install gcc*

Linux入門 / ツールのインストール

2年前に5万で買った低スペックPC。 Linuxの知識が皆無で、かつ会社に入ってから苦労しそうなので仮想化かデュアルブートを検討した。 仮想化はOSの上にOSが乗る。 再起動を伴わずにOSの切り替えができる点はメリット。 マシンのスペックが高くないと使える速度では動かないのがデメリット。 試しにVMWARE入れてUbuntuぶち込もうとしたけど端末起動するだけで耐えられないくらい遅い。。。 デュアルブートはその逆で、OSは再起動しないと変更できない。 パーティションを分けたりするのは面倒だけど、ググりながらやったら難なくできた。 Cドライブ内の空き領域を増やせばいいんだろーと思っていろいろファイル消した。 DVD経由でCentOSインストールしようとしたけど空き領域が無いとのこと。 Cドライブあいてるのに。。。 結局「空き領域」の捉えかたが違って、Cドライブ内の領域ではなくて、Cドライブ外の空き領域が必要だったみたい。 そこでパーティションいじる方法を見つけるためにググる! http://pasofaq.jp/windows/mycomputer/makedrive.htm これに書いてあるとおりにwindows7上で操作していったら「空き領域」ってやつができた。 あとは下記の書籍に書いてあるインストール方法どおりにCentOSをインストールしたらデュアルブート完了。

通信の歴史

TCP/IPの勉強をしている. 通信の歴史についての記述がわかりやすくて面白いのでまとめる. 主に軍事目的で発展してきた通信技術. 通信の始まりは 狼煙 (のろし)からきている. 敵の侵攻を遠くにいる人に伝えるために煙をあげた. 煙が見えないほど遠くにいる人に伝えるためには,中継地点を設けて遠距離通信を可能にしていた. この方式には2つのデメリットがある. 1つは単位時間あたりに送れる情報は極めて小さいこと.( 伝送効率 ) もうひとつは,各地点に人を配置するため人的リソースが必要であること( コスト ) 中国の万里の長城では,煙に替わって灯火を用いて同様の通信を行なっていたと言われている. 次に出てきたのは モールス信号 . ここでは,情報と二種類の信号(トン/ツー)の対応関係を定めるアイディア( 符号化 )が採用された. また,信号の開始の合図,理解したかの確認,信号の終了の合図といった規則( プロトコル )も使っている. 上記の内容は独習TCP/IPを読んで内容を再編集したものである. この後の内容としては,電信,文字コードといったものが解説されていた. 通信の歴史を導入としてTCP/IPの説明をわかりやすく解説している点で本書は秀逸であると思う. わからないものは歴史的経緯から理解していくと,記憶に残るし理解しやすい. 技術の仕様における「なぜ?」を解決する方法として「歴史を学ぶこと」の重要さが身にしみてわかった.

Google App Engine for Java (1)

Java入門のためにGoogleのクラウドサービス"Google App Engine for Java(以下GAE/J)"を初めてみた. Eclipseという統合開発環境(IDE)で開発することを想定した環境構築を説明します. やることは以下の4つです. 1. JDK(Java Development Kit)のインストール Javaの開発をするので当然JDKは必要です.GAE/JではJava5,6に対応しています. 2. GAE/J SDKのインストール Googleのサイト を参照 3.Eclipse for Java EE Developersのインストール このパッケージは,web開発向けツールがまとまってるのでこれをダウンロードする. デフォルトでは英語なので,日本語化したいひとはPleiadesをつかうべし. MacOSへのインストールの仕方はここ(http://macphp.sblo.jp/article/43286453.html)がわかりやすい. 4.GAEに登録 http://code.google.com/intl/ja/appengine/

テルマエ・ロマエに見る法則

いま話題の「テルマエ・ロマエ」をコンビニで立ち読みしてきた. Wikipediaにある概要は以下のとおり. 古代ローマ 時代の 浴場 と、現代 日本 の 風呂 をテーマとしたコメディである。 入浴 文化という共通のキーワードを軸に、現代日本に タイムスリップ した古代ローマ人の浴場設計技師が、日本の風呂文化に カルチャーショック を覚え、大真面目なリアクションを返すことによる笑い [2] を描く。 面白い部分は,まさにここに書かれている通り「古代ローマの大真面目なリアクション」にある. 異なる時代の異なる人種からみた日本の風呂の面白さと,表現の秀逸さ.  - 書店員の選ぶ マンガ大賞 2010 [4]  - 第14回 手塚治虫文化賞 短編賞 [2] 受賞  - 「 このマンガがすごい! 」2011年版オトコ編2位  -  全国書店員が選んだおすすめコミック 2011、3位入選。 これらの実績からも,万人受けする名作であることは間違いない. テルマエ・ロマエは,古代ローマ時代と現代日本を行き来する古代ローマ人の物語. 互いに重なり合わない2つの時代を主人公が行き来するパターン . これは最近の勝ちパターンのような気がする. TBSで高視聴率だったドラマ,「 JIN - 仁- 」. これは,主人公である南方仁が現代から江戸時代にタイムスリップする話. 売れっ子作家の中には,【いま売れる物語の公式】が暗黙知として宿っているのではないだろうか.

問題解決プロフェッショナル 「思考と技術」

イメージ
問題解決プロフェッショナル 「思考と技術」 を2章まで読んだ. 2章の技術編では有用な知見が多かったのでここにまとめておく. 【はじめに】 問題の原因や解決策を考える際に,思いついた順に箇条書きにする人はいないだろうか? はい,私です. 苦労して列挙したリストが増えれば増えるほど混乱して最終的に考えたことが無駄になったり... 次元の異なる要素が同じカテゴリーの中に列挙されていたり... (例 : アメリカ,中国,オーストラリア, 京都. ..) 箇条書きの問題点は3つ. 1つは 漏れ . 「これ以外にも要素は無いですか?」 という問いに胸を張ってNOと言い切れるだろうか. 2つ目は ダブり . 一見異なるもののようでも,実は本質的に同じことを言っていたりする. 本来同じものは極力排除したい. 最後は 次元の違い . 分析結果をプレゼンテーションする際に,次元の異なるものを一緒くたにすると聴衆に伝わらない. 他人から見ても分かりづらいし,時間が経てばそのうち思い出せなくなる. こういった問題を無くすために,システマティックに思考の整理を行うツールとしてMECEとロジックツリーがある. 【MECE】 MECE (Mutually Exclusive and Collectively Exhaustive)とは,もれなくダブりのない状態のこと. 簡単な例としてはジャンケンにおける手. 「グー・チョキ・パー」,これでMECE. フレームワークと呼ばれる決まった切り口を使って,MECEな状態に問題を切り分けることで思考の整理を行う. ・代表的なフレームワーク   3C +1C : 顧客(Customer),競合(Competitor),自社(Company) + 流通チャネル(Channel)   ビジネスシステム  : 製品が開発されてから市場に出るまでの流れを時間軸で整理したもの   4P  :  製品(Product)、価格(Price)、流通(Place)、プロモーション(Promotion)   事業ポートフォリオ  : 相対マーケットシェア × 市場成長率 【ロジックツリー】 問題の原因を深堀りして,解決策を具体化し,因果関係を可視化する技術のこと. 思いついた順の箇条書き,即ち根拠のないアイディア出し

C++プログラミング入門(5) // 配列とnew,ポインタと参照

配列とnew 【int array[5];】と【int *array = new int[5];】の違い ・配列には 「必要なメモリの大きさがコンパイル時にわかっている」 + 「関数が終わるときに必ず解放する」 制限がある ・newは上記の制限がない分, メモリの空き場所を探すのに時間がかかる 参照とポインタ ・参照は必ず初期化する必要があり,指すものを変えられない.(安全) ・ポインタは上記の成約がない.(気をつけるべし) データ量の大きいクラスTを引数とする関数func (例えばこんなの void func(T t){} ) を呼び出した時,コピーが生成される. このムダを省くために, 「書き換えるときはポインタ渡し,書き換えないなら参照」 を徹底するべし. (ポインタでも 書き換えたくない場合はconstをつければ参照と同様な効果が得られるが,呼び出し側のコードを見ただけでは判断できなくなるので使い分けること)

C++プログラミング入門(4) // C++文法について

【テンプレート】 #include using namespace std; // Type型のメンバ変数をもつクラスA template class A{ private: const Type data; public: A(){ cout << "default constructor\n"; } A(Type d):data(d){ // 初期設定なので代入 cout << "constructor\n"; } /* A(Type d){ data = d; // constなメンバに代入はできない cout << "constructor\n"; } */ ~A(){ cout << "destructor\n"; } Type getData(){ return data; } }; int main(){ A hoge_float(1); A hoge_int(3.3); A hoge_double(3.3); cout << "hoge_float:" << hoge_float.getData() << endl; cout << "hoge_int:" << hoge_int.getData() << endl; cout << "hoge_double:" << hoge_double.getData() << endl; return 0; }

C++プログラミング入門(3) // File入出力

ステージデータの読み込み機能をつけて任意の名前のファイルを読み込める構成にしたい. エラー処理等は全く考慮せず,ステージの幅と高さについては固定長のものしか扱えない点は改善すべき. void readFunc(char *fileImage,const char *filename){ ifstream inputFile(filename,ifstream::binary); inputFile.seekg(0,ifstream::end); int fileSize = static_cast<int>(inputFile.tellg()); inputFile.seekg(0,ifstream::beg); inputFile.read(fileImage,fileSize); } int main(){ char filename[100]; char *gStage; gStage = new char[gHeight*gWidth];     // 読み込み開始-------------- cout << "Please input a file name:"; cin >> filename; readFunc(gStage,filename);     // 読み込み完了-------------- return 0; } 【備考】 2次元のように見せるクラスの定義では,非公開メンバとしてポインタ・縦・横をもたせ,参照用の公開メンバ関数を用意する. メンバ変数には先頭にmを付ける.

C++プログラミング入門(2) // 前回のまとめと条件分岐の考察

イメージ
【前回のまとめ】 ゲームとは 入力 を受け取って,それを 反映 させ,結果を 表示 する処理の繰り返しである. イメージは, while(1){ 入力; 反映; 表示; if(クリア){ break; } } (チェック) ・文字列定数の途中での改行 ⇒行末に"\"を付ける ・グローバル変数の命名規則 ⇒接頭辞としてgをつける+キャメル記法で読みやすく ・constの使い方 ⇒変更する予定のないものには極力付ける ・列挙型のメリット ⇒未定義の値を許容しない,デバッグ時列挙型の名前で見られる. なお,列挙型の名前は大文字で. ・メモリの解放 ⇒delete と ポインタに0代入 ・1次元配列を2次元的に扱う ⇒ state[y*width + x] : 幅widthの2次元配列における(x,y)成分にアクセス. ・移動は差分で ⇒ 現在地 + 移動幅 で記述するとプログラムが簡潔に書ける. ・計算で求まる情報は極力保存しない.矛盾が出ると厄介だから ・キャラの移動時にはステージ内かどうかを先に確認 ・三項演算子 ⇒ a = b ? c : d (bがtrueならa=c; bがfalseならa=d;) 【条件分岐における思考過程】 キャラクターが動作するときのupdate関数では,定義されない動作が無いように, MECE になるように網羅的に条件分岐を考える. 今回は,列挙型のObjで定義された SPACE,WALL,GOAL,MAN,MAN_ON_GOAL,BLOCK,BLOCK_ON_GOAL,UNKNOWN, という8パターンの状態と, 現在地,移動先,移動先の奥 における組み合わせを網羅的に考える. 単純に考えると8×8×8通りあるように見えるが,あり得ない組み合わせ(動作が許容されない,そもそもありえない)を省いて考えるとさほど考える状況は少ない. 動作が許容されないケースの例としては移動先が壁である場合などがある. そもそもあり得ない場合としては,現在地にMAN,MAN_ON_GOAL以外が入るケース. 現在地は2通り,移動先は4通りに絞られる. コードとして定義が必要な場合は,6通りのケース(【参照:概念図】)のみ. 簡単のため,今回は愚直

Blogger上にプログラムソースをきれいに表示する方法

Blogger上にプログラムソースをきれいに表示する方法として,ここ(  http://toldalie.blogspot.com/2012/01/blogger_31.html  ) が参考になりました. まとめると, (i) HTMLコードをここ(  http://www.way2blogging.org/widget-generators/syntax-highlighter-scripts-generator  )で生成してコピー. (ii) Bloggerの ”デザイン>HTMLの編集>” でテンプレートのソースを表示し(i)でコピーしたコードを</head>の直前にペーストする. (iii) 投稿記事をHTML編集モードで開いて以下のタグを挿入. <pre class="brush: c++ ; tab-size: 2"> // コードを記述 </pre> 上記ソースはC++プログラムを貼り付ける場合の例. 実際に使ってみたら, 作成された HTML ファイルは承認できません: タグが破損しています: とか怒られる. 無視して記事を投稿すると,ソースが変わってたりする. いろいろ調べたら,”<”とか”>”はHTMLにおけるタグと勘違いしちゃうよ!ってのに気付いて. "<" ⇒ "&lt;" ">" ⇒"&gt;" に置き換えたら怒られなくなった. SQLインジェクションとかサニタイジング周りを昔浅く勉強してたのですぐトラブルシュート出来た. 参考サイト:  http://www.imymode.com/lab/keiji03.htm

C++プログラミング入門(1) // 倉庫番プログラムの実装

イメージ
うまく修論が通れば大学院を卒業して,晴れて社会人になる. 入社試験でC++のプログラミングを課されるくらいなので,きっと仕事でC++を使うんだろう. そこで,軽く文法等を覚えるために入社前に勉強することにした. 【現状】 研究ではもっぱら数値計算用ソフト(MATLAB)のみを使っており,メモリ等を意識してプログラムを組むことは無い. 変数の宣言やメモリの確保のような行儀の良いプログラムを書くのは3年前くらいにCでかじった程度. 純粋に文法を勉強するのもあほらしいので, ゲームプログラマになる前に覚えておきたい技術 っていう分厚い本を買って読むことにした. 第一章ではいわゆる倉庫番のプログラムのお勉強. 読みすすめていくと,プログラムから醸しだされる著者の優秀さを感じ取った. 優秀なプログラマの書くプログラムは読んでて感動する. 本を読んでみて重要だと思った点をコメントアウトで追記しつつプログラムを組んだ. 以下はコンソール上で倉庫番を楽しむプログラム. コピペしてコンパイルすれば動くはず. #include<iostream> using namespace std; // ステージのオブジェクトの定義 // 列挙型に出来るときはなるべく使う. // 利点は2つ.変な値が入らない+デバッグの際に列挙型の名前で確認できる. // 区別のために要素は大文字. enum Obj{ // 列挙型は単なるint型 SPACE, // 0 WALL, // 1 GOAL, MAN, MAN_ON_GOAL, BLOCK, BLOCK_ON_GOAL, UNKNOWN, }; // ステージ // グローバル変数はどこからも見えるので接頭辞をつけて区別する. // いじらない変数にはconstをつける. // キャメル記法推奨. // 文字列定数の途中で改行する場合は文末に\が必要. const char gStage[] = "\ ##########\n\ #    p   #\n\ #  .o  0 #\n\ #        #\n\ ##########"; // 幅と高さ const int gHeight = 5,gWidth = 10; void initia