2012/12/18

これからのAndroidアプリはxhdpiとhdpi

今まではアプリの画像リソースを用意する時は、hdpiをメインに余力があれば、mdpiも用意するというのが主流でしたが、Android4.0以上の端末がたくさん発売されて、それにともない、高解像度の端末も増えてきました。

公式の情報によると2012年12月3日時点でldpiが約2%、mdpiが約18%、hdpiが約51%、xhdpiが約29%になっています。
これからはldpi、mdpiの端末が減っていき、xhdpiの端末が増えていくはずなので、画像リソースはhdpi、xhdpi用の2種類を用意するのがよさそうです。

xhdpiの端末でもhdpiの画像リソースがあれば、表示されるようになっていますが、表示する上で問題があります。

わざとhdpiにだけ画像をおいて、試してみます。
今回はAndroidのマーク(280x280の大きさ)の画像を用いました。
左が、hdpiで、右がxhdpiのキャプチャー画像です。


見た目の大きさを同じにするためにxhdpiの端末では画像がシステムによって拡大されています。
拡大するということは、画面に描画する際に画像処理が入るので、バッテリーとメモリを消費することになります。
今回のテストでは、画像が一つなので、あまり問題ありませんが、アプリをフルデザインしていると、アプリが強制終了する原因にもなります。

最近はアプリのデザイン自体は1280x720(xhdpi)で作ることが理想的(詳細は「デザイナーがコードから読み解く、Androidアプリのデザインの幅を広げるコツとTips」)なのですが、その大きさで作った画像素材を何も考えずにhdpiに入れて実装し、苦労してレイアウトを調整(viewのサイズをハードコーディングしたり)して、作ってたことがありました。そのアプリは、リリース後、リソースが見つからないなどのバグ報告がちょこちょこ上がってきていました。

そしてリソース画像の用意ですが、デザイナーさんがxhdpiとhdpiの2種類を用意してくれる時はそれでいいのですが、1280x720でデザインして、プログラマーのもとにやってくるのはxhdpi用の画像だけという場合があります。
自分が関わっているプロジェクトでも、xhdpi用の画像だけしか渡されませんでした。

なのでこちらですべての画像をリサイズしなければいけませんでした。

自分が画像をリサイズする際に、一つ一つ変換するのはとてもめんどくさかったので、macに標準で入っているAutomatorを使いました。

Windowsで開発されている方は、画像を一括変換できるフリーソフトがあると思うので、そちらを使ってください。

Automatorはあまり複雑なことはできませんが、単純な作業を任せるのに向いているので、まだ使ったことない人は色々ためしてみるといいですよ。

今回はxhdpiの画像をhdpiの画像に変換するための使い方を紹介します。
mdpiを1とした時に、hdpiは1.5、xhdpiは2の割合なので、xhdpiの画像を75%にしたものがhdpiの画像になります。

その作業をAutomatorでやってみます。
  1. まずは、変換作業に使うフォルダを作ります。どこでもいいので「xhdpi」と「hdpi」のフォルダをつくり「xhdpi」に画像リソースをすべて入れます。
  2. Automatorを起動し、「ワークフロー」を選択します。
  3. 左のメニューから「ファイルとフォルダ」→「Finder項目を検索」を選び、右のスペースにドラッグ&ドロップします。
  4. 「Finder項目を検索」の詳細を設定します。検索を「xhdpi」にして、「ファイル拡張子」が「png」「である」に設定します。
  5. 左のメニューから「写真」→「イメージをサイズ調整」を選び、右のスペースの「Finder項目を検索」の下にドラッグ&ドロップします。
  6. 途中「Finder項目のコピー」を追加するかどうかのダイアログが表示されるので、「追加」を選択します。
  7. 「Finder項目をコピー」の保存先を「hdpi」に設定します。
  8. 「イメージサイズを調整」で「比率(パーセント)指定」「75」に設定します。

上記の手順でxhdpiの画像からhdpiの画像を複製するワークフローの完成です。
あとは右上の「実行」ボタンをクリックすれば、処理が走って、すべての画像を複製してくれます。Automator便利!
xhdpiとhdpiで同じ名前の画像ファイルができるので、Androidプロジェクトのresフォルダにそのまま入れて大丈夫です。

2012/12/02

海外のサイトにレビュー依頼してみた。

本エントリーはAndroid Advent Calendar 2012の12/2裏エントリーです。

12/2の表エントリーは@rkisatoさんの「NOT専門家向け・Android一問一答」です。そちらもあわせて御覧ください。

今回はAndroidアプリを海外に向けて宣伝するために海外のレビューサイトに記事掲載依頼をしたのでそのレポートという形式になっています。

個人で作っているデベロッパーさん、また会社でアプリを作っている企業さんで海外に向けて宣伝したい人は参考になると思われます。

このエントリーを見ている人は個人でAndroidアプリを作ったことがあったり、会社でAndroidやってる人だと思います。

どうせなら、自分が作った、もしくは製作に関わったアプリはできるだけ多くのユーザに使ってもらいたいですよね。

現在、アプリを宣伝する方法は次のようにいろいろあります。

レビューサイト

OCTOBAさんとかAndroiderさんとかに依頼してレビュー記事を掲載してもらいます。
依頼して確実に掲載されるわけではないですが、無料です。

プレスリリースを打つ

個人のデベロッパーさんはなかなか打つのは難しいと思います。無料のもありますが無料のはそんなに効果ないです。

アドネットワーク

デベロッパーコンソールで「このアプリを宣伝する」ってやつですね。AdMobのバナーを通して、Androidユーザに向けて宣伝できます。以前5000円ぐらい突っ込んだことがありますが、一瞬でなくなって効果もあんまりなかったです。

成果報酬型広告(リワード広告とか)

成果報酬型の広告です。だいたい1DLあたり200~350円ぐらいが相場のようです。

この他にもいろいろ宣伝する方法はあるかと思いますが、たいていは多くのお金がかかるものです。(記事広告など)

比較的大きな会社や、お金が余ってるところなら、成果報酬型の広告とか記事広告とか売ってバンバンDL稼ぐこともできるかもしれませんが、僕のような個人デベロッパーには無理な話です。

そうなると、個人のデベロッパーはレビュー記事ぐらいしかありません。

日本のアプリレビューサイトへの依頼はすでにやってるよって方も多いかもしれませんが、海外のレビューサイトってなると、なかなかやっていない方も多いんじゃないでしょうか。

やらない理由としては2つの理由があると思います。
  1. どのサイトにレビュー依頼したらいいのかわからない。
  2. 英語が得意ではないので依頼の英文が書けない。
1.については英語のレビューサイトをまとめた資料がSlideShareに上がっているのでそちらを利用します。

2.については、僕も英文を書くとか全くできないので、格安で日本語を各言語に翻訳してくれるWebサービス「gengo」を使いました。


10月末ごろに、制作したランチャーアプリ「FlipLauncher」のレビュー記事依頼を海外のレビューサイトにお願いしたのでその流れと結果です。
(FlipLauncherのローカライズは英語だけ行なっています。)

まず、レビュー記事をお願いする英文を「gengo」で作成します。
gengo」は会員登録する必要がありますが、facebookのアカウントやgoogleのアカウントでもOKなので、開発用のアカウントですませばいいと思います。

gengoは翻訳にグレードが4つあります。

スタンダード
ネイティブスピーカーによる迅速かつ確かな翻訳

ビジネス
一般公開用および正式な用途に、さらにレベルの高い翻訳を

ウルトラ
最高のクオリティをお求めの方に、ビジネスレベルの翻訳+校正を

専門分野
専門分野のスペシャリストによる翻訳

レビュー記事の掲載依頼なのでスタンダードで十分だと思います。

で、スタンダードで訳しました。

日本文(1行目は件名として)
=======================================================
Androidアプリ[[[FlipLauncher]]]のレビューのお願い

こんにちは。

私は日本のAndroidアプリ開発者です。

サイトにレビュー記事を載せて頂きたく連絡しました。

レビュー記事に取り上げていただきたいアプリは以下です。

アプリ名:
[[[FlipLauncher]]]

アプリURL:
[[[https://play.google.com/store/apps/details?id=com.andcreate.app.fliplauncher]]]

アプリ概要:
[[[ ]]]

ユーザの使いやすさを第一に考えて作ったアプリです。

よろしくお願いします。
=======================================================

この日本文がこうなります。

gengo」で英訳された文
=======================================================
A request for a review of the android application [[[FlipLauncher]]]

Hello.

I am a Japanese android application developer.

I have contacted you to ask if our site could publish a review article.

The application I would like you to review is listed below.

Application name:
[[[FlipLauncher]]]

Application URL:
[[[https://play.google.com/store/apps/details?id=com.andcreate.app.fliplauncher]]]

Application outline:
[[[ ]]]

This is an application designed with ease of use in mind.

Thank you for your consideration.

=======================================================

英語に翻訳してほしくない箇所、翻訳する必要のない箇所は[[[ ]]]で囲めば翻訳されません。

この英訳を依頼してから、1時間ぐらいで英訳された文章が提案されてきました。修正して欲しい箇所がある場合は部分的に修正依頼することもできます。
この文章でかかった翻訳料金は351円でした。

アプリ概要の部分には、予め英訳しているGoogle Play のアプリ紹介文のところをそのまま突っ込みます。

アプリ紹介文の方は日本語419文字で翻訳料金1089円でした。

で英訳した文章をもとに各英語レビューサイトに依頼していきます。

まずは乗っている全メールアドレスにメールしていきます。

自分がやったときは一件一件クリックしてメーラーが立ち上がったり、リンクが無効だったりで大変めんどうだったので、コピーや手打ちでメールアドレスを持ってきてBCCでメールを送信しました。

メールアドレスはまとめてあるので使いたい人は「ここ」からどうぞ。
(いくつかエラーメールがかえってきました。すでに無効のメールアドレスもいくつかあるようです。)

次に、乗っているリンクをたどってフォーム上でレビューの依頼をしていきます。
「inquiry」をクリックするとそれぞれのサイトの申請フォームに直接飛ぶので必要事項を入力してポストします。(結構大変です)

大体どのフォームも氏名、メールアドレス、件名、本文なので、一時的にどこかにメモっておいてひたすらコピペしました。

以上で申請作業は終わりです。「FlipLauncher」のときは10/29日のお昼ぐらいにやりました。

ここから今まででどれくらい効果があったかを見てみます。

紹介されたサイト一覧

Android Police 10/29

smartdroid 10/29

noticias android 10/29

Android Spin 10/29

gizmode australia (list-up) 10/30

Android apps olicious 10/30

Droid LIFE 10/31

your life updated 11/01

letsgodroid 11/01

Android Headlines (list-up) 11/01

AndroidVZLA 11/02

makeuseof 11/03

一番早いところで、お昼に出したものが夜の9時ごろに紹介されてました。
それから続々といろんなサイトに取り上げてもらえて確認できているぶんで12サイトでした。

ゲームアプリレビューサイトを除く80サイトぐらいに依頼を出したので、打率は15%ぐらいです。今回のアプリがランチャーアプリだったので、もっと一般的なツールやゲームアプリだともっと取り上げてくれるかもしれません。

次にダウンロードの推移がどの程度変化したかを示します。
(図の赤線は2012/10/29を表しています。)


海外でレビュー記事が紹介されはじめたところからダウンロード数が増加しています。

そして、12/2現在で確認できる統計での総ダウンロード数は下図になります。



日本以外の合計は約19000インストールなのでかなり効果があったことがわかります。

今では1日の海外のダウンロード数も大分下がってきましたが、それでも一日平均100DLぐらいあります。海外のレビュー記事が掲載される前は一日平均5DLぐらいでした。

掛かったのは翻訳料金の約1500円と掲載依頼作業2時間ほどなので、海外ユーザにも使って欲しいアプリを作っている人は十分やる価値はあるとおもいます。

掲載依頼したところから「俺のところは今一日50件以上の依頼が来るから全てに対応するのは難しいんだよ。30ドルくれたら、優先してトップにレビュー記事掲載してあげるよ」みないな英文のメールが幾つかきてましたが、やりませんでした。それもやるともっとDL数が伸びるかもしれません。

2012/09/06

9patchの画像をdraw9patch以外で作成する方法

Androidのデザインで伸びて欲しい部分を指定できる便利な9patchという方法があります。

そしてこれはAndroidSDKの中に入っているdraw9patchで作るのですが、これがあまり使いやすいとは言えない。

そして今日

デザイナーがコードから読み解く、 Androidアプリのデザインの幅を広げるコツとTips【第1回】

に参加してきました。

その中で、発表者がdraw9patch以外では9patch画像をうまく作れないといっていたので、

ちょっと試してみました。

使った画像はこれです。

ちょっと前までプロジェクトの新規作成で自動生成されていたやつですね。



9patchは、画像の周囲1pixelの部分に黒点を描画することで、その部分が伸びるように認識させる事ができます。

なので72x72のものを74x74に拡大し、こんなふうに黒点を描画してみます。



上と左の黒点の交わった部分が伸びる部分で、右と下の黒点(もはや黒い線)の交わった部分が、内容を表示できるエリアです。

これを、PhotoShop CS5で作成しました。

それをリソースファイルに入れて、ImageViewの背景に指定し画面いっぱいに広げたらこんな風になりました。



ちゃんと伸びてますね。

ということで結論として、9patchの画像をdraw9patchで作ることは可能です。

ただ、気をつけなければいけない点があります。

一つ目はAndroidに9patchの画像として認識させるには次のような条件があります。

周囲1pixelを9patch専用の領域とする。

9patch専用の領域には完全な黒と完全な透明の2つ以外、存在してはいけない。

拡張子は「.9.png」とする

上の勉強会の発表者がうまく作れなかった原因は主に2つ目が原因ではないかなと思います。

PhotoshopやFireworksなどで9patch用の黒点を打つときに大きさ1pixelのペンで書くと思われますが、位置が少しずれると隣のpixelに少し影響が出ます。その影響で完全な黒でない部分や、うっすらと黒が描画されている部分が発生し、9patchの画像として認識されなかったのではと思っています。

で、今回この画像を作るときにはペンを使わず、9patchとして指定したい部分を選択範囲にし、その部分を完全な黒で塗りつぶすことによって作成しています。

あと、これは9patchの生成には関係のないことですが、

ImageViewのsrc属性に画像を設定しても、伸びてくれませんでした。

ImageViewのbackground属性に画像を設定したときに、上の画像のように9patchとして認識してくれました。

9patchは背景画像にしか使えないのかも知れないです。あ、でも背景に使えれば十分か。


以上、9patchの生成に関する記事でした。デザイナーさんはいつも使っている環境で9patchの画像を作ることができるので、挑戦してみてください。


2012/08/02

[Android]OutOfMemoryError(メモリリーク)対策

AndroidアプリのOutOfMemoryError(メモリリーク)の対策としてやったことのまとめ。

Androidアプリを作っている人ならOutOfMemoryErrorに悩まされた事のある人も多いと思います。

自分も悩まされて色々試行錯誤したので、そのへんをまとめておきます。

まず、OutOfMemoryErrorに関してですが、エラーレポートには大抵、画像の描画、ロード時に発生したと書かれていることが多いですが、画像が直接の原因じゃないことも結構多いです。(もちろん、単純に画像が大きすぎる、使用する画像の数が多すぎることもありますが、その場合はサイズの縮小などを行なってください。)

自分も最初は画像が原因だと思い込んでいたので、BitmapのConfigを変更してアルファ情報を抜いたりとかして使用するメモリ容量を減らして、「対策できた!」とか思ってました。

でも、あんまりエラーレポート減りませんでした。

で、色々試行錯誤していくうちに画像が原因じゃないなとわかりました。

アプリを起動すると、様々なオブジェクトが生成されます。色々動かしたあと、アプリを終了します。アプリを終了したあとに、端末のメモリが少なくなってきたらGCが走って使っていないオブジェクトを削除してくれるのですが、アプリを終了した時に色々オブジェクトの参照が残っていたりすると、GCで開放されません。

そして、次回にアプリを起動した時に、残っているオブジェクトが再利用されるかというと、全く再利用されずに新しいオブジェクトが次々に生成されます。

これの繰り返しで、ごみオブジェクトがどんどん溜まっていき、それと比例して、アプリが使用するメモリ領域を圧迫していきます。

そして、何回目かの起動時にメモリを大きく使用する処理(画像のロードとか)がきっかけでOutOfMemoryErrorが発生します。

なので開発時のデバッグとかでは、ほとんど見つからなく(実機にインストールする段階でアプリが使用するメモリ領域が初期化されるので)、リリース後にエラーレポートが送られてくることになります。やっかいですね。

で、今回はごみオブジェクトをなるべく残さないようにするためにごみオブジェクトの調べ方と参照の消し方とかを書いておきます。

まず、調べ方についてですが、Memory Analyzerを使います。

インストールについては次のページを参照してください
Eclipseで使うMemory Analyzerのインストール

まず、調べたいアプリを起動して、色々動かしてから戻るボタンなどでアプリを終了させます。

そしてDDMSを開いて、Memory Analyzerを起動します。

「Dump HPROF file」をクリックすると初回起動時はダイアログが表示されます。とりあえず、一番上の「Leak Suspects Report」を押します。

すると、次のような画面が表示されるので、図の部分をクリックして「Histogram」を表示します。



Histogramでは、アプリが保持しているオブジェクトの一覧が次の図のような感じで表示されます。


<Regex>のところにアプリのパッケージ名を入れると、アプリのオブジェクトがどのくらい開放されずに残っているかが表示されます。


アプリが終了したのに、オブジェクトの参照が残っているとこんなかんじになります。


起動と終了を繰り返すとどんどん溜まっていきます。


このようにどんどん、ごみオブジェクトを保持し続けていき、メモリを圧迫していきます。

アプリの終了時に参照が残っていなければ、何回起動と終了を繰りかえしても、ごみオブジェクトは残りません。

なので、アプリが終了した時に参照が残らないようにします。

メモリリークの原因として有名なのはActivityの参照が残り続けることですが、Activity単体が残るだけであれば、そこまで大きな問題ではありません。
問題はActivityが参照しているクラスのインスタンスが残り続けることです。複雑な作りのアプリほど残りやすいです。

自分が行ったのはActivity#onDestroy()やFragment#onDestroyView()で次のように明示的に参照を切りました。
自分が使ってたのが、Fragment, ViewPager, ListViewぐらいなので、それらの参照の切り方だけ書いています。

/**
 * onDestroy()やonDestroyView()で
 */

//Fragmentのとき
fragment = null;

//ViewPagerのとき
viewPager.setAdapter(null);
adapter = null;

//ListViewのとき
listView.setAdapter(null);
adapter = null;

//各種リスナー
button.setOnClickListener(null);

特に、カスタムしたView,Adapter,Listenerなどは明示的に参照を切らないと残り続けるようです。

自分の場合、このように明示的に参照を切ってあげる事でほとんどオブジェクトが残らなくなりました。

検索かけてもあまりこの辺の具体的な情報はあまり見つからなかったので(見つけられなかっただけかもしれない...)、OutOfMemoryError(メモリリーク)で困っている人の手助けになれば幸いです。

ちなみに今回対策したアプリはこちらです。「顔文字BANK」
良ければ、DLして使ってください。

2012/04/30

ViewFlipperを使ってリストビューのレイアウトを切り替える

Androidのアプリでよく使われるListViewについて。

すべての要素が同じなら普通にListAdapterをセットすればいいんだけど、間になにか要素を挟みたいときとかなかなか苦労する。ListViewの要素を再利用するためにViewHolderとか使ってるとレイアウトが固定されてしまうので。

今回はViewHolderを使いつつある箇所でListViewの要素のレイアウトを切り替えることができたのでメモ。

ビューの切り替え自体はViewFlipperを使う。

リストビューの1つの要素のXMLはこんな感じ(object.xml)
<?xml version="1.0" encoding="utf-8"?>
<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/flipper"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <!-- ViewFlipperの初期画面(1ページ目) -->
    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <TextView
            android:id="@+id/text_view"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
        
    </LinearLayout>

    <!-- ViewFlipperの2ページ目 -->
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <Button
            android:id="@+id/button"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
        
    </LinearLayout>
</ViewFlipper>

テスト用のアクティビティのXML(main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        
    </ListView>

</LinearLayout>

そしてサンプルコードはこんな感じ(MainActivity.java)
package com.andcreate.sample.viewflipperlistview;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ViewFlipper;

public class MainActivity extends Activity{
    
    @Override
    public void onCreate(Bundle bundle){
        super.onCreate(bundle);
        setContentView(R.layout.main);
        
        ListView listView = (ListView)findViewById(R.id.listview);
        
        List<ObjectData> objects = new ArrayList<ObjectData>();
        for(int i = 0; i < 50; i++){
            if(i % 5 == 0){
                objects.add(new ObjectData("text:" + i, "button:" + i, false));
            }
            else{
                objects.add(new ObjectData("text:" + i, "button:" + i, true));
            }
        }
        
        listView.setAdapter(new SampleAdapter(this, objects));
    }
    
}

class ObjectData{
    String textStr;
    String buttonStr;
    boolean isBtn; //ボタンを表示するかどうか
    
    public ObjectData(String textStr, String buttonStr, boolean isBtn){
        this.textStr = textStr;
        this.buttonStr = buttonStr;
        this.isBtn = isBtn;
    }
}

class ViewHolder{
    ViewFlipper flipper;
    TextView textView;
    Button button;
}

class SampleAdapter extends ArrayAdapter<ObjectData>{
    private LayoutInflater inflater;
    
    public SampleAdapter(Context context, List<ObjectData> objects){
        super(context, 0, objects);
        this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        ViewHolder holder;
        if(convertView == null){
            convertView = inflater.inflate(R.layout.object, parent, false);
            holder = new ViewHolder();
            holder.flipper = (ViewFlipper)convertView.findViewById(R.id.flipper);
            holder.textView = (TextView)convertView.findViewById(R.id.text_view);
            holder.button = (Button)convertView.findViewById(R.id.button);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder)convertView.getTag();
        }
        ObjectData data = getItem(position);
        if(data.isBtn){
            //ボタンなら
            holder.button.setText(data.buttonStr);
            holder.flipper.setDisplayedChild(1); //2ページ目を表示
        }else{
            //テキストビューなら
            holder.textView.setText(data.textStr);
            holder.flipper.setDisplayedChild(0); //1ページ目を表示
        }
        return convertView;
    }
}


ViewHolderの切り替え自体はViewHolder#showNext()やViewHolder#showPrevious()でやることが多いけど、今回の場合それでやると表示がうまくいかなかったのでViewHolder#setDisplayChild()を使った。
今回の場合、ViewFlipperなので、動的に要素の高さを変更することはできない。できたらなかなかすごいけど何かいい方法があるのかな?

2012/02/23

Windows7でGitのインストール

Windows7でのGitのインストール方法のメモ


Gitはソースコードのバージョン管理システムの一つ。ほかにも有名なものでSubversionとかCVSとかあるけど、いまからやるならGit一択っぽい感じ。


そして、Windows7の環境でGit環境を構築する正式な方法はCygwinを使う方法なんだけど、自分を含めて初心者には敷居が高いっぽい。


手軽にやる方法として、「msysgit」ってのがあるのでそちらを使ってGit環境を構築する。


まずはインストーラをダウンロードする。


ここから「Downloads」ページへジャンプし、「Git-1.7.9-preview20120201.exe」をダウンロード。


インストールウィザードに従って進めていく。


途中の「Adjusting your PATH environment」画面で、





「Run Git from the Windows Command Prompt」を選択。


次の「Configuring the line ending conversions」はデフォルトのままでOK。


でインストールが終わる。


正しくインストールできたかどうかはコマンドプロンプトで


git --version


と打ち込んで確認できます。


次のような画面がでれば成功です。


2012/02/07

学生スタートアップカンファレンスに参加してきた

今日参加してきたのはコレ→http://atnd.org/events/24340
学生スタートアップカンファレンス

ハッシュタグは#gakucon

学生で起業してる人たちが自分たちの事業紹介して色々質問も受けますよってやつ。

全部じゃないけどメモれた分だけ書いてみます。

今日発表してたのはfacematch、Creatty、hhhungry、ヒルカツ、tetolの5つ。

【facematch】
facebookの情報持ってきて、異性との出会いを手助けするアプリ。
例えばユーザが男性なら、友達の友達の女の子とかどっかのイベントに参加してた女の子がアプリに表示されて、プロフィールなどが見られる。
プロフィール見て気に入った女の子がいたらハートボタンを押す。
押された女の子の方では、ユーザを含む9人の男性が画面に表示されて、この中の誰かがあなたの事を気になっています。って表示されるらしい。
それで、女の子がその中から選んだりして、両思いになれたら、その二人だけで使えるクーポンが発行されるらしい。

で、今はコアメンバー4人とインターン16人で活動中で人材募集中のようです。

求めてる人材は
・自分たちのビジョンに共感できる人
・私たちと一緒に働きたいと思える人
・私たちの持っていない何かの高い能力を持っている事
らしいです。

人と人とのつながりを濃くしていきたいって言ってました。
日本でのリリースは3月予定。


【Creatty】
物を作っている人向けのサービス
クリエイターや美大生なんかで物を作っている人がweb上でサイトやギャラリーを簡単に持てるようにするサービス。
そしてそれらを欲しい人が購入できるようにするらしい。
作る人にとっては、自分の作品をより多くの人に見てもらえたりするし、見る人にとっては世界に1つしかない作品のカタログを見る事ができると。
マネタイズはプレミアム課金、売買手数料、企業タイアップでやっていくらしい。

ベータ版を2月に公開予定

サーバー/フロントサイド/iOS/Androidなどのエンジニアを募集してた。


【hhhungry】
食事行くときのめんどくささを解決するサービス。
今おなかが減っている近くにいる友達が表示されて、簡単にさそって一緒にご飯に行く事ができるサービス。
今開催されているランチを友達の人は見る事ができて、そこに合流したければ簡単にできるよってのも言ってた。

おなかが減ってるとかどうやって調べるのとか色々疑問あったし、あまり流行りそうではないなって印象を発表を見て思った。


【ヒルカツ】
昼食の時間を使ってOBOG訪問できるサービス。
学生は友人とペアを組んで、志望している業界の人とかとマッチングしてくれる。
新しいタイプの就職活動と言っていた。

ただもうソーシャルランチとかのサービスがあるから、正直厳しいんじゃないかなって思った。もしかしたらヒルカツ側でのすごい差別点とかあるのかもしれないけど。

あと、発表が残念すぎた。笑いをとろうとしてやってたけどそこまで笑いとれてなかったし、無駄な内容に時間を割きすぎてた。最終的には来てる視聴者の方に振りだしたりでひどい印象をうけた。


【tetol】
GPSとスマートフォンを利用したソーシャル助け合いプラットフォーム
スマートフォンのアプリから依頼内容と報酬と期限をGooglemapに投稿して、近くのユーザがそれを見て、依頼を受けたりできるサービス。
大学などの場合は「代返願い」や、「ノートコピーさせて」などで、それに対して報酬500円など。(紹介の例としてどうなのと思ったが。)
労働力のCtoCと言っていた。(BtoCはタウンワークみたいなバイト紹介システム)
収益は手数料や、フリーミアム、広告料でと言っていた。
2月末にクローズドβ版を公開予定。
発表者が「日本を変えるのは学生」って言ってた。今日一番印象に残ってる。

〜最後に〜
自分と同じぐらいの学生がこうやってベンチャーキャピタルからお金をもらって事業を起こしてるのはやっぱりすごい。
そんなにうまくいかないんじゃないかと思ったのもあったけど、何かのサービスを考えだしてそれに全力で取り組んでるってところはなかなかできるものじゃない。
彼らの方が行動力も技術力も格段に上なんだろうと感じた。自分はまだまだ。
よりいっそうの努力が必要だなと感じたので、勉強と開発頑張っていく。

2012/01/19

進路について

大学もそろそろ卒業となり、進路についてずっと悩んでましたが、やっと自分なりの答えを出したので、ここにまとめておこうと思います。
大学4回生のときに、経済的な理由から大学を退学になりました。
ここから一年間、実家に戻って親の仕事を手伝いながら、Androidアプリの開発の勉強を始めました。そして2011年1月に初めてアプリを公開し、その後もいくつかアプリを開発しマーケットに公開してきました。
そんな中、大学へ復学するための資金をなんとか準備する事ができ、2011年の9月に大学へ復学する事ができました。
しかし、就職活動を全くしてなかったので、何となく自分はこのまま大学院へ行くのがベストなのかなと思っていました。大学院へ進めば一年後に問題なく就職活動ができるので。
ただ、最近いろんな本を読んだり、twitterなどでいろんなツイートを見て、「働く」ってなんなんだろうなって感じてました。
日本の会社でのプログラマーってのは降りてきた仕様通りにプログラムするのがお仕事で、だんだん出世していくとSEやマネージャーになってどんどんプログラムを書く事から離れていくイメージを持っています。
会社に属してプログラムを書いていくのは正直楽しくなさそう。
そんなふうに色々考えていく中で、自分の中で「働く」ってことは、「誰かの役に立つ」「価値を生み出す」これが大切なんじゃないかなと。
こう思ってから、必ずどこかに就職しなきゃいけないって思いが無くなりました。
なので、研究して知識を深めたいってのが3割、就活のためってのが7割だった大学院の進学も考え直そうと思いました。
復学してから約半年、卒業研究をやってきて、研究というスタイルは自分に合っていなかった。これを後2年も続けるのはあまり意味を見いだせないし面白くないなと。なにより今はアプリ事業にもっと専念したいなと思っていました。
なので卒業後はアプリ事業に専念しつつ、技術力の向上を目指していきます。
一人でやってるとなにかと病みそうなので、勉強会に参加して様々な人に会って刺激もらいつつやっていきたいなと思っています。
「誰かの役に立つ」「価値を生み出す」そんなアプリやサービスを創り出していきたい。
しばらくは関東方面で活動していこうと思っていますので、関東方面にいらっしゃる方はよろしくお願いします。