無気力生活 (ノ ´ω`)ノ ~゜

脱力系エンジニア。てきとーに生きてます。

そして何よりも、C++が足りない

本日、某所で某企業の面接を受けてきました。技術に強い所で有名な企業さんで、当然ホワイトボードにコードを書く問題が出るわけです。
自分に出された課題は、一桁の数値で割り切れる値と、各桁毎のいずれかにその数値が存在する場合のみ、文言を出す関数を作れというもの*1
言語はC++指定です。C++...

そこでわたくし、
やってしまいました
まあ、その時書いたコードを見てくれ。本当にひどいから。

//
// 入力値: value = 6, 31, 11. 301  radix = 3
// 6, 31, 301の場合にHogeと出力されること。
//
void func(int value, radix) {
  // ここで割り切れる値の場合を処理
  if(value / radix > 0 && value % radix == 0) {
       puts("Hoge");
       return;
  }
  // ここから下は、各桁数に値があるか判定してる
  char* temp, * radix_char;
  sprintf(temp, "%d", value);
  int length = strlen(temp);
  itoa(radix, radix_char, 10);
  int i;
  for(i = 0; i < value; i++) {
    if( *(temp+i) == *radix_char) {
       puts("Hoge");
       return;
    }
  }
}

はい、真ん中辺りのchar* temp, radix_char;を見てみましょう。
初期化してませんね。
char*を使って文字列を扱う場合、(char*)malloc(sizeof(char) * 256)みたいな感じで、メモリ領域を確保してあげる必要があります。
このコード書いて動かしてみれば分かると思いますが、見事に死にます。

C++書いたのが相当昔で...というのは言い訳でしかなく、本来、開発者として見につけておかなければいけないものです。
それが面接の場で書けなかった。凹みますorz。

さて、今回の問題では、mallocするほど厳密なメモリ管理は必要とされないので、テキトーに領域確保してくれる、char[ ]を使って行うべきです。char[ ]に直して書いてみます。

void func(int value, radix) {
  if(value / radix > 0 && value % radix == 0) {
       puts("Hoge");
       return;
  }
  char temp[256] = {'\0'}, radix_str[2] = {'\0'};
  sprintf(temp, "%d", value);
  int length = strlen(temp);
  sprintf(radix_str, %d, radix);

  int i;
  for(i = 0; i < value; i++) {
    if( temp[i] == radix_str[0]) {
       puts("Hoge");
       return;
    }
  }
}

sprintf();を実行しているとこでは、itoa()を使っても動くと思います。ただ、itoa()は非標準で推奨されていませんけども。

私はこんな風に解いたのですが、「もっといい方法あるよ」って方はコメントにて書いて頂けるうれしいです。

*1:問題は、若干変えています

きっと、日本のITベンチャーの未来は明るい 〜国内ITベンチャーさんとの面談会に参加して〜

昨日都内某所で、今をトキメクITベンチャーさんとの面談会を受けて来ました。
言わずとしれた超有名な企業さんと直接お話できる機会とのことで、喜び勇んで参加させて頂いたのですが、

参加者さんもレベル高すぎて、自分の場違い感が甚だしい...(;´Д`)

いろんな企業を飛び回っているとてつもない経歴の方だとか、自作のiPhoneアプリ持ち込んで企業さんに売り込んでる人等、流石に大手を受けるだけあって参加者さんもハイレベルです。それに比べて...いや、虚しくなるから触れないようにしよう。そうしよう。
ご縁がなかったとしましても、そんな企業の中の方とお話できただけでもめっけもんです。外からは見えない実情も聞かせてもらえましたし。

さて、この面談会に参加して感じたことを徒然と書き綴ります。
なお冒頭で、某所という言い方をしたのは、詳細を書いていいか確認取り忘れたからです。*1
なので特定の企業の話は除外します。あくまで全体を見た上での感想とか、そっちのお話になります。

とにかく、エンジニアが技術好き過ぎる

一番よい印象を受けたのがこの部分です。開発大好き、最新技術大好き、な人々が集まっています。
それこそ、技術書を書いていたり、某言語のコミッタやっていたりと、実績がある方々がたくさん入社されているそう。
技術に対する熱意もともかく、寝食を惜しまずコーディングするのが苦にならない、その上、内外を問わず勉強会に参加するいったお話を伺いました。それだけ技術が好きなんです。

実力第一主義。新人であっても正当に評価される企業体質

「21歳でマネージャクラスの方がいます」「(; ゚д゚)まじっすか!」
所謂”年功序列”というものは存在しません。成果が全てです。成果次第で誰でも出世できます。とのお話を伺いました。

...私個人の意見として、エンジニアであれば実力主義であるべきだと考えています。
年上だから、勤続が上だからといった理由で、待遇面に差を設けるのは間違っています。
会社に貢献している技術の高い方から出世する仕組みで有るべきなんです。そういった観点から言わせてもらえば、至極自然な環境だと思われます。ここで働いている方々はきっと幸せだと思うのです。

ただ、実力主義の文化ですのでスキル無い人には厳しいのは事実。
「できない人は助けない、助けてる隙がない。食らいついてこれる人にだけ入社して貰いたい」と仰っていました。

ディレクター、デザイナー、プログラマーが一丸となって作り上げる。良いアイデアは平等に採用される。

基本的な分業はあるのですが、プログラマーがゲームのアイデアやデザインに意見を述べて、それが採用されることが多々あるそうです。
一般の開発ですと「餅は餅屋」状態で、担当者に意見を伝えても採用されることはまずないです。面白いアイデア、意見があれば即刻採用。この柔軟性はベンチャーだからこそ発揮できる強みですね。

企画→サービスインがとてつもなく早い

一般的なタイトルですと、開発期間2-4ヶ月程度。企業さんによっては、1ヶ月程で企画から実装リリースまで終わらせてしまうそうです。
その驚異的なスピードを支えているのが、PDCAサイクルを極めて高速に回すことにあるとのこと。
打ち合わせで企画伝える→その日のうちにモックが出来上がってる→コレイイね。採用! まであっと言う間に決まってしまうこともあるそう。
ある程度形が明確になっていれば、作ったものを動かし、動作をチェックし、改善していくことで最終的な成果物に繋がりますもんね。

ただ高速でサービスインするためには、泊まり込みも勿論あります。大変ではありますが、やりがいのある仕事だと感じました。

終わりに

今の日本のITベンチャーには、資金も技術も、先駆者魂もある企業です。海外展開も見据えた大きな野心も持っています。
多重請負が蔓延して閉塞間漂う日本のIT産業で、数少ない”世界で戦える企業”です。
日本の誇るソフトパワーを持って世界で戦う。素晴らしいことだと思います。

面談会に参加して考えを改めたことが一つあります。
ガチャだったり重課金だったりのお話*2はありますけど、企業さん自体はちゃんとユーザーを見ています。
課金前提のゲームバランスになってしまわないか、ヘビーユーザーもライトユーザーも楽しく遊べるか。そんなバランス調整が一番難しい、と仰った企業さんがいました。内容を叩かれれば落ち込むし、高評価されれば嬉しいとのこと。

より良いものをユーザーに使って貰えるのが目標だし願いでもある。企業さんとの面談を受けてそんなことを思っているのではなかろうか?そう感じました。

自分に自信がある人、技術をもっと伸ばしたい人、ユーザーに近い仕事をしたい人。ITベンチャー企業に参加してみては如何でしょうか?
きっと有意義な体験ができると思いますよ。

*1:だったら書かない方が...と思いましたが、溢れ出す想いをぶちまけたかったのでエントリ化です

*2:私個人は問題とは考えていません。マネタイズを限界まで突き詰めた結果と考えています。

Windows8DPをVMwareでインストールしてみた

ついに出ましたね。Windows 8 Consumer Preview。
イメージを入手したので、VMware使ってインストールしてみたいと思います(`・ω・´)
今回自分が使用するのは64ビット版日本語です。

なお、ISOイメージはMicrosoft公式サイトで配布されています。(32bit,64bit両方あります)
http://windows.microsoft.com/ja-JP/windows-8/iso
プロダクトキーもありますので、インストール時に聞かれたら使って下さい。

インストール方法

まずは、いつものようにVMware Playerをインストールしておき、新しい仮想マシンの作成を行います。
最初の注意点。インストールウィザード冒頭では、”後でインストール”を指定します。

冒頭でISOファイルを指定する方法では、VMwareの簡易インストール機能が適応されてしまいます。
Windows8ではこの簡易インストールが動作せず、OSのインストール時に異常終了が発生しますので注意しましょう。
OSの種類を聞かれます。Windows8は当然のように存在しませんので、Windows7を選びましょう(32,64ビットはISOファイルに合わせる)
そのまま適当にウィザード進めていくと、仮想マシンの作成準備が終わり、ハードウェア構成の確認を促されます。

ここで追加の注意点!
冒頭に”後でインストール”を選択したため、ISOファイルがCD/DVDでマウントされていません。ハードウェアのカスタマイズボタンを押下し、CD/DVDの項目に、Windows8のISOファイルを指定して下さい。
これでインストールする準備が整いました。完了ボタンを押下し、インストールを開始しましょう。

インストール開始後、Windows8のISOファイルが読まれて、Windows8がブートされます。

え?魚?
Dveloper Preview版では窓マークでしたよね?おもいっきり意表を付かれました...
こ、これ本当にWindows8で大丈夫だよね(・ω・;)

暫く待っていると、インストールウィザードが表示されます。

よかった、ちゃんとWindows8だった。
インストールウィザードが起動すると言語やタイムゾーン等を聞かれます。この辺はいつものWindowsですね。
ウィザードを進めていくと、インストールの種類を聞かれます。ここではカスタム設定を選択しましょう。
インストールドライブを選択し、右下の"詳細な設定"で新規を選び、ドライブをインストール可能な状態にします。
そして、OK。後は勝手にインストールされるので暫く放置しておきます。

Windows8の起動

そうこうしている間にインストールが終わり、Windows8が起動しました。初回起動時にはアカウント設定ウィザードが表示されます。
Windows Liveアカウントが要求されるのですが、無視してもらっても構いません。*1
Liveアカウントの代わりに、今までのWindowsと同じくローカルアカウントを設定すればWindows8の使用自体は可能です。

アカウント設定が終わると、Metroスタイルの素敵なスタートメニューが表示されます。

Windows8ではこの画面が各機能のハブとして扱われるようですね。殺風景なデスクトップに慣れた人には違和感バリバリだと思われますw
ここまで持っていければ、自由に使用することができます。
後は、ストアが使えるようになったことと、既存のWindowsとの違いについて、軽めにまとめます。

待望のストアがCP版で

Consumer Preview版には、Developer Preview版に無かった”ストア”が使用できるようになっています。
すでにアプリも登録されているようです。アプリをインストールする場合、Windows Liveアカウントでログインすることを要求されます。

その場で認証するのではなく、いちいちログインし直すのが面倒ですね。まあ、製品版では修正されてるでしょう。

ストア経由のインストールは凄く楽でした。項目選んで”インストール”とかやればあっと言う間です。
問題だったのが、ストア画面の閉じ方。
ストアに限らず、Metroスタイルのアプリ全てに共通するんでしょうが、一見して閉じるアクションを行うボタン等はありません。
右クリックしても、BackSpaceキーを入力しても変わらず。

色々試した結果、画面上部をスクロールすることで、アプリを終了できるようです。
画面上部にカーソルを持って行き、手のポインタアイコンに変わった所でドラッグします。

そのまま画面下に向かってスクロールすると、アプリのプレビュー一覧っぽい画面が表示されます。画面下部までスクロールすると、起動中画面のプレビューも移動します。
画面下に移動させてドラッグを解除するとアプリが終了し、スタートメニューが表示されました。

今までのWindowsと同じ使い方はできる?

結論:できるが馴れが必要

デスクトップはスタートメニューにある、”デスクトップ”を押下することで表示されます。表示するとこんな感じになります。

あれ?見知ったものがありませんね。どうやら、いつものスタートメニューは廃止になっているようです。
Windows移行が少し心配ですね。Ribonインタフェースの時と同じように別物だと考えてた方がよさそうです。
...Developer Preview版では残っていたんですがね。
ショートカットキーは今まで通り使えます。
ですので、Winキー+Eでエクスプローラ、Winキー+Rで指定して実行。ショートカットキーが大活躍するOSになったと思います、はい。

スタートメニューに戻る際は、デスクトップ左下にカーソル持っていき、画像の状態の時に左クリックしましょう。

ちなみに、この状態で右クリックするとシステムプロパティ等のメニューが表示されます。
慣れるのに時間掛かりそう(;´ω`)

ストア以外からアプリケーションをインストールできる?

結論: できる

例として、Google Chromeをインストールしてみました。
IEはもともとあるので、そこでChromeを検索し、インストーラーを取得します。
後は普通に、インストーラを実行するだけ。簡単ですね。

今までのソフトは動く?

結論: 多分動く

Windows8のバージョンは現時点で6.2.8250です。つまりカーネル自体は、7やVistaとは同等です。
Windows7で動くものであれば8でも動くと思われます。ChromeVimも動きますし。

ドライバも大丈夫じゃないかな?ペンタブレットの筆圧検知も生きてます。

期待は高く

製品版はまだまだ先ではありますが、エクスプローラやタスクマネージャがより使いやすくなっており、現在使用している7より快適になりそうな予感がします。

Developer Preview版であったマウスとキーボードのモッサリ感も解消されていますし。
なによりWindows8自体が低いスペックでも動作するように作られています。
Windows Vistaの時みたく、普及している標準PCがパワー不足でOSが使い物にならない、といった問題は無いと考えています。

懸念があるとすればUI操作でしょうね。今までと違う感覚なので、慣れるまでが大変だと思います。
後は製品版がどのように調整されて出てくるか。リリースされるまでのお楽しみです。

*1:Metroアプリ使う際に要求されることが多いため、設定しておくほうが無難だとは思います。

これはMac? likeなLinuxディストリ ComiceOSをインストールしてみました

何気なくITProを眺めていたら、こんな記事を見つけました。

Mac風の新Linux OS「Comice OS」が公開
http://itpro.nikkeibp.co.jp/article/NEWS/20120210/381017/

Pear OSの後継にあたるディストリで、UbuntuベースでMac OS Xのような使い心地を追求しているらしいです。
記事のスナップを見る限り、ぱっと見Macそのものですw(特にAPP Storeアイコン辺り)
これ、Appleかからクレーム付くんじゃないだろうか...

このOSのバイナリを早速落としてみたので、VMware Playerで導入してみたいと思います。
注意点として本OSはベータ版で動作が不安定です。頻繁にフリーズが発生しますので、試すのは自己責任でお願いします。

VMware Playerを開き、新しい仮想マシンを作成します。ISOを指定すると不明なOSだと言われますが、無視して構いません。
その後のOS選択画面で、LinuxUbuntu 64ビットを指定してあげれば良いです。
起動すると、ブートメニューが表示されます。

あれ?なんかこのマーク見たことあるぞw
Pearという名前に違わず、洋なしをイメージしたロゴになってますが、りんごの代わりに洋なしが齧られてます*1
...これ、本当に大丈夫か(;´д`)

ここでInstallを選択するか、しばらく放っておくとインストールが始まります。
まずは言語選択メニューですが、なんか画面の解像度が小さく、下部の「次へ」ボタンが表示されていません。

このままだと操作ミスがありそうなので、解像度を大きくしておきましょう。
画面上部右端の洋なしアイコンを選択すると、「Displays」と記載された項目があります。初期値では800x600ですが、これを1024x756に変更します。
「Apply」→ 「Keep this configuration」でOKです。その後、設定ダイアログを閉じます。Macと同じくダイアログ左上です。

設定が終わったら、言語を選択し、Pearのインストール準備ダイアログが表示されます。
ネットワークの接続が要求されているため、Proxyなど特殊な設定があれば事前に設定しておく必要があります。
ただ困ったことに、インストール処理中はコンソールを開くことができず(見当たりませんでした)、GUIで設定する必要があります。
洋なしアイコンから「System Settings」-「Network」-「Network Proxy」で"Manual"を選択し、設定項目を入れます。

ネットワークの設定が終わったら、「次へ」を押下します。アップデートの入手やサードパーティ製アプリのインストールはお好みで。
めっぽう時間がかかりますので、飲み物取りに行くなりして気長に待ちましょう。

画面が切り替わると、今度はインストールの種類を聞かれます。
今回はVMwareでのインストールなので、特に何も考えず、"ディスクを削除してPearをインストール"を選択します。
実PCにインストールする場合は、"それ以外"を選択し、パーティションの設定を行なって下さい。その後、使用するドライブを選択しインストールします。ファイルシステムUbuntuと同じくext4のようです。

インストールが開始されると、ロケーションとキーボードレイアウトが聞かれます。
使用する環境に応じて適宜設定してあげましょう。
次に、アカウントの設定があります。ここも特に悩む部分は有りません。適宜入力して下さい。

インストール時の設定項目はこの程度です。インストール自体の問題は動作が不安定でよくフリーズすること以外はありませんでした。
インストールした後再起動し、しばらく待つとお馴染みのGrub画面が出てきます。
"ubuntu with Linux 〜"を選択するか、しばらく待っていればComiceOSが起動します。インストール時に設定したアカウントでログインしましょう。


はい、これでインストール終了です。後はapt-getで好きなパッケージ入れるなり、Webするなり好きにいじり倒しましょう(`・ω・´)

*1:ところで洋なしって直に齧るものなんでしょうか?昔興味本位で齧ったことあるのですが、残留農薬の独特の味と皮の苦味で悶絶した、しょっぱい記憶があります

はてなにお引越ししました

相当前にアカウント作ったっきり放置しておりました、しのゆ〜です。

本日からこちらでブログを始めさせて頂きます(`・ω・´)

以前のブログより、記事を引っ張ってきております。
なんらかの参考となれば幸いです。


なにかツッコミどころあれば遠慮なくご指摘をば。
よろしくお願い致します。

AndroidのアプリがWindowsでも使用できる”BlueStacks”

Windows上でAndroidのアプリを使用することができるBlueStacksがロンーチしてました。
形態上は、デスクトップに常駐するwindowsガジェットです。
説明見るかぎりだと、自身のAndoroid端末にインストールしているアプリをクラウド経由でWindowsに送信し、高性能なエミュレータ上で動かすもののようです。

対象はWindows7以上と、Android API9(2.3.x)以上になります。
環境ある方はぜひ試してみてください。

これを使うためには、WindowsAndroid両方にアプリをインストールする必要があります。
Windowsの方は公式下部のDownloadから。
Androidの方はAndroid Marketから、"BlueStacks Cloud Connect"で検索してください。

インストールは特に悩むことはないと思います。
インストール直後、Windowsの方には幾つかアプリが登録されています。
アプリを追加するには、ウィジェットをクリックして表示される、"Get More Apps"をクリックします。

画像
すると、Facebookアプリとして認証を要求されます。

Facebook登録していないと、アプリを追加することができません。←重要

Facebookアカウント持っている方はそれで、ない方は作るなりしてください。
...一応作ってて良かったFacebookアカウント。
Facebookアカウントでログインすると以下の画面に遷移します。
ここが、Cloud-Connectのホーム画面になります。

画像
...現在登録できるアプリです。12個と少ない上に、メジャーでないものしかありません。
BlueStacksにはAndroid端末からアプリをインポートできる機能があります。とりあえずはこれを使いましょう。

先ほどのページの左上に、"Cloud Connect"ってリンクが表示されます。
このリンク先に行くと、中央部分にあなたのPhone PINが表示されています。
このPhone PinをAndroid側のBlueStacks Cloud Connectで入力すると、Android端末にインストールされているアプリの一覧が表示されます。
インポートしたいアプリにチェックを入れて、BlueStacks Cloud Connectの画面上部に表示されている「Sync」ボタンを押下するとインポートが開始されます。(少し時間かかる)
終了後、Cloud-Conenctのホームから、再度"Cloud Connect"画面に遷移すれば、先程インポートしたアプリが表示されます。あとは、この画面でアプリをSubscrideするか、しばらく待てばwindows側で使用できるようになります。

画像

動作自体は問題ないのですが、3点ほど注意事項があります。

  1. ロケールがen-US固定
  2. 日本語が入力できない
    多分ロケールが英語固定で日本語対応したIMEではないためだと思われます。
  3. 使用できないアプリがある。
    Angry Birdsが該当します...BlueStacksのPro版でないとダメなようです。
  4. まだまだアルファ版とのことで操作感はよろしくないんですが、普通のアプリ程度なら問題なく使用できます。 これからの開発に期待、ですね(・ω・)

プログラマーの適性がなかったらSEをやればいい

プログラマーの適性がない社員は、SEを目指せばいい。プログラマーは3か月程度で育成できるのだから、(いつまでも)プログラマーに甘んじていることは会社にとって損失だ」
新し任期を務める新社長が、就任日の当日にこんなことを言い放ったことで考えたこと。

おいおい、ちょっと待てよ(´・ω・`)

プログラマーを真っ当に務めれない人間がSEにふさわしい仕事ができるとはまず思えません。。
業務のことには詳しいが、プログラムができない人間に、まともなシステム設計はできないでしょう。。

この業界は、勤務時間が長くてキツイとかよく言われています。
デスマーチのような到底正常とは思えない状態が発生するのも、プログラムがろくにできないSEが現実的に実装不可能な仕様を持ってくることにある。
一番最悪なパターンが、仕様がザルな上に、現場の意見も聞かずに勝手に実現不可能な見積もりを出してしまうこと。
この二つが合わされば、あっという間に楽しい楽しいデスマーチが始まります( ゜ω゜)
3Kの業界と呼ばれる不名誉な呼び名も、プログラムを知らないSEが駆逐されれば無くなるのかもしれません。

SEとプログラマーの垣根を何を根拠に分けているの?
SEとプログラマーに2分しているとは即ち、”基本設計とかの上流部分はSEがやるもので、プログラマは詳細設計以下をするものだ”の考えがあると思われます。
よく聞くのが、プログラマーはコードを書く仕事で、SEは顧客から要件を纏めて仕様に落とすのが仕事。この区分けで垣根を分けているのかな?

おいおい、ちょっと待てよ(二回目)

システム設計する方も実装する方も仕事を請けるからには、顧客の要件を適切にくみ取って適切なシステムを納品する義務が発生します。
業務も実装も詳しい開発者がシステム開発していくことが一番効率的で、実装を行うと同時に仕様の問題点を精査し、顧客が望む最適なシステムを作り上げなければなりません。
すべての設計者は開発者であることが望ましいし、逆でも同じことが言えます。
つまりSE(設計者)とプログラマー(開発者)の二分は、無理やり役割を分離しているだけであり、システム開発にとっては悪影響しかないのではないかと思います。

技術を軽視するソフトハウスがこの先生きのこるには

前の社長は、叩き上げで会社を設立した、いわば現場の人間。技術者を大事にしてたし、(しっかり取り組んでいたかは定かではないけど)技術者育成に力をいれていました。一方、新しい社長は大手SIerからうちに来た、いわば人を使う側の人間。だからこそ、
プログラマーは短時間で育成できる部品であり、大事なのはSE。頭が良くないと立派なSEになれないから採用は学歴重視”
とか、古い考えのまま突き進んじゃう。
まあ、もともとの立場が違うのだから認識が異なることは仕方がないとは思いますが・・・。

ですが、現実はその古い価値観のまま戦える状況ではありません。
技術者を大事にしない会社は、競争に耐えることができません。技術を磨いても部品のように扱われるのであれば、技術者は育たない上に、もともと技術を持つ人材は離れていきます。
会社自体の技術力が落ちますから、単純なシステム構築しかできなくなります。そうすると、他のソフトハウスとの競争に負けてあっという間に駆逐されてしまう。
ただでさえ、安い労働力を武器にして、単純な仕事は元より高度な仕事を請け負うアジアのソフトハウスと競争できるわけがない。

技術者を大事にして技術力を会社のウリとすることで、新しいイノベーションが生まれ、ビジネスを広げることができる。しょっぱい技術力で仕事を請け負っても、それだけで事業を拡大できる時代は終わっているのです。



今の会社にいろいろ言いたいことはあるけど、最新の技術の話をすると引かれる会社には居場所がが・・・。新しいことにチャレンジせずに延々と同じような仕事をしているような会社にいると、技術者としての成長は見込めず腐っていくだけな予感です。(´・ω・`)辞める話をしているのは正解なのかもしれません。