2016年6月23日木曜日

potatotips #30 (iOS/Android開発Tips共有会)6月23日に参加レポート

potatotips #30 (iOS/Android開発Tips共有会)6月23日に参加してきました。 

変更履歴
2016/06/25 RxJavaを活用する3つのユースケースのプレゼンテーション追加


http://potatotips.connpass.com/event/32665/

基本は発表者間の懇親が中心なので、オーディエンス枠は15名のみだけで、オーディエンス枠に50名の応募がある人気勉強会です(オーディエンス枠は抽選で決定)。今回は、ブログ枠で参加です。Androidの発表についてまとめてみます。

プレゼンテーションが公開されたら適宜リンクしていきます。

 1. VOYAGE GROUPの紹介 

今回の会場提供のVOYAGE GROUPさんの紹介。無料会議室貸出やピザの差し入れをしているそうで、使ってみたい方はコンタクトすると良いと思います。

 2. KENさん CDD(コンポーネント駆動開発) Android

サンプルプログラム
https://github.com/KEN0331/cdd

急遽代打発表のKENさんによる「Fragmentの再利用性とAPI通信」について。Timeline表示について。例えば、Profile表示ありと、Profile表示なしのでTimeline表示する方法。Timelineの共通のFragmentを設計方法。一つのTimelineFragmentを作って、onLoadTimeline(callback)を定義して画面に依存しないFragmentを作る。 通信モジュールは、表示したい内容を通信して、Fragmentに通信した内容を返す。Timeline型のアプリは作ったことないのですが、機会があったら参考にして作ってみたいです。

3. @hkusu_さん Androidアプリ開発でRxJavaを活用する3つのユースケース


プレゼンテーション


RxJavaをAndroidで使う話。今回は特にイベントをどのように扱うかを整理してみたお話。1つめは、結果の受け取り方。2. メモできず..3. 値の監視の作り方。特に、データ保持クラスと、それを表示に反映するのは、別々に実装できる。

ActivityのonPauseで購読を止める場合には、unsubscribeする。

でも、まだプロダクトにRxJavaは使っていないそうです....

サンプルアプリ
https://github.com/hkusu/android-mvc-sample

お勧めの構成
Activity/Fragment
     ^
     |
UseCase層
     ^
     |
Repository層
     ^
     |
Service層

4. ねこえさん   プッシュ通知の「開封」を検知する方法

プッシュ通知をなんで検知したいかは、プッシュ通知の効果計測(アトリビューション分析)したいので検討してみた。今回の「開封」の定義は、「Notificationがタップされたこと」。

PendingIntentが発火するかどうかで、計測したいが...普通は計測できない。しかし、Activity側ではどのIntentから起動されたか分からない!!

IntentをBroadcastReceiverで受け取ってから、Activityに渡す実装で検知を実現する。BroadcastReceiverでどのPush通知から呼ばれたかを判断した。

上記の制限1)、Notificationせずに、直接アプリ起動した場合は計測もれとなる。そのため、みなし開封テクニックも必要。

上記の制限2)、FLAG_ACTIVITY_NEW_TASKフラグが必要。

5. しろやまさん     Realm for Android Tips  Android

参加者へのアンケートでRealmのプロダクションで使っている人もそこそこいらっしゃる。(実際にproductionレベルで使える)

Nikkei新聞アプリは、RealmにデータをdownloadしてofflineではRealmのデータを使って表示しています。

Callback式の更新時に通知してもらって対応することが可能。

パフォーマンスも良いです!!、いろいろな制限事項も減ってきているので使いやすいです!!

Realm Browserもあって、中身を見れる。

紹介したいポイント2つ
1) RealmRecycleViewAdapter便利です。2) RxJavaにNativeで対応している。

日本語のドキュメントも充実しているので見てみてください


6. しょーんかわのさん   Introduction to AutoValue

プレゼンテーション

Googleが作っているJavaのlibraryの話。

まず、Article.classをベースに説明。最初はシンプルなclassが要件が増えてくるとだんだん複雑になっていく...

それを解決するのが、AutoValue。これで自動的に生成される。(@AutoValue, @AutoValue.Builder, AutoValue Extensionもいろいろある)例えば、Parcelableも自動生成。

7. やまくらふとさん     FirebaseのAuth機能
詳細は、Firebaseの勉強会で!!神泉Firebase勉強会 #1

Otemachi Firebase #1

Twitter/Github/Facebook/Googleログインに対応して、Auth系のtoken取得/管理をうまくやってくれる機能です。他にもemail, 匿名アカウントも取得・管理可能。

基本は、token管理のみなので、SNSログイン自体の仕組みは、それぞれのSDKで実装する必要がある...

8.magiepoohさん How to detect phone call

プレゼンテーション
AbemaTV Appで着信時に音を止めたい要望があり対応したときのTipを発表します。

1. TelephonyManagerを使う場合。
   READ_PHONE_STATE permissionの追加が必要で対応大変

2. AudioManagerを使う場合
   API Level8からで対応。Audio fouceの変更を検知して対応。
   permission不要です。以外に良い感じで動く。音楽再生ソフトによい。


2016年5月24日火曜日

[FreeBSD]DS-Lite with FreeBSD

FreeBSDを用いてDS-Liteをしてみました。目的は夜間のIPv6回線が遅くなる点の改善です。

追記:FreeBSDならば、佐藤さんのFreeBSDworkshopでの発表が詳しく良い設定です。

修正:2016/10/2 dslite-ctl.shを修正しました。sudo sysctl net.inet6.ip6.forwarding=1
のコメントインを削除しました(IIJ Blogと同じ設定にする)。そうしないと以下のエラーで
IPv6のdefault routeが消えていました。

nd6_dad_timer: cancel DAD on gif0 because of ND6_IFF_IFDISABLED.


1) 用いたプロバイダーIIJmio
2) IPv6接続は、IPoE(IIJmioのIPoEオプション)

用いた機器
1) Odroid-C1(ARMが動くボードですが、Raspberry PIやi386/AMD64のFreeBSDが動く機材でも同様な設定で動くと思います。
2) FreeBSD-current
3) NTT PR-500KI (光ルーター) IP: 192.168.100.1


Odroid-C1の/etc/rc.conf amle0がOdroid-C1のLAN portです。
##############################################
#
# enable IPv4
#
ifconfig_amle0_name="net0"
ifconfig_net0="192.168.100.2/24"
##############################################
#
# enable IPv6
# https://www.freebsd.org/doc/handbook/network-ipv6.html
#
ifconfig_net0_ipv6="inet6 accept_rtadv"
rtsold_enable="YES"
##############################################
#
# enable DHCP Server
#
dhcpd_enable="YES"

dhcpd.conf
default-lease-time 600;
max-lease-time 7200;

log-facility local7;

subnet 192.168.100.0 netmask 255.255.255.0 {
  range 192.168.100.101 192.168.100.150;
  option domain-name-servers 192.168.100.1;
  option domain-name "example.com";
  option routers 192.168.100.2;
  option broadcast-address 192.168.100.255;
  default-lease-time 600;
  max-lease-time 7200;
}

MacOS X用dslite.shへのパッチ(http://techlog.iij.ad.jp/contents/dslite-macosx)
変更ポイントは、

  • LANのport nameをnet0へ
  • 自宅の環境では、gw.transix.jpの名前解決ができなかったため、決め打ちで東日本用アドレスを設定

--- dslite-ctl.sh.org   2016-05-12 07:51:34.905693000 +0900
+++ dslite-ctl.sh.pulic 2016-05-24 22:44:18.206909000 +0900
@@ -15,6 +15,7 @@
   echo "Ethernet Interface: ${IF}"
   echo "MY_GUA: ${MY_GUA}"
   echo "AFTR_GUA: ${AFTR_GUA}"
+  sudo ifconfig gif0 create
   sudo ifconfig gif0 inet6 tunnel ${MY_GUA} ${AFTR_GUA}
   sudo ifconfig gif0 mtu 1500
   sudo ifconfig gif0 inet 192.0.0.2/30 192.0.0.1
@@ -43,15 +44,17 @@
 get_my_gua() {
   for i in ${EN_NUM}
   do
-    MY_GUA=`ifconfig en${i} inet6| grep 'inet6 2409:[0-9a-f:]*ff:fe[0-9a-f:]*' | sed 's/\%.*//' | cut -d ' ' -f 2`
+    MY_GUA=`ifconfig net${i} inet6| grep 'inet6 2409:[0-9a-f:]*ff:fe[0-9a-f:]*' | sed 's/\%.*//' | cut -d ' ' -f 2`
     if [ "${MY_GUA}" ]; then
-      IF="en${i}"
+      IF="net${i}"
       return
     fi
   done
 }
 COM=`basename $0`
-AFTR_GUA=`host ${AFTR_FQDN} | grep '2404:8e0' | sed -e '1!d' -e 's/.* address //'`
+#AFTR_GUA=`host ${AFTR_FQDN} | grep '2404:8e0' | sed -e '1!d' -e 's/.* address //'`
+AFTR_GUA="2404:8e00::feed:100"
+
 get_my_gua
 if [ ! "${MY_GUA}" -o ! "${AFTR_GUA}" ]; then
   echo "Error: My Global Unicast Address and/or AFTR IPv6 Address not found."



2015年10月10日土曜日

[FreeBSD]developping Android application on FreeBSD

I'm interested in programming Android Application. Now I'm trying to program on FreeBSD.
If you have any information about this, please let me know(sanpei FreeBSD dot org)

Android Studio

  • Windows(guest) on VirtualBox on FreeBSD(host)
    • edit and compile[OK], USB debug[Slow,NG]
    • unfortunately USB2 is not supported on VirtualBox/FreeBSD, so it's very slow to deply your apk to real mobile phone

  •  Linux(guest) on bhyve(grub-bhyve)  on FreeBSD(host)
    • edit and compile[OK], USB debug[NG]
    • Run Android Studio, but currently it can't connect mobile phone via USB.
    • I'm trying to passthrough PCI/USB to guest OS. but currently I can't.

Eclipse Enviroment

  • gradle
  • ant

2015年9月11日金曜日

[FreeBSD] Lenovo ThinkPad T410(update 2015/09/16 suspend/resume)

I use Lenovo ThinkPad T410 with FreeBSD-11/amd64.

Specification of Lenovo T410
Core i5(M 520  @ 2.40GHz)
8GB Memory
160GB HDD
NVIDIA GT218M [NVS 3100M] with WXGA+(1440×900)

Change log
2015/09/16: about suspend resume on X Window(nvidia Linux driver)

1. boot

FreeBSD-11-current/amd64r287499[OK]

2. suspend resume[OK]

/etc/sysctl.conf
hw.acpi.lid_switch_state=S3
/etc/rc.conf
powerd_enable="YES"
apm_enable="YES"
apmd_enable="YES"

But When start X server, after resume Screen is blank. So I currently manually switch to console[CTRL]+[ALT]+[F1] and back to X window[ALT]+[F9](2015/09/16)
With below changes(/etc/rc.suspend and /etc/rc.resume), screen blank issue was solved(2015/09/16). But after resume, LCD brightness is changed to max level.
So I need to change brightness under console([CTRL]+[ALT]+[F1}, [Fn]+[End], [ALT]+[F9])
Added Option "RegistryDwords" like below in xorg.conf, I can control brightness on X Window(2015/09/16)

--- /usr/src/etc/rc.suspend     2015-09-04 07:17:56.262486000 +0900
+++ /etc/rc.suspend     2015-09-15 21:07:03.086415000 +0900
@@ -51,6 +51,8 @@
 # If a device driver has problems suspending, try unloading it before
 # suspend and reloading it on resume.  Example:
 # kldunload usb
+/bin/sleep 1
+/usr/sbin/vidcontrol -s 1 < /dev/console
 
 /usr/bin/logger -t $subsystem suspend at `/bin/date +'%Y%m%d %H:%M:%S'`
 /bin/sync && /bin/sync && /bin/sync
--- /usr/src/etc/rc.resume      2015-09-04 07:17:56.061764000 +0900
+++ /etc/rc.resume      2015-09-15 21:07:22.665667000 +0900
@@ -55,4 +55,7 @@
 /usr/bin/logger -t $subsystem resumed at `/bin/date +'%Y%m%d %H:%M:%S'`
 /bin/sync && /bin/sync && /bin/sync
 
+sleep 1
+/usr/sbin/vidcontrol -s 9 < /dev/console
+
 exit 0
Section "Device"
        Identifier  "Card0"
        Driver      "nvidia"
        BusID       "PCI:1:0:0"
        Option "RegistryDwords" "EnableBrightnessControl=1"
EndSection


3. internel Wi-Fi[NG]

below is my log but NG.
RTL8191SEvB Wireless LAN Controller http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=1&PNid=21&PFid=48&Level=5&Conn=4&ProdID=226&DownTypeID=3&GetDown=false&Downloads=true Windows driver auto installation program (support WinXP/Vista)
http://rtl8191-ndis-freebsd-amd64.pages.psl1ght.ru/
https://translate.google.com/translate?sl=ru&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=http%3A%2F%2Frtl8191-ndis-freebsd-amd64.pages.psl1ght.ru%2F&edit-text
 
# ndisgen RTL8191_8192_SE_WindowsDriver_1094.5.0117.2012.F0049_13.P0406_ISS_1.00.0180.L/91_92_SE_Driver/WinX64/nt8192se.inf RTL8191_8192_SE_WindowsDriver_1094.5.0117.2012.F0049_13.P0406_ISS_1.00.0180.L/91_92_SE_Driver/WinX64/rtl8192se.sys

# kldload ./rtl8192se_sys.ko
no match for NdisMCloseLog
no match for NdisMCreateLog
no match for NdisMWriteLogData
no match for ExCreateCallback
no match for ExNotifyCallback
no match for IoWMIQueryAllData
no match for IoWMIOpenBlock
ndis0: <11b adapter="" express="" g="" ii="" lan="" mini-pci="" n="" wireless=""> port 0x3000-0x30ff m\
em 0xf2000000-0xf2003fff irq 17 at device 0.0 on pci3
device_attach: ndis0 attach returned 12
pci0:3:0:0: Device leaked IRQ resources
pci0:3:0:0: Device leaked memory resources
pci0:3:0:0: Device leaked I/O resources
 

4. USB Wi-Fi (run0) [OK]

/etc/rc.conf
wlans_run0="wlan0"
ifconfig_wlan0="WPA DHCP"
And you need to setup /etc/wpa_supplicant.conf.
See wpa_supplicant related document.

5. Internetl 1000base-TX LAN(em0) [OK]


6. Sound [OK]

on /etc/sysctl.conf
hw.snd.default_unit=5 # 5=internal speaker, 4=3.5mm jack

7. X Window server[OK]

I use x11/nvidia-driver-340 and you need to enable linux emulator.
linux_enable="YES"

8. my /boot/loader.conf

cpufreq_load="YES"
acpi_load="YES"
acpi_ibm_load="YES"
#
drm2_load="YES"
#
# Boot-time kernel tuning(for chromium)
kern.ipc.shmseg=1024
kern.ipc.shmmni=1024
kern.maxproc=10000
#
# bridge module(for VirtualBox)
if_bridge_load="YES"             # if_bridge(4) devices
if_tap_load="YES"                # Ethernet tunnel software network interface
vboxdrv_load="YES"
#
# for Video Driver
nvidia_load="YES"
#
if_ural_load="YES"
if_run_load="YES"               # Ralink Technology USB 802.11a/g/n wireless
runfw_load="YES"

9. my /etc/rc.conf(related to ThinkPad)

# power management
powerd_enable="YES"
apm_enable="YES"
apmd_enable="YES"
# X Window
linux_enable="YES"      # Linux binary compatibility loaded at startup (or NO).
dbus_enable="YES"
hald_enable="YES"
# network
wlans_run0="wlan0"
ifconfig_wlan0="WPA DHCP"
##############################################
#
# VirtualBox
#
# http://wiki.zs64.net/VirtualBox_on_FreeBSD_cheat_sheet
#
cloned_interfaces="bridge0 tap0 tap1 tap2"
ifconfig_bridge0="ether 02:00:00:00:00:01 addm tap0 addm tap1 addm tap2 addm net0 wlan0"
devfs_system_ruleset="system"
#
vboxnet_enable="YES"

10. my kernel configuration

include GENERIC

ident           LAVENDER
#
nooptions         DDB                     # Support DDB.
nooptions         GDB                     # Support remote GDB.
nooptions         DEADLKRES               # Enable the deadlock resolver
nooptions       INVARIANTS              # Enable calls of extra sanity checking
nooptions       INVARIANT_SUPPORT       # Extra sanity checks of internal structures, required by INVARIANTS
nooptions       WITNESS                 # Enable checks to detect deadlocks and cycles
nooptions       WITNESS_SKIPSPIN        # Don't run witness on spinlocks for speed

nooptions         MALLOC_DEBUG_MAXZONES # Separate malloc(9) zones

11. my /etc/sysctl.conf

hw.acpi.lid_switch_state=S3
kern.ipc.shm_allow_removed=1
#
# Disable PC Speaker
kern.vt.enable_bell=0
net.link.tap.user_open=3
net.link.tap.up_on_open=3
hw.snd.default_unit=5 # 5=internal speaker, 4=3.5mm jack

2015年5月26日火曜日

行ってみたい博物館

East Tokyo

  • 地下鉄博物館
  • 航空科学博物館 http://www.aeromuseum.or.jp/
  • 海洋研究開発機構 http://www.jamstec.go.jp/j/
  • 日本製紙グループ 御茶ノ水ペーパーギャラリー http://www.nipponpapergroup.com/opg/
  • 国立天文台
  • かわさきエコ暮らし未来館
    • https://eco-miraikan.jp/
  • 多摩美術大学図書館
    • http://library.tamabi.ac.jp/
  • 【リンク集】大人なら10倍楽しめる?! 夏休みに行きたい博物館&工場見学~現代産業編 -INTERNET Watch
  • http://internet.watch.impress.co.jp/docs/link/20150710_711013.html

2014年12月25日木曜日

wdbでいくつかのblogのRSSに対応する(Yahoo blog, goo blog, feedburner.com)

Webの更新チェックプログラムwdbをYahoo blog, goo blog, feedburner.comに対応しました。

さんのコードに追加対応しました。

http://www.sanpei.org/~sanpei/tmp/wdblib.pl

備忘録
Yahoo blogは:がオリジナルコンテンツのURL以外を指しているので強引に処理
goo blogは、URLの末尾に?fm=rssが含まれるので削除
feedburner.comは、RSSバージョンの記載同一行にchannelの記載があるのでその対応

残件
httpsへの対応(大変そうなので対応するパワーなし)

2014年11月4日火曜日

[Linux] ThinkPad X31

I use Linux Ubuntu 12.x on IBM ThinkPad X31.
Because This machine is slow and FreeBSD/i386-chromium is slow than Linux Google-chrome(unfortunately I did not know the reason).

Some tips for Linux and IBM ThinkPad X31.

1. suspend

sudo pm-suspend –quirk-vbemode-restore

2. fvwm2 setting for Chrome
Style "Google-chrome" NoTitle,BorderWidth 1,HandleWidth 1
Style "Google-*chromium*" NoTitle,BorderWidth 1,HandleWidth 1
Style "Google-*Chrome*" NoTitle,BorderWidth 1,HandleWidth 1
Style "Google-*chrome*" NoTitle,BorderWidth 1,HandleWidth 1
Style "Google-*Chromium*" NoTitle,BorderWidth 1,HandleWidth 1