2016年9月21日水曜日

[DMM英会話]便利なFirefox Plugin/Chrome Extension(2019/06/23編集)

DMM英会話をする上で、便利なFirefox Plugin/Chrome Extensionをリストアップします。

(2016/11/23追記: weblioPaneで音声を出すときの設定Tips)
(2017/3/22 追記: Wired-MakerがFirefox 52以降で動かなくなったため、Textmarkerを追記)
(2017/5/13 追記:  Google Translatorを追加)
(2017/10/15 追記: メインに使うブラウザをChromeに変更して、Chromeの情報を追記
(2017/11/18 追記: Google翻訳の表示位置問題は2.0.7で解決しました)
(2019/06/23 追記: Mouse Dictionaryを追加)
  • Chrome Extension
    • Mouse Dictionary
      • 高速offline対応dictionary
      • Eijiroなども利用可能(要辞書購入500円)
      • 詳細は作者のページを参照ください。FireFox版もあるようです。
    • Google Dictionary (by Google)
      • Pop-Up Dictionary
      • DMMの教材はCSPが設定されており、Pop-Up Windowの発音ボタンで音声が聞こえません。そのためContent Security Policy Overrideに以下の設定をして、CSPをオーバーライドしています。
      • [
          ["https://app\\.eikaiwa\\.dmm\\.com/daily-news/*", [
            ["media-src", "media-src * "],
            ["default-src", "default-src * "],
            ["img-src ", "img-src  * blob: "]
          ]]
        ]
        
        
    • Google 翻訳 (2.0.7)
      • CSP overrideの設定をせずとも動作する。しかしPop-Up位置がずれて見えない場合がある。(2.0.7で修正されました)'
    • Super Simple Highlighter
      • 予習時に不明点などをマークするExtension

  • FireFox向けPlugin
    • Wired-Maker
      • 予習時に不明点などをマークするPlugin
      • Firefox 52以降では動かなかった
    • Textmarker
      • 予習時に不明点などをマークするPlugin
    • weblioPane fx40fixed
      • Online辞書、テキストの文字を選択すると自動的に辞書引きしてくれます。また、発音も容易に確認できます。
      • スピーカーマークを押すと発音を聞けますが、Adobe Flash Playerをインストールしていないと、毎回Media Playerを起動することとなります。Adobe Flash Playerをインストールすれば、スピーカーマークをクリックするだけで何度でも発音を聞くことができます(2016/11/23追記)
    • Google™ Translator
      • 予習時に意味が分からない文を理解するため。

2016年8月23日火曜日

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

potatotips #32 (iOS/Android開発Tips共有会)8月23日に参加してきました。
Android ブログ枠で参加しましたので、レポートします。

会場の「Wantedly, Inc.」はテーブル付きでクッションも良い椅子でした[Good]。

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

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

2. たーみーさん 「I/O 2016 で発表された Awareness API をいじってみた」

http://slides.rnita.me/20160823-potatotips-32/#/


 - Awareness API: 「どこに居るか」「なにしているか」「近くになにがあ
る」をまとめて処理できるAPI。

  - 7つの機能に対応
  (Location, Place, Beacons, Time, Activity, Headphones, Weather)

  - 2つのAPI(Fence API(通知してもらう), Snapshot API(いまどうなの?)

 - 今回の発表は公式サンプルアプリを動かしてみての感想
   - Snapshot APIだと、callbackされて状態が分かる
   - Fence APIだと、 FenceReciverが呼ばれる。

 - まとめ
   - 導入はかんたん、Build Tools > v21, Gogle Support Library
   - サンプルも簡単に動きました
   - Placeなど調べてみたい。

4. よしおかさん 「暗黙的IntentをプログラマブルにするTips」

  - 「iOSでいうところのUniversal Link対応」
  - WebのURLからアプリを起動できる。
  - 普通に作るといろいろも問題がある。
       - URLの数だけManifestにIntentが増えるなどなど。
  - 案1: なんでも受け取って、アプリ内部で処理する。
  - 案2: コードの自動生成
       - Templateエンジンを使って自動生成
       - プロダクト本体以外のメインテナンスが発生している。
  - 案3: Xamarin
       - Activityの上にManifestのIntentFilterが記載できる。

5. しょーんかわのさん 「Taking glance at RxJava 2」


  - RxJava2(未リリース)の説明
  - 変更点1: Reactive Streamsの対応
        - データを止めること無く流すことができる。
  - 変更点2: 1.x to 2.x
     - package名画変わる
     - メモできず...
     - Action 0 -> java.lang.Runnable
     - Action 1 -> Consumer, Action 2 -> Bi...
     - Func3-Func9 -> Function3- Function9
     - Subscribe()メソッドでも、Subscriptionは返らない。
     - Subscription->disposeに

  - 10月に本リリース予定。
  - githubレポジトリが参考になる。
  - Fragmented Podcast:053が参考になる
  - Droidcon NYC2016(Paid Live Stream予定)

7. カトウリュウさん 「今日からはじめるAndroidCI」


  - アンドロイドアカデミア本で詳細書いています。
  - ビルド、テスト、Lintなどなどをやっている。
  - BITRISEの紹介
      - 設定簡単
  - デモ
      - ポチポチボタンを押しているだけで、CI始められる
      - gradleの中身も自動認識
      - build通知もslackに遅れる。

  - まとめ
    - まず「できることから始めるのが大切」

    https://www.bitrise.io/

  BITRISEは無料コースもあるようです。

9. かつとむさん 「RuntimePermissionをAOPで解決する」




  - AOPとは、
     - アスペクト指向プログラミング
  - @NeedPermissionと記載するだけで良い。

  - gradle-android-plugin-aspectjx を使う
    - InstantRunとの相性が悪い...(個人的には...)
  - permissionaspect

  まとめより
    - PermissionAspectはバグもある...

Twitterから「PermissionDispatcher」の紹介もありました。


11. まえすとろ/Tanimotoさん 「DeviceOwnerのお話」


- DeviceOwner - Android 6.0以上ならば、自動でアプリインストールが可能 - 作り方 - adb shell dpm set-device-owner パッケージ名...を実行 - M Permissionの自動許可設定も可能 - アンインストール不可アプリ設定も可能 - Androidタブレットを一つの用途だけに使う場合には便利 - Google Playに公開するアプリでは使わないように...

13. カエラエラ/まえかわさん 「WebSocket for Android」


  - 良い点
     - No request headerで速い
     - Real time communicationできます。
     - HTTPのproxyやfilterやauthなどを使える。

  - 悪い点
     - errorハンドリングが難しい
     - 再接続処理が難しい

  - 使い方
     - Socket.io
     - Java-websocket
     - OKhttp-ws
     - .Socket

 - Okhttp-wsの例
     - でも、まだ未完全らしい。

2016年7月21日木曜日

potatotips #31 (iOS/Android開発Tips共有会)7月21日に参加レポート

potatotips #31 (iOS/Android開発Tips共有会)7月21日に参加してきました。
Android ブログ枠で参加しましたので、レポートします。

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

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

2. y_matsuwitterさん「Puree+Kinesisでのログ収集パターン」


  ログ収集する場合の課題は? ユーザー属性の計測に融通が効かない場合が多いので、その解決策をPuree+Kinesisを使った説明

Puree: Cookpad製のコレクタ(retry/bufferingなどをやってくれる)
AWS Kineis: 直接LOGを収集・変換サービス

1. PufreeBuffer Bulkで非同期で送信する..(メモできませんでした)。

実装の注意点、1) Authorization 2) Partition Keyなどが注意

簡単に出来るので使ってみましょう。

4.  すみともさん  「AdapterToolboxでRecyclerViewを楽にする」



背景としては「RecyclerViewに複数のデータ型を入れたい案件が多い」

RecycleViewを実装がつらいので、それを楽する方法。神Adapterを使うのも使い。

データ型から自動的に束ねるAdapterがあると便利なので、AdapterToolを作った話。

他の良い案や改良点募集中だそうです。

https://github.com/cattaka/AdapterToolbox

6. nekoeさん「Activityのライフサイクルイベントを監視する」

いろいろなActivityのタイミングで、いろいろな監視をしたいので、その監視のテクニックをSDK作成者の支店で説明。

onCreateでcCallback登録するだけで良い。

使う上のTips

1. 複数のCallbacksを登録できる。
2. 他アプリのTaskに含まれるActivityのライフサイクルイベントでもコールバックされる。
3. 最前面にあるActivityのResumeが最後に呼ばれるわけではない。
  (端末回転時など、処理順序に依存しないコールバックが呼ばれる場合がある)

8. ikamooonさん  「周辺beaconを取得するwearアプリを追加してローンチするまで」

ウェアラブルデバイスでのiBeaconの感度を検証してみた。Android端末毎の感度が違う結果があったので(70台ぐらいで調査)。ウェアラブル版での検証結果。

作り方

1. Android Studioでwearアプリを追加
2. alt-beacon libraryを利用
3. 実装では、全てのbeaconを取得してモニターさせるアプリを作った。
4. RSSIを表示する(ほぼAndroidのコードと同じ感じ)
5. Androidアプリ側にもbluetooth/locationのpermissionが必要だった。
6.アプリを公開するための準備 :aa build.gradleに追記必要

Watchの感度は意外によかった

10. magiepoohさん「How to get StatusBar and NavigationBar size」

https://github.com/magiepooh/AdjustFullScreenLayout


shibuya.apkでの発表の補足情報

TabletやPhoneで取得方法が違うので、そのあたりをうまく解決する方法

Googleのあらきさん方からWindowInsetsCompatを紹介された。
OnApplyWindowInsetsで、各値を知ることができる!!!

WindowInsetsCompatは値が返ってくるタイミングが遅れる場合があるので、magiepoohさんのlibraryの方が良い場合もある。

12. yuichi_maekawaさん「OpenGraphでURLをリッチに見せる」

本日のスライド
http://qiita.com/kaelaela/items/934fa1096e6181ee1a54

関連コード
https://github.com/kaelaela/OpenGraphView

- Open Graph protocol(Web Pageにtagを追加してリッチに表示される)

- og:title:...などである。
- デメリットOpenGraphに対応していないブラウザもあるの注意

Custom Viewで作ってみた話
Kaela...メモできず。

- HTMLのパースが面倒で、頑張ってパーサー実装しました。
- 通信も自分で作った。
- 画像のCacheも実装した。

作ってみての感想は小さなライブラリを組み合わせるのが64k問題などもあるので、よさそう。

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