Sun, Jun 7, 2015

EasytetherでBluetoothテザリング

Easytether with linux EasytetherFull( GooglePlay ) 数年前に、AndroidのXperia acroHD使ってた時に利用してた有償のテザリングアプリ。一応FreeのLite版もある。 そして、公式のLinux向けクライアントがある。 当時はUSBテザリングで利用しており、テザリングサポート外の端末でも動作して、そこそこ速度が出ていたので利用していた。 Linux版パッケージはこちら からダウンロード可。 現在利用しているXperia Z1fではUSBテザリング、Wifiテザリング、Bluetoothは標準でサポートされている。 いつもはXperia側のバッテリーの事を気にかけてBluetoothでテザリングを行っていたが、Easytetherの事だから標準より速度出るのでは…?と、気になってみたのでやってみた Speedテスト3回戦 Easytether Bluetoothテザリング AndroidのBluetoothテザリング やはり、Easytetherの方が早い 若干だけれども。 ただ、バッテリー消費量の検証は行っていないので片手落ち感はある。 ただし起動/終了が面倒なので、ショートカット割り当てまで行う。 おまけ(起動スクリプトの登録) 接続を切り替えるscriptを作る easytether.shを任意のディレクトリに作成。 #!/bin/sh pgrep -lf easytether ret=$? if test ${ret} -eq 0 then # 既に起動中の場合停止させる pkill easytether -f else # 対象のスマホのBluetoothのMACアドレスを指定して接続 sudo easytether-bluetooth BT:MA:CA:DD:RE:SS fi 内容はこんな感じ。
Sun, May 31, 2015

Linuxでブルーライトフィルタ そして快眠へ...

毎日趣味や作業でPCと対面するため、目の疲れや夜の寝不足と行ったことからは免れられない。 少しでも目への負荷を軽減させるべく、なるべく夜はPCを利用しない、利用時間を短くするなどあるが、現実問題難しい。 いくつか対策を考える。 PCメガネ、JINS PC jinsのPC用メガネを使うと目に優しくなれるとのこと。 ここで原因と言われるブルーライトは、寝付きの悪さだけでなく、目の疲れ、肩こり、頭痛などに影響を与えているらしい。 ようはその青い光をフィルタしてしまうメガネが売れているようだ。 メガネを買えばそれで解決、なのかも知れないがハードウェアではなくソフトウェアで解決したい。 Linuxでブルーライトをカット 実はこのブルーライト、色温度を下げることで減量させることができる。 色温度(いろおんど、英語:color temperature)とは、ある光源が発している光の色を定量的な数値で表現する尺度(単位)である。単位には熱力学的温度の K(ケルビン) を用いる。 (http://ja.wikipedia.org/wiki/%E8%89%B2%E6%B8%A9%E5%BA%A6) 実は色温度は青い方が高い。 炎は赤いので赤は温度が高そうだが、実際は炎の先端の青い部分が最も温度が高い。 そう、モニタの色温度をソフトウェアで変更さえすれば良い。 輝度を下げることでブルーライト低減はできるが、色温度を下げることで更に低減させ、PCメガネよりさらに高い効果を目指す。 今回はRedshiftというソフトウェアを試してみた。 Redshift manual page このソフトウェアを使えば、手持ちのマシンから放たれるブルーライトが低減できる。 Redshift同様のソフトウェアとしてf.luxも試したが、稀にCPU消費量が非常に高くなることがあり、Redshiftは特段バグが無かったのでそのまま利用している。 Redshiftのインストール sudo apt-get install redshift redshift-gtk パネルのインジケーターに表示させることができる。コマンドラインからの利用の場合、その場合redshift-gtkは必要ない。 Redshiftの起動と設定 redshift-gtkを実行させると、パネル上にインジケーターが出る。 toggleでon/offを切り替え。 autostartで自動起動の設定を切り替え。 詳細な設定内容はコマンドラインや外部ファイルから入力することができる。 こちらのサイトで詳しく紹介されていた。 デフォルトの設定では、日中の色温度はあまり抑えない設定で、夜間はほんのり赤くなり色温度を抑える。([off]6300K, [day]5700K, [night]3600K) ブルーライトカットの効果 最初は少々赤さが気になるが段々と目が慣れてくると気にならなくなる。設定を元に戻すと眩しく感じる。 ライターさんのLubuntuにRedshift導入した所、目が疲れにくくなったとのフィードバックを得たので効果はあるようだ。 寝付きの悪いLinuxユーザーは是非お試しあれ。
Mon, May 4, 2015

Elementary OS freyaでハイバネートオプションを追加する

少し前からElementaryOSの最新版Freyaを使っている。 電源周りで少し手こずったので、備忘録として残しておく。 インストール後にやったことはまた今度まとめる。 ハイバネートオプションを追加する Elementary OS Freyaでハイバネートが利用できなかったので、利用できるようにする。 ※ メモリ領域のデータをディスクに退避することで、作業状態を保存した状態で電源オフにし、電源オンでそこから復帰できる。 サスペンドはメモリに電源供給しながらデータを保持。メモリは揮発性で、電源供給がないとデータが消えてしまうため。 pm-utilsを導入してpm-hibernateコマンドを実行する手もあるが、今回は別の方法で。 電源オプションの中にハイバネートを追加する sudo vi /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla 下記をコピー&ペースト [Re-enable hibernate by default in upower] Identity=unix-user:* Action=org.freedesktop.upower.hibernate ResultActive=yes [Re-enable hibernate by default in logind] Identity=unix-user:* Action=org.freedesktop.login1.hibernate ResultActive=yes Grubの設定 sudo vi /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/sda3" resume=‘スワップ用パーティション’とすること! Grubの更新 sudo update-grub これでシャットダウンのオプションなどで、休止状態(もしくはハイバネート)が増えているはず。 ノートPCを閉じた時にハイバネーションを有効にしたい && ロック画面でのPowerボタンの挙動を変える 自分の場合はロック画面の状態(だがディスプレイオフ)で電源を押して復帰しようとして、シャットダウンしてしまう現象に悩まされていた デフォでこの動作はバグと言っていい気がする。あとノートPCなので、急なとき閉じて移動、などあるのでその際はハイバネートできたほうが良い。 /etc/systemd/logind.confの編集 man logind.conf で確認したところ、HandlerPowerKeyやHandleLidSwitchなど、電源周りの挙動を変えられるようだった。 sudo vi /etc/systemd/logind.confにて該当箇所のコメントアウトを外し、 下記に変更する HandlePowerKey=hibernate HandleLidSwitch=hibernate 再起動後、ロック画面での電源ボタン、 PCの閉じる動作によるハイバネートが有効になっているはず。
Sun, Apr 19, 2015

insert-modeでvimのカーソルキー形状を変えて幸せになる(gnome-terminalの場合)

Command/Normalモードを間違う 問題はこれ。 頻繁にどちらのモードかを勘違いしてしまってタイプミスをしてしまう。 自分はgnome-terminal上でVimを使っている。tmuxなどターミナルマルチプレクサとの共存が必要だからだ。 gVimではカーソル形状が矩形と'|'が切り替わるのだが、ターミナル上では制限があって、調べたところ簡単ではなかった。 暫定策 代替案として、 lightline.vimを使ってInsert/Normalモードの状態を色付きで 画面下部に表示し、視覚的に理解しやすいように試みた。 確かにわかりやすいが、画面の端の色なので、気づかずにミスタイプになることも多い。 また、横のラインを表示・非表示を( autocmd InsertEnter,InsertLeave * set cursorline! )で切り替える アプローチも試みたが、モード間違いは大きく改善はしなかった。 救世主 これまでかと思った矢先に、救世主が現れた(stackoverflowで記事を見つけた) To change the shape of the cursor in different modes, you can add the following into your vimrc. For the Gnome-Terminal (version 2.26)Edit if has("autocmd")au InsertEnter * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam"au InsertLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block"au VimLeave * silent execute "!
Sat, Mar 21, 2015

ng-japan

Angualrjsの日本初のカンファレンスng-japan2015 が渋谷で2015/03/21にあったので行って来た。 場所はサイバーエージェント。以前参加した勉強会もここでやってた気がする。 毎度の通り、最初の1個目のセッションはあんまり聞けなかった。 結構人がいて定員500名の会場が普通に埋まってた こんなかんじ↓ すごい人! ng-japan venue is packed! #ng_jp pic.twitter.com/Cb1Zfn9Q63 — Eiji Kitamura (@agektmr) 2015, 3月 21 今回アシアルの田中さんのセッションが個人的に面白かったのでそちらにフォーカスして書いています。 onsen-uiのはなし AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ HTML5ハイブリッドアプリとは ネイティブのアプリとは違って、View部分をHTMLで記述。 ネイティブ層、HTML5層があって内部はHTML5で作っている。 アプリ内ではWebviewを利用している。 ###メリット クロスプラットフォーム性 ネイティブ機能をJsから呼び出し ハイブリッド用のCordovaから呼び出し OSからのAPI呼び出しを一本化する ###色々メリットはあるがしかし… ハイブリッドアプリは作ってみたものの… Facebookでザッカーバーグの発言。“HTML5にかけたのは失敗” ###しかし状況は変わってきた モバイルの高速化 CrossWalkだったり、ChromiumがWebviewに使われたり。 DHH(Rails作者)によるハイブリッドアプリに関する好評 ###デメリット UIコンポーネントが標準で持っていない チューニングの方法が難しい ##チューニングの方法 インスペクタのTimelineタブで計測 AndroidではChrome・iOSではsafariのinspecter タイムラインタブのカテゴリの説明(図) 描画が始まって16ms以下に抑えると60fps以上出る 逆にそれ以上だしてもディスプレイが追いつかない チューニング対象となる5つのフェーズ Loading リソースの読み込みやパース 組み込みなのであんまやることない Scripting JavaScriptの実行時間。純粋な計算は基本的に問題なし。 リフロー、Canvasへの命令など時間はかかる ProfileTabで簡単にわかる Rendering レイアウト処理 再計算(Recaluculate Style) CSS OMを参照してDOM*CSSルールの数分マッチング処理が走る。 使ってないCSSのルールマッチングの文だけ遅くなる 重たいCSSのセレクタの書き方 子孫セレクタやめたほうがいい クラスで指定する書き方が速い 使ってないCSSのルールは消す。 Layout すべてのDOMのレイアウト情報を計算 計算された結果の視野的なオブジェクトのツリーがレンダリングツリー Painting 描画処理 DisplayListの生成 Rasterize ピクセル化 CompositeLayeers レイヤの合成 雑多なチューニングの小話 translate3d(0,0,0)が早いのはなぜ? GPUで描画されるから?
Fri, Feb 13, 2015

ApacheCordova勉強会第4回

ApacheCordova勉強会第4回 AdobeからPhonegap開発チームの方々が来られていた。 以下雑なメモ。 セッション1:米Adobe PhoneGapチーム【逐次通訳】 Adobeの人(Adobeに買収された開発チームの方)のセッション。英語同時翻訳。(ありがとうございました) パフォーマンス問題としていいニュース Apple、GoogleともにWebViewの高速化が進む Appleもなんか出したらしい AndroidのはおなじみCrossWalk projectの事 Why Phonegap? CrossPlatforms ProjectSpeed UI Native functions Update from Web Appstoreを通さないアップデートができるとのこと ( てか、それいいの? ) Plugin support ShowCase ( PhonegapAppStoreで見れるよ ) BankOfAmerica Sabre - TripCase(HTML5/JSでゴリゴリ書いてるらしい) Untappd Sworkit Large Home Store Instagram・Evernoteなどはハイブリッドアプリ(割合とかは言ってなかった) BaseCampもHybrid ほとんどがHTML5ベース Rails作者、 DHHも情報が多いアプリだとHybridは向いているとのコメントを寄せていた PhoneGap Enterpriseについて Adobeのマネタイズのはなし ダッシュボードでメタデータ統計など利用可能 マーケの人が(コンテンツなどを)管理画面から簡単に更新可能 セッション2: Visual Studioを使用したCordova開発 MSの方の話。主にVisualStudioの話でしたので話半分にしか聞けていません。。。
Mon, Jan 26, 2015

Cordova勉強会第3回行ってきた

Codova勉強会行ってきた だがしかし… 参加時刻20:17 ほとんど遅刻してアレ (19:00-21:00 at IIJさん) ビールとポテチもらいながら最後のセッション聞く感じになりました。 デスクトップアプリマルチOS対応 with HTML5 対象の人は以下の人 デスクトップアプリ作りたい いろんなディスプレイサイズ辛い パフォーマンスそんな求めてない C#よりJSやりたい うん。多分そんなところかも。 Destkop用のネイティブ言語を扱えない人も結構多そう。 3つのやりかた 下記のやり方があるらしい。 Mozilla XULRunner Cordova NW.js(Node-Webkit) あと質疑応答でアシアルの人がAtom-shellっていうのが最近あるよと言ってた。 なんかMonacaのローカルもそれ使うとか何とか(よくわかってない) Mozilla XULRunner 一番シンプルで古株なやつ エンジンGecko GeckoはHTML5だけじゃなくてXULというマークアップを動かせる セガ版Xamarinのような存在(?) 名前はXULだけど中身GeckoなのでHTML5が使える これ知らなかった。 あとオワコン(HTML5に置き換えてる今から使うなとMozillaの中の人に言われたw)らしい Cordova 3つの中で一番発展してる エンジンがTrident(Win)らしい ビルドツール プラグインで機能を足しやすいらしい Win版の環境がだいぶ残念とのこと言っていたけど、よくわからなかった NW.js(Node-Webkit) What is NW.js 3種の中で若造らしい Node.js + Web標準でデスクトップを作ることができるよ XULRUNNERとCorovaのいいどこどり?らしい どうする デスクトップはNW.
Sat, Jan 3, 2015

今やっていること, 2014年と2015年

あけましておめでとうございます 久々更新過ぎて、書き方忘れてた。。。 octopressのテンプレートにマークダウンで書いて、それをpushするというフローでやっていたんだけど、 そのvimのプラグインのコマンドを忘れてなんだっけとしばらく考える程度に放置してた。ガンバロウ。 また、正月早々風邪を引いてしまって、これが中々治る気配がないという。。。 あまりイケてないスタートになってしまった。 2014年何をやったか。何を身につけたか 自身の棚卸をしていくことにする。 3月に前職を退職。 作れる技術をもったエンジニアになろうと思い、大手電機メーカーのSEを辞めた。 プログラミングには興味があったけれども、Webのコピー&ペーストでしか何かを動かしたことがないので自分で作るといったこととは あながち離れたところにいた。サンプルがないと死ぬみたいな感じ。 割と前職ではプログラミングわかる人とということになってたけど、本人の中での理想と現実のギャップは大きく、 何かを作っているはずが何も作ってないエンジニアとして嫌気が差していた。 自分が欲しい物は自分で作りたいという強い欲求はあったが、誰にも教えられるほどの知識・スキルがなかった。 どれから身に付けるかと考えた時に、 WEBは息が長い、きっと様々なモノのI/FとしてWEBが生きるはず。 しかしながら今皆使っているのはモバイル。 と思った。 Web技術 モバイルアプリ これらをひと通り作れるようになろうと決めた。 やったこと 2014年、とりあえず人並みにまでを目標に、自分で学んでみた。 下記の技術を中心に学習した。 Ruby on Rails AngularJS Android(Java) 1年前の自分だったらちょっと重いから1つずつやろうか。などと諭していそう気がする。 独学で勉強したり、勉強会におせわになったり、ベンチャー企業のお世話になったり。 逆に学んだことをシェアハウスの住人や知り合いに教えてみたり。 そんなこんなでいつの間にか、志して1年を迎えてしまった。 その結果、どれも不完全な感じで終わってしまった気がする。 まだまだどれも伸びしろ十分(笑) 一番身についたのはRailsかな。 AngularJS周りで少し色目を出して、秋ごろにionicをベースにWebRTCのP2PビデオチャットのAndroidアプリを作ってみたりした。 最後にAndroid Nativeで作らなかったのは本気でAndroid/Javをa学ぶ気力が足りていなかった説は大いにあり得る。。 結果どうあったにせよ、プログラミング言語的なコンプレックスは自分からは大いに取り除かれたので、それはそれで大いに良かった。 2015年やりたいこと プログラミング言語的コンプレックスは抜けた。しかしながら英語、貴様はまだだ! という事で、プログラミング以外に英語の学習を重点的に行なっていくようにしたいと思う。 海外で1・2年は仕事しながら住んでみたいという憧れがあることがひとつ。 そして、エンジニアとして先端を走るときにドキュメントは必ず英語として立ちはだかる、 もしくは公式ドキュメントはStack Overflow!なんてことはザラ。 エンジニア目線としても英語はぜひコンプレックスをなくしていきたい所存。 やろうと思っていること フィリピン留学 ビデオチャットで英会話 つなぎのtoeicの学習 2014年の伸びしろを埋めていく作業を続けながら英語を学んでいく。 自作のビデオチャットアプリで英会話することが今年の密かな目標です (ブログの更新はハードル高そうなので一応含んでいませんw)
Thu, Sep 11, 2014

Rspecでインスタンス変数が参照できない

Rspecの世界からController内メソッドでインスタンス変数@hogeを利用した場合は、 直接Rspecからインスタンス化された@hogeは別物である。 まず、この事実を理解すべきだった。 Controllerの中の値をテストする Rspec側からRailsのController側でインスタンス化された値を評価する場合はassigns(:hoge)で参照するとよい。 また、RspecからDBアクセスして取り出す方法もあるのでこちらも忘れずに。 expect(Model.last.name).to eq 'modelname'で評価する。 どちらもどのような値がアサインされていればよいのかを意識してテストを書く。 その他 itブロック・contextブロック・describeブロックの中で定義した変数のスコープはその中に限る。 そのため、スコープを飛び越えて同じ値を扱うためにはインスタンス変数を利用する必要がある。 はじめてのテストということでハマってしまった。 テストではRailsの世界の変数か、Rspecの世界の変数なのかを明確に意識する必要があった。 実行中のプログラム内なのか、その外なのかを常に意識する。 RequestヘッダをRspecで作ってそれをRailsに投げる。 Railsの中のController内で、どのような値がアサインされるかテストする。 どの世界の値を取得して何と比べるのか。 何をテストすべきかを意識していれば回避できる問題。
Thu, Aug 14, 2014

Androidでのデータの保存

データの保存 SharedPreferenceの利用 Androidアプリでデータを保存する方法のひとつ データをキーと値の組み合わせで保存 ファイルなどに保存するよりも非常に簡単にデータを保存可能 ただし大規模なデータには向かず、設定項目向き。 使い方 SharedPreferences はgetSharedPreferences(String name, int mode); でを取得。 name は Preference 自体の名前指定 mode には Activity.MODE_PRIVATE Activity.MODE_WORLD_READABLE Activity.MODE_WORLD_WRITEABLE などを指定 モードについては後述。 SharedPreferences pref = getSharedPreferences(PREF_NAME, MODE_PRIVATE); SharedPreferencesのインスタンスをgetSharedPreferencesで取得し、 editメソッドでEditorクラスのインスタンスを呼び出す。 そのEditorクラスにputXxxxメソッドを使って値を対応させる 最後にcommitメソッドで格納する // プリファレンスに保存 Editor editor = pref.edit(); editor.putString(KEY_TEXT, s); // KEY, VALUEの組み合わせで保存 editor.commit(); 保存される場所 保存された Preference は data/data/パッケージ名/shared_prefs の中に xmlファイルとして保存される データの取得 getXxxx(String key, Xxxx defValue)のkey, value形式で取得する。 getString(String key, String defValue); getInt(String key, int defValue); getLong(String key, long defValue); データ型 下記のデータ型がXMLに保存される
Fri, Aug 1, 2014

ListView and http connection

雑多メモ Railsで作ったサーバとHttpでCRUDなおしゃべりをするアプリを作った時に調べたメモ達 レイアウトをJava側で生成する LinearLayout linearLayout = new LinearLayout(this); linearLayout.setOrientation(LinearLayout.VERTICAL); setContentView(linearLayout);` レイアウトに要素を追加する Button button1 = new Button(this); button1.setText("OK"); button1.setLayoutParams(new LinearLayout.LayoutParams( LinerLayout.LayoutParams.MATCH_PARENT, LinerLayout.LayoutParams.WRAP_CONTENT)); linearLayout.addView(button1);` AddViewメソッド 「LinearLayout」クラスの親クラスである「ViewGroup」クラスで用意されている「addView」メソッドを使います。 public void addView(View child, LayoutParams params) Adds a child view with the specified layout parameters. Parameters: child: the child view to add params: the layout parameters to set on the child LinearLayout.LayoutParamsクラス 「android.widget.LinearLayout.LayoutParams」クラスは「android.view.ViewGroup.LayoutParams」クラスのサブクラスです。コンストラクタの1つのは次のようになっています。 LayoutParams public LinearLayout.LayoutParams(int w, int h) 他のビューに対する相対位置の指定(addRule) このビュー自身のサイズに関する設定の他に、別に追加されたビューに対する位置関係を設定することが出来ます。「RelativeLayout.