Thursday, April 05, 2012

ある日1

土佐寮という大学生寮は、高知県出身学生ばかりが住んでいて、
夏季休業にはかならず地元高知で開催される「よさこい祭り」に
「土佐寮チーム」として参加することになっている。

よさこい祭りは、音楽自作、踊り自作の極めて自由な踊りを披露し競う場である。

僕も土佐寮在籍時にはよさこい祭りに3回出場した。
多くは踊り手としてだったが、
2年のときだったと思うが音楽作製にもちょっと関わった。
その時は、作曲の有人(現TACOBONDS他)と一緒にミキサーとしてスタジオに入った。

有人と僕は、大学2年の前半を相部屋で過ごした仲である。
二人で「寮三役」という寮の事務係を担当しており、
この役を任される人は、事務を円滑にすすめるという名目で
相部屋を強要されるのだが、そのかわり広い部屋を充てがわれる。
片方はエモコア大好きのドラマーで、もう片方はプログレメタル好きのヘボギタリストだった。
やたらCDが散乱した部屋だった。

スタジオに入った日。
有人の「はい」というタイミングで「録音ボタン」を押す。
簡単な仕事だ。
有人は、自分の部屋で簡単なベースラインを弾きそれをテープに録音し持参していた。
最後スタジオ内でドラミングして、テープに重ねどりすれば終わり。
当時はテープに4chくらい録音できる専用MTRがあったのだ。
有人所有MTRをスタジオまで持参し、最後のドラミングをレコードする。
よさこいの音楽はシンセ全開できらびやかなうるさい曲が主流だが、
有人は枠を脱線しパンクっぽいエモっぽい音楽に仕上げていたと思う。

夏の晴れた日。
大学の勉強もそこそこに、
音楽とか麻雀とかしていた日が懐かしく思われる。

Saturday, March 24, 2012

Ubuntu 11.10 on Aspire One [wireless driver]

aspire oneにubuntu 11.10を入れてみた。
なんにも考えなくてもだいたい動いていて非常に快適だ。

ただ無線LANだけ起動していない(起動ランプも光っていない)。
無線LANの起動スイッチを押してもやはり変わらない。

下記の記事を参考すると、ハードウェアドライバが入っていないからだそうだ。
http://d.hatena.ne.jp/vamview/20100717/1279359615

実際にハードウェアドライバを入れてみた。

ubuntu 11.10のGUIで
左のメニューバーのsystem settings->Hardware"Additional Drivers"を選択。
"No proprietary drivers are in use on this system.と出てくる。
まだドライバが動いていない証拠だ。
その下にはちゃんと
"Broadcom STA wireless driver"
"This driver is not activated"
ubuntu開発者がテストしたプロプラのドライバがありますよ、でもまだ動いていませんよ、ということ。
と出てくる。

動かしてみようじゃんか。
右下の"Activate"ボタンを押す。

有線LANを繋いでいない場合ここでエラーが出る。
つまりこの時点でドライバをダウンロードしているらしい。
有線LANを繋ぐ。
再度"Activate"を押す。

"Downloading and installing driver.."と出てくる。
結構時間がかかる(サイトが重いのだろう)

何の問題もなく無線LANが起動した。ランプも付いた。
あとは無線セキュリティの設定をしなきゃいけない・・・

色々調べた結果、
●ifconfigでeth1が追加されている。
●iwlist eth1 listでいろんなアクセスポイントが見える。
で問題はなさそう。

有線LANを切って、
下記を参考に無線LANエリアを選択する。
https://wiki.ubuntulinux.jp/UbuntuTips/Hardware/HowToSetupWirelessNic#head-866b56b3473a18566566807b1dd409b4b28c1bac
無事パスワード入力を求められ、入力後に接続完了。

Wednesday, February 29, 2012

python備忘録(1)


  • easy_installがproxyを通らない場合
    linuxなら、環境変数http_proxyもしくはhttps_proxyを確認する
    パスワード付きproxyなら、下記コマンドを打つ。
    export http_proxy=user:password@hostname:port
  • pexpect.EOFでpexpectのコマンド投入終了を待機できる
  • signal.signal(signal.SIGINT, [handler])でCtrl+Cなどのユーザによるinterruptを検知できる
  • signal.pause()で待機できる

Sunday, February 26, 2012

ipythonの使い方


  • 補完
    tab
  • データの保存
    store
  • コマンド履歴をファイルに保存
    save [filename] 1 3 5-10(行数)
  • (デフォルトエディタで)ファイルを編集
    edit [filename]
  • ファイルを実行
    run [filename]
  • 時間を測定
    time [コマンド]  --->例:time run test.py

mysqlの備忘録(2)

参考: http://2php.jp/mysql/insert.html


  • データベースを選択
use

  •  テーブルを作成
create table ( , [, ...]);

  • テーブルのフィールドを参照
show fields from ;
or
describe ;


  • 挿入
insert into values(, [, ...]);


  • MySQL-pythonのインストール
sudo easy_install MySQL-python

  • pythonからの参照

import MySQLdb
db = MySQLdb.connect(host="localhost", user="joe", passwd="secret", db="db56a")
cursor = db.cursor()
cursor.execute("SELECT * FROM animals")
result = cursor.fetchall()
for record in result:
print record[0] , "-->", record[1]

mysql操作メモ

参考:http://linux.kororo.jp/cont/server/mysql_user.php


  • ログイン
mysql -u -p
  • データベース作成

create database ;


  • データベース確認
show databases;


  • データベースへのユーザ登録
grant all privileges on .* to @'' to ;

Monday, January 09, 2012

Fragmentを表示したり消したりする

画面方向の回転のタイミングで、Fragmentを表示したり消したりします。
方法は、回転のタイミングで呼ばれるActivityのonResumeのオーバーライドです。

 @Override
 public void onResume() {
  super.onResume();

  //画面のサイズを取得
  WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
  Display disp = wm.getDefaultDisplay();
  int width = disp.getWidth();

  //表示したり消したりするためのマネージャーを取得。
  FragmentManager fm = getFragmentManager();
  FragmentTransaction ft = fm.beginTransaction();

  //表示したり消したりするフラグメントを取得。
  Fragment mFragment1 = fm.findFragmentById(R.id.number_list);

  //画面の幅が900pxより小さかったら、消します。それ以外なら表示します。
  if (mFragment1 != null) {
   if (width < 900) {
    ft.hide(mFragment1);
   } else
    ft.show(mFragment1);
  }
  ft.commit();
 }

Galaxy Nexusで実行した結果ですが、横向きの時は画面幅が900px超えるので「1,2,3・・」と表示されるListFragmentが表示されます。
縦向きの時は画面幅は900pxを下回るのでこのListViewは表示されません。



Fragmentでエラー

Android 3.0で追加されたFragmentが使えるかテストをしていたのだが、
XMLでFragmentを含むレイアウトを記載したアプリをGalaraxy Nexusにインストールし画面を回転させたときにアプリが異常停止する。
特に、自分でFragmentクラスを継承させてonCreateViewをオーバーライドしたクラスを、
XML上に配置するとこの異常停止になる。

エラーは下記。
01-09 21:51:39.086: E/AndroidRuntime(5798): Caused by: java.lang.IllegalStateException: Fragment com.bambooflower.fragmenttest.MyFragment did not create a view.
01-09 21:51:39.086: E/AndroidRuntime(5798): at android.app.Activity.onCreateView(Activity.java:4266)
01-09 21:51:39.086: E/AndroidRuntime(5798): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)

このログを頼りに検索すると、XMLを使うな、というQ&Aと、
XMLを使わないプログラマティックな実装方法を紹介しているサイトを発見。

原因はおそらくActivityと異なるライフサイクルでFragmentの画面が形成されるためだろう。

プログラマティックにFragmentを作る方法とは、XMLにはを一切書かないで、
例えばActivityのonCreate実装の中に下記のようにFragment生成文を書くことのようだ。


FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
if (null == fm.findFragmentByTag(FRAG_TAG)) {
    xact.add(R.id.parent, new MyFragment(), FRAG_TAG);
}
じゃあ何のためにXMLがあるんだろうと不思議に思ってしまうが、これで回避できそうだ。

追記:
確かにこれでエラーは回避できた。
自分で実装したFragmentを静的にレイアウトにのせるのはもうやめようかな、と思う。
今確かめたところ、ListFragmentでonCreateView内でinflateするだけであれば問題ないようだ。

Saturday, January 07, 2012

Galaxy NexusでFragment I

http://android-developers.blogspot.com/2011/02/android-30-fragments-api.html

上記サイトが一番ためになるようだ。
ただ、Layoutをxmlでやったり、Java内で動的にやったり、
なんだか関係がよくわからない、というレベルの私なので、
下記を参考にした。


おそらく一番わかり易い記事だ。


[PROCESS]

[#1 Make Project]
eclipseで新規作成メニューからAndroidプロジェクトを選択。
あなたの好きなプロジェクト名を作成する。

[#2 Configure main.xml]
さっき作ったプロジェクトで最初に動く画面を作るmain.xml。
どこにあるかは下記図を参照。これをダブルクリック。

これを下記に上書き。



    

    

上書き編集画面はこんな感じ。


この"com.bambooflower.fragmenttest"はあなたの決めたプロジェクト名に変更。

[#3 Add codes to MainActivity]
こんどは、プロジェクトを仕切るActivityを書き換え。
プロジェクト名+Activityのファイルをダブルクリック。
クラス内にコードを追加。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ListView l = (ListView) findViewById(R.id.number_list);
        ArrayAdapter numbers = new ArrayAdapter(getApplicationContext(),
                        android.R.layout.simple_list_item_1, 
                        new String [] {
                "one", "two", "three", "four", "five", "six"
        });
        l.setAdapter(numbers);
        l.setOnItemClickListener(this);
    }

    
    /**
     * Add a Fragment to our stack with n Androids in it
     */
    private void stackAFragment(int nAndroids) {
        Fragment f = new MyFragment(nAndroids);
        
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.the_frag, f);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        ft.addToBackStack(null);
        ft.commit();
    }

        /**
         * Called when a number gets clicked
         */
        public void onItemClick(AdapterView parent, View view, int position, long id) {
                stackAFragment(position + 1);
    }



書き換え後はこんな感じ。

eclipse上で赤線が出てたら、依存関係が解消されていないので、
マウスオーバー(赤線の上にカーソルを合わせる)してサジェスト(カーソルの下に出てくる助言)野中の"import ****"を選択する。


[#4 Add Fragment Class]
プロジェクト名を右クリックして、クラスを追加する。

クラス名は、またあなたがつけてください。
クラス作成後のソースに下記を追加。


  private int nAndroids;
  
  public MyFragment() {
      
  }

 /**
  * Constructor for being created explicitly
  */
 public MyFragment(int nAndroids) {
              this.nAndroids = nAndroids;
  }

  /**
   * If we are being created with saved state, restore our state
   */
  @Override
  public void onCreate(Bundle saved) {
      super.onCreate(saved);
      if (null != saved) {
              nAndroids = saved.getInt("nAndroids");
      }
  }
  
  /**
   * Save the number of Androids to be displayed
   */
  @Override
  public void onSaveInstanceState(Bundle toSave) {
      toSave.putInt("nAndroids", nAndroids);
  }

  /**
   * Make a grid and fill it with n Androids
   */
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saved) {
      int n;
      Context c = getActivity().getApplicationContext();
      LinearLayout l = new LinearLayout(c);
      for (n = 0; n < nAndroids; n++) {
              ImageView i = new ImageView(c);
              i.setImageResource(R.drawable.gallery_thumb);
              l.addView(i);
      }
      return l;
  }
追加後はこんな感じ。

最後に、main.xmlにもどって、"MyFragment"と適当に私が入れていた名前を、あなたのクラス名にしてください。


[#5 build]
ビルドしてみましょう。
Android 4.0.3の横長画面エミュレータではこんな感じ。


Galaxy Nexusではこんな画面。なんか意図したものと違う・・・。
私が作りたいのは、Galaxy Nexusでは横に並ぶのではなく、画面遷移・・
そうかListViewもFragmentにしないといけないのかな。
次回はちゃんと画面遷移ができるようにするぞー!

Sunday, December 18, 2011

やっとgalaxy nexusにflashが届いた

flash playerはandroidマーケットからダウンロード可能です。
これまでandroid 4.0(IceCream Sandwich)に未対応で、
Galaxy Nexusにはインストール不可能でした。
それが昨日4.0に対応したというニュースが出ました。
そこで、実際にインストールして見ました。

やーっと、CNET TVが見られる!嬉しい!ちゃんと動いた。


Saturday, December 17, 2011

kindle for androidの辞書機能がlimitに引っかかる

AndroidのKindleの辞書機能、微妙に制限がかかっていて辞書閲覧ができません。
【背景】
Galaxy Nexusを手に入れた直後に、1週間英語漬けになる研修に参加する機会を得て
多少英語に慣れ親しんだのですが、その後この英語感覚をどう維持しかつ伸ばすか悩みました。
読む、聞くは大事だという講師の話を真に受けて、下記2つを実施しようと思っています。
1.読む→気に入った記事や論文PDFをKindle for androidで読む
2.聞く→Tech News Todayなどの"英語で興味あるPodcast"を聞く

1.についてなぜKindle for androidかというと、単純にインターフェースがいいからです。
めくる感覚、文字サイズの変更への画面表示の追従、マージン変更、背景色変更、
これら標準機能も優れていますが、やはり辞書機能!が素晴らしい。
画面をホールド(タップを長時間保持)すると、勝手にタッチした単語がハイライトされて、
しかも画面の上か下に辞書が表示されるこの親切設計!
デフォルトでOxfordが使用出来ます。
「英英辞書を使いなさい」という英語講師の言に忠実に従うことができるし、いい!と思っていました。

【問題】
さて、問題はここから。
AmazonからeBook(ファイルはeBook形式)を買ってGalaxy nexusに転送、Kindle for Androidで閲覧すると、確かに辞書機能は有効です。
次に、Kindle for Androidが最新版でサポートしたPDF形式の論文を読んで見ました。
閲覧はできる、でも・・・辞書機能は無効。これはうれしさ半減。
原因はKindle for AndroidがPDF形式に対して辞書機能を適用していないだけのようです。
なら、別の手だ。
PDF形式をeBook形式(AWZとかEBOKとか)に変換すれば辞書機能を適用してくれるだろう。
この変換処理はフリーソフトがやってくれる(mobipocket.com)からできるはず。
結果はダメでした。
上記フリーソフトで変換はうまく行ったのです。
またGalaxy NexusのMTP接続により、その生成ファイルを/kindleフォルダに追加したところ、
確かにKindle for Androidから閲覧できます。
ん?辞書をダウンロードする?
なんでだろう、ダウンロードは済んでいるはず。でもまあいいか。
んん!?リミットを超えました?
この時点で幾つか対策を実施しました。
●辞書を使用しているデバイスを減らしてみる→効果なし
●Kindle for PCからこのPDF由来のeBookを開くと、普通に辞書機能は有効。
なぜAndroidだけ辞書が使えない??
(Kindle Cloud Readerというアプリもあるのですがこれはそもそも辞書機能がないから論外)

だめだ、わからない。
今、解決策を探しています。
もう、amazonが更新してくれるのを待つしかないのかな・・・

Google+に移行したいと思います

【移行前】
ついにこのようなお達しが来る時期となってしまいました。
BloggerからGoogle+に移行してくださいとのこと。

これまでのURLが保存されるのか非常に心配です。

【移行中】
そうか、戻せるのか。


【移行後】
なんにも変わってないようです。プロフィールが変わるだけ。
Google+側からも、なにか特別に変わった感じで見えるわけではないですね。
投稿編集画面から、「共有」が選べるようになっていますね。
これでGoogle+にも同時に投稿できるということでしょうか。

Saturday, December 03, 2011

Galaxy Nexus(ICS)のスクリーンショット取り出し(MTP接続)

android 4.0 icecream sandwichでは、画面のスクリーンショットが撮れます。
方法は、電源ボタンと音量ボタンの同時押しです。

Galaxy nexusでスクリーンショットを取り、それをPCに取り込みます。
USBでPCに接続すると、MTPかPTPかで接続を選択するように設定できますので、
ここではMTPで接続します。
すると、PC(Windows)側からこのように見えます。
フォルダの構造はこんな感じです。
スクリーンショットは、このPictures->screenshotsに入っています。
また、カメラで撮った写真はというと、DCIMの中に入っています。
使い分けができるので嬉しいです。

ちなみにこのMTP接続中でも、スクリーンショットは撮れるようです。
...まあ、usb接続中ならadb使うよ、という声も聞こえてきそうですが。

galaxy nexusのadb接続2: wifi経由

前の記事 Galaxy Nexusのadb接続 の続きでございます。

android 3.0(gingerbread)からwifiでのadb接続がデフォルトでできるという情報を得ました。
コレギドットネット を参考に、wifiでのadb接続を試みました。

(環境:Windows 7 home premium 64bit + eclipse 3.5 + adb)
0. Windowsボタン→”cmd”と入力し、コマンドプロンプトを起動。
1. [USB接続中]adb tcpip <ポート番号> (適当に52525と入力)
2. USB切断
3. adb connect :<ポート番号>
 (IPアドレスは、Galaxy Nexus側の設定→wifi→<接続しているLAN>で表示できます)
接続完了!


下記が接続した証拠です。

windowsの次はandroidなのか・・・

なんの話かというと、うちのブログへのアクセス履歴。
OS別では1.windowsに次いで2.Android
まじですか。3.iPhone まじですか。そういう世の中になったんだなぁ。

2代目androidのgalaxy nexusとmarketノ謎

PC版のandroid marketについてわからないことがあります。
本日購入したGalaxy Nexusにはインストールしておらず、
機種変前のxperiaにはインストールしていたアプリがあります。
(たとえばQRコードリーダ)

PCにgalaxy nexusを接続しandroid marketで上記QRコードリーダを表示させると、
「インストールできない」表示になります。
なぜでしょう。

さらにはですね、本日購入したGalaxy Nexus君のマーケットアプリについても謎があります。
なんと、3g接続でアプリをダウンロード出来ませんでした(12/2の12時時点)
これはがっかりしました。「エラーにより●●をインストール出来ません」と表示されました。
エラー内容は詳しく教えてくれません。
wifi接続してやっとダウンロードできました(12/2の23時時点)
今3g接続(マイエリアあり)でアプリのダウンロードは出来るようになってます(12/3の2時時点)



galaxy nexusのadb接続

本日Galaxy Nexusを購入して参りました。
docomoショップでの店員の混乱などは追って記事にします。

開発者用メニューが大変充実しているGalaxy Nexusですが、
USBデバッグモードを起動してPCに接続してもADBが認識してくれません。

googleが提供しているUSBドライバにGalaxy Nexus用のADBドライバが入っているようなのですが、
どこに入っているのかいまいちよくわかりません。
そこで、SAMSUNGが提供しているドライバパッケージをインストールしてしまいました。
提供元はこちらです。
ドライバインストーラを起動すると下記のようになります。

インストール後は、通常通りADBが認識してくれました。

さて、続いてはwifiでADB接続します。

Sunday, November 27, 2011

spreadsheet filter() return

家計簿をgoogle spreadsheetで管理する際に困った事を書いておきます。

[PROBLEM: CAN'T TREAT N/A ERROR AS 0 VALUE]
私がgoogle spreadsheetで作成した家計簿では、
入出金額と但し書きを表にして管理しています。
ある月の電話料金を自動算出する計算式も導入しております。
計算式は、
1.filter関数で「但し書き[i]="スイドウ"」の条件に合致する「金額[i]」を抽出し
2.sum関数でその結果を合計し、
その月の水道料金支払額を計算します。

ここで、1.filterという関数があります。
これは、配列AとBを引数に取り、
B[i]の値がxならA[i]を出力するという関数です。
返り値は配列になります。
B[i]の値がxのものがない場合、
エラーでN/A(値なし)が返ってきます。

問題は、

[FAILURE PATTERN]
sum(filter(arrayA,arrayB="WaterFee"))

と書くと
仮にfilterの結果がN/Aで返ってきた時、
sumの返り値も0でなくN/Aで返ってきます。
水道料金は隔月引き落としなので、水道料金引き落としがない月は
sumの結果はN/Aで返ってきます。
本当は0で返ってきて欲しいです。

[SOLUTION: SUCCESS/ UTILIZE IFERROR() FUNCTION]
解決可能でした。
IFERROR関数は、引数AがN/Aなら引数Bを返すという関数です。
xがN/Aなら
IFERROR(x; 0)は0を返します。
これを使うと、

[CORRECT PATTERN]
sum(IFERROR(filter(arrayA,arrayB="WaterFee");0))

で、水道料金の合計額か、なければ0が返ってきます。

Wednesday, November 23, 2011

galaxy nexus予約@docomoショップ

galaxy nexusをdocomoショップにて予約して参りました。
店員さんのご対応は非常に良かったのですが、
こちらのわくわく感とはちょっと異なる慎重な受け答えがありました。


「えぇと、SPモードはお使いになられます?
 もしお使いなら、絵文字の入力に制限があります。」


「機種変更でいらっしゃいますか?」  ...yes

「SDカードが挿入できないタイプの機種なので、
 ご自宅のパソコンにソフトをインストールしていただき、
 旧機種からの電話帳移し替えをお願いいたします。」

....それはどこからダウンロードするのか、やり方は?
「docomoの電話帳移し替えソフトがございます、そちらをダウンロードしてインストールください。」
「使い方がわからなければこちらの電話番号に・・・」
...docomo謹製の移し替えアプリなのね。了解。

予約自体は2分で終了。

「何かご不明な点はないですか?」x3
docomoの心配な気持ちがよく伝わって来ましたね。
お財布ケータイなんかのdocomo謹製のサービスはほとんど使いませんから、
私はdocomoに聞きたいことはなく、
「いえ、ないです」
と答えておきました。

受け取りは12/2だそうです。
楽しみですね。

Sunday, November 20, 2011

PKCの最新情報

北里大学の先生に調べていただいた情報を載せます。

 1.難病情報センターのデータベースの情報 6
http://www.nanbyou.or.jp/entry/61

 2.行田総合病院 秋山先生の2008年論文
心因反応として経過を見ていた,PKC(発作性運動誘発性舞踏アテトーゼ)の1例 

3.兵庫県塚口病院 浜田先生の1998年論文
  学会誌脳と発達 

2.の文献が参照している国内調査では、
●疾患の病因は判明しておらず
●診断に特異的検査はない
●PKC150例のうち97例(65%)が家族性、53%が孤発性とのこと。
「PKCになってしまっている人は家族から遺伝した可能性が高いが、
 必ずしも子どもに遺伝するかどうかはわからない」ということのようです。
 ●PKCの約17%は良性家族性乳児痙攣との合併があったとのこと。
 子どもに遺伝したかどうかを判断する一つの材料にはなりそうです。 

なかなか情報がない、と調べてくださった先生もおっしゃっていました。