Monday, July 31, 2017

PKCに関する、なんというか懺悔

http://o-san.blogspot.jp/2007/09/pkc.html

実は、上記記事には書いていなかったのですが、最後の解決にはいたらなかったものの、解決の糸口になりそうだったできごとが生活の中に有りました。
本当は、もっと自分の辛さを伝え続けていればよかった。。。
最後は解決されたことですが、経緯をここに記します。

【PKCと最終的な顛末は→参照】http://o-san.blogspot.jp/2007/09/pkc.html

【解決の糸口】

時期: 小学校高学年~中学校低学年

すでに運動会などで必ずPKCの症状が起きたので、両親に遠回しに相談しました。
両親は、最初はよくわからないという反応でしたが、
こういうときに父親は頼りになります。
すぐに病院に連れて行ってくれました。

父はとても運動が得意な人で、足も早く、
高校では柔道で腕をならしたそうです。
そんな父は、おそらく自分の息子が運動に関して何か変だということに
だまっていられなかったのでしょう。

連れて行ってくれたのは、住んでいるところから車で十分ほどのところにある神経内科でした。
そのときに処方されたのは水色のパッケージに入った大きな錠剤だった記憶があります。
飲むと若干の症状の緩和がありました。
ずっと飲んでね、と言われて飲み続け、薬がなくなり、確か2,3回受診した記憶があります。
両親共働きの自営業の家庭です。父は私を信じていました。「病院に行ってきなさい」
「病院に行ってきます」そう言って2回目以降自分だけで自転車で山を越えて病院に通ったのでした。
ただ、このときには医者は正確な病名がわかりませんでした。
また、薬を飲んで確実に治った実感がありませんでした。
ここで私はあまりよくない行動に出たという記憶があります。

意味がないからもう病院に行かない。

今ならこういえばよかったと思います。「もう少し効きそうな別の薬はないですか。試してみたいです」と。
もしくは「もっといい病院はありますか」
あのときの父親の行動をある意味無にしてしまい、3年ほど経ってやっとそしてあの高校での「テスト答案返却」での発作頻発事件と赤十字病院での「PKC」という最終判決に遭遇します。
でも、最初の気付きと父の行動からの3年間を、ある意味棒に振ってしまったのは、自分のせいなのだろうと思います。
父親のくれた最初のチャンスを活かしきれればよかった。。。

勇気がなかったのだと思います。

自分が置かれている、この状況を、
医者にちゃんと伝えられて、解決してもらえるのか。
その点に疑いを持っていたわけです。
もしくはもう一度父を病院に連れていって、一緒に医者に言ってもらえばよかった。。
「この子はまだ完全に治っていません、違う薬を出してください」そう言ってもらえばよかった。。

正直言うと、今思うと大変瑣末なことなのですが、当時の私の気持ちはこうでした。
学校が早く終る土曜日や平日の特別な日に自分だけで山を越えて自転車こいで
病院に行って、効くかもわからない薬をもらうのが、めんどうくさい。
苦痛だったのです。。。。

でも、そのことだけだった。
4回目以降か。。。
もうその病院には行かなくなっていた。。。

20年も前のことになります。
今の自分はこういう積み重ねなのかなと思い、メモとして書いています。
父はきっかけを作ってくれた。そのあとのアピールは、自分自身の責任だった。
それを放棄した結果、以降の何度かの苦しみがあったと思います。

ぜひ、周りの方の気付きは大事に。

Thursday, September 24, 2015

ローカルクラスのパス・・・

前提環境:Android


ローカルクラスを作ってClass.forName()でそのクラスを呼び出そうと思いましたがうまくいきませんでした。
クラスの関係はこのようになっています。
WordGeneratorはpublic staticの修飾子を持ってはいますが、れっきとしたActorのローカルクラス。
Actor
└WordGenerator (Local class with "public static" modifier)

最初に試したコードは下記です。
            getBlueprintManager()
                    .add((Class)Class.forName("org.tapchain.core.Actor.WordGenerator"), "A", false)


java.lang.ClassNotFoundExceptionが出てきてうまくいきません。

でもこんなページがありました。
同じやん?
http://stackoverflow.com/questions/18291080/class-forname-android-noclassdeffounderror-classnotfoundexception

もしかして・・・

そして、うまくいったあコードは下記です。
            getBlueprintManager()
                    .add((Class)Class.forName("org.tapchain.core.Actor$WordGenerator"), "A", false)

"$"で表すのですね。勉強になりました。

Sunday, January 04, 2015

Ubuntu で usbのautosuspend を解除

[経緯] 最近USB3.0直結のUSBメモリ(64GB)を買ったので、UbuntuのメインHDD化してみた。
ところが、ノートPCの電源動作を電池に切り替えたあとに、USBメモリのreadが失敗するエラーがでていた。

[問題]Linuxの電源切り替え時に、USBが再認識されていない(USBのデバイスへのIOが失敗する)


[解決]
Linuxでは、USB は電源の切り替えやサスペンドでAutosuspend(自動停止)するらしい。
一部ハードウェアはこの復帰動作が失敗するので、自動停止を解除しておく必要がある。
今回のusbメモリもこの例にもれなかったということになる。
このためusbcoreというモジュールのパラメータであるautosuspendを-1に変更すべきである。
しかし、Ubuntuは少し変であり、/etc/modprobe.dの直下を変更しても反映されない。
そこで、/etc/default/grubに一部変更を加えることで、このモジュールパラメータが自動的に変更されるようにできる。
 http://unix.stackexchange.com/questions/91027/how-to-disable-usb-autosuspend-on-kernel-3-7-10-or-above

[*蛇足]
 USBメモリをメインHDD化して下記を実現したかった。
  • Ubuntu+Android Studio開発環境を手軽に2つのPC間で持ち運びたい(しかもファイルサーバは使わない)
  • そしてホームディレクトリ等も含めてまるごと持ち運びたい
上記環境は構築できたが、たびたびreadが失敗し、OSがクラッシュしており、使い物にならず困っていたのである。

Friday, January 02, 2015

[Android] Eclipse から Android Studio に移行

Android StudioがAndroidの正式な開発環境に指定された。
それを受けて、従来のEclipseの環境からAndroid Studioに移行したので備忘録。

環境:Ubuntu 14.10 amd64

<Eclipse から Android Studioへの移行時の注意点>
公式サイトの通りにやれば難なくプロジェクトを移行することはできたが、自動作成されたbuild.gradleを少し改変する必要がある。
[公式サイト] https://developer.android.com/sdk/installing/migrate.html
  1. Android Studioインストール時には最新版のSDKをフェッチする。これと、Eclipseから移行した設定が違うので、buildSdkVersionが古くておかしい旨のエラーが出る。Tools->Android->SDK Managerを選択し、実際にインストールされているSDKバージョンを確認する。その番号("21.1.2"など)をbuild.gradleのbuildSdkVersionに記入。
  2.  ライブラリへの参照(support-v4など)がなくなってしまう。下記を参照にbuild.gradleを更新する。
    http://qiita.com/sugoi_wada/items/fc5f624d1d9da3136dd7
  3. aaptというファイルがない、というエラーが出る。
    Cannot run program "xxxx/android-studio/sdk/build-tools/android- x/aapt": error=2, No such file or directory
    これは下記サイトによると64bit環境で32bitバイナリを起動できないからだということ。サイトに記載の通り、32bitライブラリをインストールして解決。
    http://qiita.com/twittarsan/items/3fa0e595d8bb2bf22b1d

Saturday, September 08, 2012

Nexus 7をUbuntuにADB接続

Nexus 7を個人輸入いたしましたので、早速開発機のUbuntu12.04にADB接続して、開発したアプリなどをデバッグできるように設定したいと思います。

【やること】
1.Ubuntu12.04側の設定

1.1まずは念の為にSDKを最新バージョンにアップデートします。
1.2次に、下記公式ページに有ります通り、Nexus 7をudevに認識させる設定をします。
 具体的には/etc/udev/rules.dの中に、nexus 7用の設定ファイルを用意して、
 「ベンダー名」などを記載します。

android@ubuntu:~$ cd /etc/udev/rules.d/

android@ubuntu:/etc/udev/rules.d$ sudo vi 52-android.rules


 ここで、52-android.rulesに下記を記載します。
SUBSYSTEM=="usb", ATTR{idVendor}=="0b05", MODE="0666", GROUP="plugdev"
[2012/9/26修正]
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}="4e42", MODE="0666", GROUP="plugdev", OWNER="自分のユーザー名"
ここのidVendorの値はmtp-detectを実行すると表示されます。

そしたら、設定ファイルのアクセス権限を変更します。

android@ubuntu:/etc/udev/rules.d$ sudo chmod a+r 52-android.rules

 最後に、udevを再起動して、nexus 7が接続できる状態にします。

android@ubuntu:/etc/udev/rules.d$ sudo /etc/init.d/udev restart

Rather than invoking init scripts through /etc/init.d, use the service(8)

utility, e.g. service udev restart



Since the script you are attempting to invoke has been converted to an

Upstart job, you may also use the stop(8) and then start(8) utilities,

e.g. stop udev ; start udev. The restart(8) utility is also available.

udev stop/waiting

udev start/running, process 7954


 念の為にADBも再起動しておいてもいいです。

   sudo android-sdk-linux/platform-tools/adb kill-server
   sudo android-sdk-linux/platform-tools/adb start-server



2.Nexus 7側の設定
 簡単です。設定→開発者用オプション→USBデバッギングのチェックボックスをOnにします。

3.Nexus 7をUbuntu12.04にUSBで接続します。


結果→


以上

Sunday, September 02, 2012

Ubuntuでbrotherプリンタのネットワーク接続

brotherでは、デフォルトでWindowsとMac用のドライバを公開しています。
それだけでなく、一部プリンタについてはLPRドライバ+CUPS設定ツールを提供しています。
太っ腹です。

我が家ではbrotherのDCP-J925Nを購入し無線ネットワーク接続して利用しています。
ちょうどいいことにbrotherはDCP-J925N用のドライバ(deb/rpmパッケージ)を公開しています。


今回はこれをインストールすることにしてみます。


1.下記公式ページで、自分の機種がLinux対応であることを確認します。

ここからのやり方はA,B,Cの3つです。
2A.LPRドライバインストール(deb/rpm)
 Ubuntu12.04でdebファイルをダウンロードしてダブルクリックすると、
Ubuntuソフトウェアセンターが現れて「インストール」が選択できますが、
これだと「品質が悪いです」とアラートが出た挙句、最後はインストールが失敗します。

2B.CUPSドライバインストール
試してません。

2C.インストール簡易ツールを使用する
→成功しました。以下に詳細説明します。

2.Linuxドライバインストールツールをダウンロードします。
下記のページの「ダウンロード」をクリックします。


ページの説明通りにsu、gunzipします。
#sudo su(もしくはsu)
#gunzip linux-****.gz<ダウンロードしたファイル名>
#./linux-****<展開されたファイル名>

ツールが起動し、ドライバインストールしますか?など質問に基本的にYで答えます。
最後にDevices URIを指定しますか?と聞かれるので、Yを押します。
ここから環境に依存する選択肢になっています。

私の環境では、予め無線LANに接続したDCP-J925Nが複数に見えました。
  • A.dnssd://Brother%20DCP-J925N._ipp._tcp.local/
  • B.dnssd://Brother**<その他>
  • C.lpr://<プリンタのホスト名>/****
結論から言うとA.が正しいようです。
私は最初C.を選択し設定が完了したのですが、テストプリントをしました、といったあとプリンタがなんの反応もありません。

しょうが無いので、最初のページに書いてあるCUPSの設定手順を実行しました。
ブラウザにてhttp://localhost:631/adminにアクセスします。

(CUPSというプリンタ管理ツールのweb画面が見られます。
もともとCUPSが動いている環境なら問題なく見れます。
また、CUPSなんか使ったことがない環境でも、じつは先程実行した./linux-***コマンドの中で
CUPSサービスを再起動する、必要なパッケージがなければインストールする、というところまでやってくれています)


画面の「プリンターの追加」を選択します。
ネットワークプリンタとしてBrother***が見えていれば、その3つめを選択します。

次の画面で正解がわかるわけです。「接続」の欄に

dnssd://Brother%20DCP-J925N._ipp._tcp.local/

と書いて有ります。最初からこいつを選択すればよかったわけです。
まあ今となってはCUPSで設定をやりきっちゃったほうが早いので「続ける」を選択します。
プリンタのデフォルト印刷設定などを終えると、プリンタ登録完了です。
管理画面に戻って「プリンタの管理」の一覧にプリンタが表示されていれば、そこから
テストプリントなども実行できます。


Thursday, July 19, 2012

vmware playerをubuntuにインストール

[Problem] cannot compile vmnet(virtual network), then failed to boot vmware player
vmware player 64bit版をダウンロードしてubuntu 12.04にインストールいたしました。
インストール自体は下記スナップショットのように問題なく実施出来ました。

それではvmware playerを起動してみます。
「初回は必要コンポーネントのコンパイルを実施します。」というダイアログが出てきて、
パスワードを求められました。
パスワードを入力しまして、下記の通りコンパイルが実施されているのですが、
一部失敗しています。
最後にエラーと出てきて、/tmp/vmware-root/***.logを見てください、と指示が出ます。


logファイルには下記の通り書いて有ります。
2012-07-19T23:34:16.062+09:00| vthread-3| I120: Building module with command: /usr/bin/make -j -C /tmp/vmware-root/modules/vmnet-only auto-build SUPPORT_SMP=1 HEADER_DIR=/lib/modules/3.2.0-26-generic/build/include CC=/usr/bin/gcc GREP=/usr/bin/make IS_GCC_3=no VMCCVER=4.6
2012-07-19T23:34:24.790+09:00| vthread-3| I120: Failed to compile module vmnet!

では下記が解決編です。
[Resolved] Patch vmware modules to fix bug.
エラーメッセージをgoogle先生にぶちこむと最初に出てきたのがvm communityの掲示板です。
http://communities.vmware.com/thread/400790
これは本当にためになります。
パッチを当てろと書いてありました。
ではそのとおりにします。

1.パッチファイルのtarファイルをダウンロードしてきます。
http://weltall.heliohost.org/wordpress/wp-content/uploads/2012/01/vmware802fixlinux320.tar.gz
2.tarを展開します。ダブルクリックすればいいでしょう。
3.展開したファイルの中に、拡張子が.patchのファイルがあります。これを編集します。
  3行目のこの記述をvmwareのバージョン番号に変更します。
plreqver=4.0.2 
→plreqver = 4.0.4
4.最後にこの.patchファイルを起動します。


user@ubuntu:~/ダウンロード$ sudo ./patch-modules_3.2.0.sh
patching file vmnet-only/filter.c
patching file vmnet-only/netif.c
patching file vmnet-only/userif.c
Stopping VMware services:
   VMware Authentication Daemon                                        done
   VM communication interface socket family                            done
   Virtual machine communication interface                             done
   Virtual machine monitor                                             done
   Blocking file system                                                done
(中略)

Using 2.6.x kernel build system.
make: ディレクトリ `/tmp/vmware-root/modules/vmnet-only' に入ります
make -C /lib/modules/3.2.0-26-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. \
  MODULEBUILDDIR= modules
make[1]: ディレクトリ `/usr/src/linux-headers-3.2.0-26-generic' に入ります
  CC [M]  /tmp/vmware-root/modules/vmnet-only/driver.o
  CC [M]  /tmp/vmware-root/modules/vmnet-only/hub.o
  CC [M]  /tmp/vmware-root/modules/vmnet-only/userif.o
  CC [M]  /tmp/vmware-root/modules/vmnet-only/netif.o
  CC [M]  /tmp/vmware-root/modules/vmnet-only/bridge.o
  CC [M]  /tmp/vmware-root/modules/vmnet-only/filter.o
  CC [M]  /tmp/vmware-root/modules/vmnet-only/procfs.o
  CC [M]  /tmp/vmware-root/modules/vmnet-only/smac_compat.o
  CC [M]  /tmp/vmware-root/modules/vmnet-only/smac.o
  CC [M]  /tmp/vmware-root/modules/vmnet-only/vnetEvent.o
  CC [M]  /tmp/vmware-root/modules/vmnet-only/vnetUserListener.o
  LD [M]  /tmp/vmware-root/modules/vmnet-only/vmnet.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /tmp/vmware-root/modules/vmnet-only/vmnet.mod.o
  LD [M]  /tmp/vmware-root/modules/vmnet-only/vmnet.ko
make[1]: ディレクトリ `/usr/src/linux-headers-3.2.0-26-generic' から出ます
make -C $PWD SRCROOT=$PWD/. \
  MODULEBUILDDIR= postbuild
make[1]: ディレクトリ `/tmp/vmware-root/modules/vmnet-only' に入ります
make[1]: `postbuild' は更新済みです
make[1]: ディレクトリ `/tmp/vmware-root/modules/vmnet-only' から出ます
cp -f vmnet.ko ./../vmnet.o
make: ディレクトリ `/tmp/vmware-root/modules/vmnet-only' から出ます
Built vmnet module 


さてインストール出来ましたので、
vmware playerを起動しましょう。
うまく行きました。


2012/7/19追記:
VMを起動しようとするとCould not open /dev/vmmonが出ます。
これを回避するには、vmwareサービスを起動しなくてはなりません。
下記コマンドを実行します。
sudo /etc/init.d/vmware start

下記が参考になります。

Wednesday, June 20, 2012

ubuntuでDVDを再生

[Problem] Initial ubuntu installation not including media repository
Ubuntu Desktop 12.04 64bit 版をインストールしてみると、DVDを再生後
「エラー リソースを読み込むことができません」
と言うエラーがでる。

[SOLVED]
まずはubuntu wikiの下記サイトを参考に必要パッケージをインストールする。
https://wiki.ubuntulinux.jp/UbuntuTips/Others/HowToPlayDvd
sudo wget http://www.medibuntu.org/sources.list.d/`lsb_release -cs`.list --output-document=/etc/apt/sources.list.d/medibuntu.list; sudo apt-get -q update; sudo apt-get --yes -q --allow-unauthenticated install medibuntu-keyring; sudo apt-get -q update

sudo apt-get install libdvdcss2

ここではまだDVD再生できませんでした。
そこで、再度下記を参考にし、Gstreamer関連のパッケージがインストールされているかを
ubuntu software centerで「動画プレーヤー」と検索し、
プラグインがインストールされているか確認します。
私の場合は、GStreamerコーデックインストーラが入っていなかったようです。

早速プラグインのチェックをいれます。
インストールが完了するとDVDがめでたく再生できました!

ubuntuのssh&X転送を許可する方法

[Problem] Default setting of ubuntu ssh disallow X session forwarding
デフォルトのubuntu ssh設定はどうやらx転送をさせないらしいです。

その設定を変更するには、gdmもしくはlightdmの設定を変更しなければなりません。
私の環境では、ubuntu 12.04にapt-get install sshでインストールしたopensshは、
lightdmを同梱していました。
(ちょっと前まではgdmだった気がしますが、いつのまに??)
そのため、/etc/lightdm/lightdm.confを設定する必要がありました。


[Solution]
設定方法は下記を参照しました。

http://ubuntuforums.org/showthread.php?t=1310771

To enable TCP connections to the Xserver on Ubuntu Oneiric Ocelot (11.10):1) Open /etc/lightdm/lightdm.conf with your favorite editor.
2) Add the following line to section [SeatDefaults]:xserver-allow-tcp=true
[While you're at it you may want to add as well:allow-guest=falseto prevent unrestricted guest access to your computer, see this for more information 

/etc/lightdm/lightdm.confの設定後は下記の用になります。

[SeatDefaults]
user-session=ubuntu
greeter-session=unity-greeter
xserver-allow-tcp=true
allow-guest=false
下線を追加しました。

結果、ssh -X localhostでログインも可能になりました。

Monday, June 11, 2012

disk性能

今日使ったソフトは、窓の杜で公開されているCrystalDiskMark。
かなり有名なソフトのようです。
私は初めて使います。

【使った環境】
Windows 7 64bit , sata diskとusb flash memory。

【使い方】
http://www.forest.impress.co.jp/lib/sys/hrdbnch/benchmark/crystaldisk.html
上記ページからダウンロードします。
ダウンロードしたexeファイルを起動すると、インストールが始まります。
YahooやらBaiduやらいろんなものをインストールおすすめしてきますが、とりあえず全部アンチェック。

インストールが終了したら起動しましょう。
試行回数(1~9回)、ファイルサイズ(50MB-4000MB)、ドライブ名を指定してALLを押します。
まずはsata disk。

 次にcostcoで買ったusbメモリ(8GB)
ひどい!sataのdiskに勝っているのは4kB random readのみ。readyboostの資格なしと判断します。

Wednesday, June 06, 2012

ubuntuにandroidの開発環境構築

Ubuntuの実験用VMにandroid開発環境を準備したら、案外簡単だったのでご紹介。

【環境】
Core i5の4コア、メモリ4GBを搭載したWin7。
VMware Playerを稼動し、Ubuntu 12.04をインストールしたVMで実験。

【ツールインストール方法】
まずはここからandroid-sdk_*.tgzをダウンロード。
http://developer.android.com/sdk/index.html
例えばこんな感じ。
wget http://dl.google.com/android/android-sdk_r18-linux.tgz

次に、これを展開します。
tar zxvf android-sdk_r18linux.tgz

これでツール自体はインストール完了です。
そのため、adbとかも
android-sdk-linux/platform-tools/adb
にインストールされています。

【eclipseからのツール呼び出し方法】
eclipseがインストールされていなければ、
sudo apt-get install eclipse でインストールします。

eclipseにadt pluginを入れます。
eclipse上でHelp->Install New Softwareを選択。
site入力ボックスに

https://dl-ssl.google.com/android/eclipse/

を入力し、addします。
下にDevelopment Toolsが検索できたら、チェックボックスにチェックし、Nextを選択。
Acceptを選択し、Finishします。
ダウンロード&インストールが終了すると、elipseの再起動が求められますので従います。
再起動後、自動的にadt pluginにツールダウンロード場所をおしえてくれ、と
ダイアログが出てきますので、一番最初にダウンロードしたツールの展開場所を指定します。
詳しいことは下記に書いて有りますね。
http://developer.android.com/sdk/eclipse-adt.html#installing


だいたいこれで開発環境は出来上がったわけです。
開発するアプリやデバッグしたいandroidバージョンにあわせて、
android sdkメニューからandroidイメージやARMイメージなどをダウンロードして使用します。


【注意】
私はwindows+eclipseでこれまでandroid開発をしておりましたので、
そのプロジェクトをそのままimportすればいいのかと思っておりました。

問題が2つ発生しました。
1.Javaのバージョンが違うよと怒られる
2.androidアプリのビルドのために指定していたjarファイルなどの自前指定が、
 Windows環境のパスになっていてubuntuからは読めない
 (例:D:\android-dev\****.jar)

問題の解決方法は下記です。
1.Javaのバージョンが違うよと怒られる
eclipseが基本的に使うjavaのバージョンは、eclipseのWindow->preference->java->compilerの中に「1.5」とか「1.6」とか指定して有ります。これがWindowsのeclipseとubuntuのeclipseでずれるために
解決するためには、ubuntuのeclipseに合わせた設定をここで指定してあげれば良いのです。
http://www.ipentec.com/document/document.aspx?page=android-compiler-found-17-error&culture=ja-jp
もしくは、androidプロジェクトを右クリックしてpreferenceを選択。java compilerメニューの中に、やはり同じjava versionを指定する箇所があります(普段はenableされておらずグレーアウトしているはずです)これをenableして、適切なjava versionを指定すればよいです。


2.androidアプリのビルドのために指定していたjarファイルなどの自前指定が、
 Windows環境のパスになっていてubuntuからは読めない
これは、ubuntu上の適切な場所に同じjarを用意して、そのパスを再度指定してあげる必要があります。
ちょっとめんどくさいですね。

以上です。

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にしないといけないのかな。
次回はちゃんと画面遷移ができるようにするぞー!