読者です 読者をやめる 読者になる 読者になる

FragmentManager.getFragments()で一部nullが返ってくる問題

8個のFragmentと4つの項目が入ったListViewからなるビューを作成する機会があった。
ListViewの項目をクリックしたらFragmentが置き換わる、というものだ。
クリックした際追加するFragmentは上限が8個で必ずしも8個ではない、という状況であった。


クリックされたらgetFragments()で今あるFragmentを取得し削除し、新たに選択された項目のFragmentを追加する、という簡単なものだと思い、以下のコードを書いた。

for( Fragment fragment : fragmentManager.getFragments() ) {
    fragmentTransaction.remove(fragment);
}

しかしエラーがこんなエラーが…
java.lang.NullPointerException: Attempt to invoke virtual method
'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

ん…?
なぜぬるぽが…getFragments()って現在保持しているFragmentを返すんじゃなかったのか…


ということですこし調べて見た結果、直前のコミットでremoveしたFragmentのところに新たにFragmentを追加していなかった場合、getFragments()を使用すると追加してないFragmentのみnullとなって返ってくるということが判明した。


結局上記のコードを

for( Fragment fragment : fragmentManager.getFragments() ) {
    if (fragment == null)
        continue;

    fragmentTransaction.remove(fragment);
}

というふうに書き加え解決したが根本的な解決にはなっていない気がする…


どうしてこんな仕様なのか…自分のコードが間違っているのか…
とりあえず解決は出来ました。めでたしめでたし

Androidの無線LANデバッグ時の端末との接続を自動化

つい先日Androidの実機デバッグ無線LAN経由でやる方法を知った。
無線LAN経由でできる、というのは知っていたがなぜかやってなかった…
こんな便利なのに…

主なやり方は


AndroidとPCをUSB接続した後にadbコマンドで


adb tcpip ポート番号

adb connect 端末のIP : 上で設定したポート番号

で接続できる。
端末のIPは設定→端末の状態から確認できる。
しかし常に同じ端末でデバッグをしない人からすると毎回IPを確認するのはとても面倒…
ということで自動で接続できるスクリプト書きました。

主にやってることは「adb shell netcfg」コマンドで取得したネットワーク状態からwlan0のIPを抽出してるだけ。

詳しいコードは以下を参照

utils/android_connect.sh at master · Nshiba/utils · GitHub

 

今までシェルスクリプトとか正規表現を全く勉強してなかったのでちょっと手こずった(というか強い人に教えてもらった)

これからはもっと勉強していこうな

 

※追記

デバッグ終了後は端末IPと設定したポート番号を知っていればだれでも接続できちゃうので危ない。

なので必ずUSB接続して「adb usb」コマンドを打つこと

djangoでのstaticファイルが読み込まれない闇

こんにちわ。

最近はpythondjangoしています。

今回自分のローカル環境でdjangoプロジェクトを開発してサーバに上げたらstaticファイルが読み込まれず、cssが適用されない、という自体に陥りました。

 

サーバの環境はnginx+gunicornになります。

環境の詳しい説明はggrばたくさん出てくると思いますのでここでは割愛。

 

そこで今回の問題。

設定ファイルは以下の通り

nginx.conf

user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
 worker_connections 1024;
}


http {
  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';

  access_log /var/log/nginx/access.log main;

  sendfile on;
  #tcp_nopush on;

  keepalive_timeout 65;

  #gzip on;

  include /etc/nginx/conf.d/*.conf;
}

 

 

default.conf

 

server {
  server_name www.zanryu-derby.com;

  access_log off;

  location /static {
    alias /home/naoya/Projects/Zanryu_Derby/static;
    #root /static;
  }

  location / {
    proxy_pass http://127.0.0.1:9001;
    proxy_set_header X-Forwarded-Host $server_name;
    proxy_set_header X-Real-IP $remote_addr;
    add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
  }
}

 

ちゃんとSTATIC_ROOTに変えたしnginxの設定のstaitc_rootもちゃんと設定したのに読み込まれない…

 

ログを見てみると

2014/12/05 03:35:32 [error] 25727#0: *10 open() "/home/naoya/Projects/Zanryu_Derby/static/css/reset.min.css" failed (13: Permission denied), client: 133.20.55.189, server: www.zanryu-derby.com, request: "GET /static/css/reset.min.css HTTP/1.1", host: "133.20.55.164"
2014/12/05 03:35:32 [error] 25727#0: *14 open() "/home/naoya/Projects/Zanryu_Derby/static/css/bootstrap.css" failed (13: Permission denied), client: 133.20.55.189, server: www.zanryu-derby.com, request: "GET /static/css/bootstrap.css HTTP/1.1", host: "133.20.55.164"
2014/12/05 03:35:32 [error] 25727#0: *15 open() "/home/naoya/Projects/Zanryu_Derby/static/css/main.css" failed (13: Permission denied), client: 133.20.55.189, server: www.zanryu-derby.com, request: "GET /static/css/main.css HTTP/1.1", host: "133.20.55.164"

 

アクセス権限がない?と言われている。

 

ここでググってみて権限を与えたり、所有者をnginxにしたりと、ひと通りの方法を試したがダメだった…

 

そしてnginx.confの "user  nginx" の部分をもともとのファイルの所有者である "user  naoya" に変えたところcssが読み込まれた!!!

 

無事解決できたのだがなぜ "user  nginx" に変えた時はダメだったのだろうか…

 

まぁ解決できて良かった良かった。

 

すごい雑だが一応メモということで。

CEATEC JAPAN 2014 に行ってきました

2014/10/10にCEATEC JAPAN 2014に行ってきました。

こちら公式ページ


CEATEC JAPAN 2014 ( シーテック ジャパン 公式サイト )

 

いろいろと自分の足りないところやこれからやりたいことがなんとなく見えてきたので行ってとてもよかったです。

 

で、自分の興味のあるものや個人的に興奮したものを取り上げていきます。

 

一つ目

KOA CORPORATION.

こちらの会社では

「風力センサ」を展示していました。

f:id:Nshiba:20141012034107j:plain

今回は見えないですが天井にあった扇風機とうちわをあおいで風を当てていて、風が当たったところが青く光る、というものでした。

ちょっと詳しくは見てこなかったのでどういう風なつくりになってるのかわからないんですが、「温度センサ」を用いているそうです。

f:id:Nshiba:20141012034519j:plainf:id:Nshiba:20141012034557j:plain

 

2つ目

すいません…ちょっと企業名を忘れてしまってメモもしてなかった…

取り合えず画像を

f:id:Nshiba:20141012035839j:plainf:id:Nshiba:20141012035913j:plain

ガラスなどに透明な薄い一枚のシートを張るだけでどこでもスクリーンに!

って奴です。かなり手軽にスクリーン化することができるのでかなりいろいろ(たとえばミクさん)できそうですよね。

一緒に行った友達は「広告の代わりにこれにしたら最初の手間だけで済んで楽だし紙節約できるね」と言ってました。

たしかに最近(最近でもないけど)大きいショッピングモールなどでは電子看板をよく見かけますね。

 

3つ目

シャープ株式会社

’’’’’四角ではない’’’’’ディスプレイ

f:id:Nshiba:20141012040853j:plain

お?

f:id:Nshiba:20141012040931j:plain

 おおおおおお!!!!!

いやー実物を見たのは初めてでした。

すごい、すごいです。

あと4Kはもちろん、8Kディスプレイもおいてあってもうなんかすごすぎてわかりませんでした。

 

他にもいろいろ魅力的な物がありました。

個人的にはARの分野を活用してすれば実現させたいことに近づけるのかなーと思いました。

あと2つ目でご紹介した物はかなり興味あったりします。(もっとちゃんと見てくればよかった…)

 

最後にここのコンパニオンさんがとても、とても美しかったです!!!!!!!

(いや冗談抜きに、本当ですよ、マジで)

f:id:Nshiba:20141012041451j:plain

blogはじめました

blogはじめました。

 

たぶんプログラムやアニメ、趣味などを書いていこうと思ってます。

 

最初のほうは最近学んだことを思い出しつつ書くかも

 

よろしくおねがいします。

 

そういえばこれ昨日つくったやつ↓

カッティングシートって奴です。

ぱなそにっくじゃま!!!

f:id:Nshiba:20141003015416j:plain