サブサブマシンがぶっ飛んだ・・・
表題のとおりなんですが、開発用サブサブマシンがぶっ飛んだ。
ext4ファイルシステムがぐちゃぐちゃorz
デュアルブートになってた、ほぼ使ってないWinXPの環境は問題ないとこ見ると何が原因なんだろう。。
幸いデータは、必要そうなものはDropboxとプライベートrepositoryに逃してたので無事。
というわけでHDDをSSDに変更してlubuntuで環境作り直しorz
はぁぁめんどい。
以下作業めも
無線LAN
BroadComのfirmwareが入ってない。
staドライバをインストールして無線を使えるようにする。
Lenovo Ideapad s10e
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install bcmwl-kernel-source $ sudo modprobe -r b43 ssb wl $ sudo modprobe wl
参考) https://wiki.ubuntulinux.jp/UbuntuTips/Hardware/HowToSetupBcm43xx
dropbox
nautilsいれてないのでコマンドラインから
$ cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86" | tar xzf - $ ~/.dropbox-dist/dropboxd
https://www.dropbox.com/install?os=lnx
あとはページにある制御スクリプト落としてきて、chmod +xしてパスのあるところにおいておけばおk
ほんまにDropboxさまさまや(^_^;)
あとは数日待てば必要なデータは戻ってくる。
jdk
Oracle JDK7を入れる。
$ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get update $ sudo apt-get install oracle-java7-installe $ java -version java version "1.7.0_10" Java(TM) SE Runtime Environment (build 1.7.0_10-b18) Java HotSpot(TM) Server VM (build 23.6-b04, mixed mode)
paco
ソースからインストールするソフト用にpaco入れとく。
$ sudo apt-get install paco
tmux
ターミナルマルチプレクサ。
$ sudo apt-get install tmux
キーバインド入れ替え
~/.tmux.conf
set-option -g prefix C-j bind C-j next-window
日本語入力
Google日本語入力のOSS版mozcいれる。
$ sudo apt-get install ibus-mozc
再起動して
スタート→設定→キーボード・インプットメソッド
からキーボードショートカットの切り替えを全角・半角キーだけにする
ctrl capslock入れ替え
lxkeymapが設定消えちゃうみたいなんで、一時的に.bashrcでしのぐ。
.bashrc
# ctrl capslock入れ替え setxkbmap -option "ctrl:nocaps"
$ source ~/.bashrc
ruby
rbenvはubutuパッケージにもあるけどちょっと古いので最新版をいれる
$ sudo apt-get install git $ git clone git://github.com/sstephenson/rbenv.git .rbenv $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc $ echo 'eval "$(rbenv init -)"' >> ~/.bashrc $ mkdir -p ~/.rbenv/plugins $ cd ~/.rbenv/plugins $ git clone git://github.com/sstephenson/ruby-build.git $ cd ruby-build $ sudo bash ./install.sh $ source ~/.bashrc $ rbenv install --list | grep "1.9.3" 1.9.3-dev 1.9.3-p0 1.9.3-p125 1.9.3-p194 1.9.3-p286 1.9.3-p327 1.9.3-p362 1.9.3-preview1 1.9.3-rc1 $ rbenv install 1.9.3-p327 $ rbenv rehash $ rbenv global 1.9.3-p327 $ which ruby /home/uee10000/.rbenv/shims/ruby $ gem i rbenv-rehash $ gem i bundle $ gem i rails
node.js
nodejs入れる。
$ curl https://raw.github.com/creationix/nvm/master/install.sh | sh $ sudo apt-get install build-essential libssl-dev libreadline-dev $ nvm install v0.8.16 $ npm install -g coffee-script $ npm install -g js2coffee
.bashrcに追記
# nvm [[ -s /home/uee10000/.nvm/nvm.sh ]] && . /home/uee10000/.nvm/nvm.sh # This loads NVM nvm use "v0.8.16"
android sdk
android sdkの最新版を入れる
ダウンロードページに行って
・「USE AN EXISTING IDE」をクリック
・「Download the SDK Tools for Linux¥
をクリック
$ tar zxvf android-sdk_r21.0.1-linux.tgz $ mkdir ~/dev_tools $ mv android-sdk-linux ~/dev_tools/
.bashrcに追記
# android-sdk PATH=$PATH:$HOME/dev_tools/android-sdk-linux/tools PATH=$PATH:$HOME/dev_tools/android-sdk-linux/platform-tools
android ndk
$ tar jxvf android-ndk-r8d-linux-x86.tar.bz2 $ mv android-ndk-r8d ~/dev_tools/
.bashrcに追記
# Android NDK export ANDROID_NDK_ROOT=$HOME/dev_tools/android-ndk-r8c export PATH=$ANDROID_NDK_ROOT:$PATH # Open CV export ANDROID_NDK=$ANDROID_NDK_ROOT
TitaniumMobileでAndroidアプリを書いてみた
表題のとおりなんですがTitaniumMobileでAndroidアプリを書いてみた。
目的はTitaniumMobileの調査。使用したバージョンはTitaniumMobile2.1.3。
結論から書くと、細かいハマりどころはまだあるものの、用途を選べば今の段階で大体使えそうかな~という感じ。
1年前に比べるとかなりこなれた感がある。
とりあえず作ったアプリの宣伝。
作ったアプリ ニュースクリッパー(NewsClipper)
https://play.google.com/store/apps/details?id=com.ueebee.newsclipper
全国紙・地域ブロック紙の情報を閲覧できるツールです。個人的に地下鉄に乗ることが多いので、オフライン状態で閲覧可能になってます。
今のところ読める新聞
[全国紙]
読売新聞・朝日新聞・毎日新聞・産経新聞・ロイター
[ブロック紙]
・北海道新聞・東奥日報・河北新報・秋田魁新報・千葉日報・神奈川新聞・新潟日報・信濃毎日新聞・岐阜新聞・中日新聞・福井新聞・京都新聞・紀伊民報・山陰中央新報・山陽新聞・中国新聞・徳島新聞・愛媛新聞・佐賀新聞・宮崎日日新聞・沖縄タイムス・琉球新報
※今後の予定
・わかってるバグ潰す
・ダサいのでUI変えたい
・地方紙追加(残り9紙くらい)
・ジャンル分け機能欲しい(政治・地方・スポーツetc)
※感想
地方紙というか地方のニュース結構面白い。
よかったら使ってみてください。
以下TitaniumMobileを使ってみた感想・技術メモを書きます。
良いとこ2:coffeescript便利
TitaniumMobileとは直接的には関係ありませんが、javascriptの足りないところをかなり補ってくれる。クラスが手軽に書ける&thisが@にバインドされてて直感的等々メリットでかい。またcoffee -wcでjavascriptを吐き出すとグローバルを汚さないので安心。
良いとこ3:容量が思ってたほど大きくならない
開発時に実機転送してた時「容量でかいな~」というのが正直なところでしたが、google playに公開するように、サイン付きのapkを書き出す際に1/3程度に圧縮してくれる。調査してませんがgoogle clousure toolsで圧縮してるのが効いてる?それともデフォルトでapk作るときに圧縮するからこんなもん?
微妙なところ1:マルチプラットフォームだけど・・
マルチプラットフォームはおそらく微妙。メインの処理部分は共通でいけるっていうところはありがたい。が、スマホ向けアプリの場合UI作るのにコードを結構書かなきゃいけない場合が多くて、UI向けのところはandroid向け、iphone向けで結構違う。
自分用メモ1:TabBarダサいから消したい
platform/android/res/layout/titanium_tabgroup.xmlへ以下を書く
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="0dp"> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="0dp" android:layout_weight="1"/> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="0"/> </LinearLayout> </TabHost>
javaネイティブで書くとき風味。
自分用メモ2:初回起動時にリスタート求められる
ちなみに初回起動時でも、android端末の種類によっては正常に起動できるものもあるらしい。
ついでに自分の環境だと、初回起動時というわけではなくて、google playの起動ボタンを押すとこの現象が出た。
Titanium2.1.2で解消されてるといってるけど、以下をtiapp.xmlへ追記しないとダメだった。
<property name="ti.android.bug2373.finishfalseroot" type="bool">true</
元ネタ
自分用メモ3:versionCode、versionNameはtiapp.xmlに書けない
バージョンアップする時に、versionCode、versionNameをアップしていくことになるけど、tiapp.xmlへ記載する方法が見つからなかった。解決方法は
一旦コンパイル→build/android/AndroidManifest.xmlをplatform/android/AndroidManifest.xmlへコピー→manifestのversionCode、versionNameを書き換えてコンパイル
これでversionCode、versionNameが上がる。
自分用メモ4:画面を縦固定にしたい場合
これもplatform/android/AndroidManifest.xmlを書き換える。activityにandroid:screenOrientation="portrait"を追記すればOK。
自分用メモ5:preferenceが使いにくい
設定画面が簡単に作れるPreferenceクラスですが、TitaniumMobileだとイベントが足りないと感じた。
closeイベント、changeイベントとかが取れるとありがたい。
仕方がないので今回はwindowのfocusイベントで代用。
追記:TitaniumMobile3.0βではイベント追加されてる模様
番外編1:google playからダウンロードエラー
エラー詳細は
サーバーからの情報の取得中にエラーが発生しました。[RPC:AEC:0]
結果わからずじまいだったのですが、
http://ameblo.jp/mu-rrr-ci/entry-11394553434.html
と同じ症状。
症状も同じで、
・初版をGoolePlayへアップロード
・数時間後ダウンロードできるようになる
・バグに気づいて修正
・再アップロード
・再アップロードから4時間後くらいに、アップデート通知がandorid端末に届く
・ここでエラー サーバーからの情報の取得中にエラーが発生しました。[RPC:AEC:0]
・PCサイトからインストールはしばらくしたら可能になった
・android端末からはインストールできない
・寝る
・再アップロードから12時間後くらい?android端末からも正常にダウンロード可能
という状態。
感想
TitaniumMobile使えます。あと一歩って感はまだあるけど、WEB連携・リアルタイム性がそれほど求められないアプリなんかは、ネイティブで書くより楽な気がします。無い機能もモジュールでカバーできそうですし、もう少しこなれたらTitaniumもっと増えそうな予感。今後に期待です。
node.js製フレームワークRailwayJSで遊んでみる
こんばんは。
台風の今夜いかがお過ごしでしょうか。こちらは結構ヤバイです。今日の天気とは関係ありませんが、javascript界隈も4号以上にヤバク熱い感じになってきてます。
http://www.publickey1.jp/blog/12/javascript_mvc.html
みたいな記事が入ってきてます。
というわけでサーバーサイドJS本命node.jsの上に乗っかったRailwayJSを使ってサンプルアプリを作ってみました。ちょろちょろとは触ってたけど、わりと普通の構成のWEBアプリ作ったらどうなるの?っていう興味本位andブラ三の合成レシピをスマホで見たかったてのも理由です。
作成したアプリはhttp://csv2sl.ueebee.com/で
Excelシートをコピペすると、HTMLのテーブルに変換してページを置いておけるだけというシンプルなものです。
普通ぽいWEBアプリをnode.jsで作ってみた私個人の感想は後ほど記載します。
RailwayJSは
本家:http://railwayjs.com/
日本語:http://railwayjs.jp/
で最新の情報を得ることができます。
「Create NodeJS web apps faster with more energy, using RailwayJS」
とあってnodejs製のWEBアプリ作成を助けてくれるフレームワークです。
簡易フレームワークexpressに、Ruby on Railsの便利な機能を乗っけてきたような感じになっています。
ちなみに同じ位置づけのnode.js製フレームワークとしてはtower.jsとかです。
http://towerjs.org/
いずれもRuby on Railsを強く意識しているフレームワークだな~という感想です。
RailwayJSを選んだポイント
デフォルトでcoffee-scriptで書けるらしい(tower.jsもらしいです)
最初tower.jsに行ったんだけど・・・scaffoldingが初見で動かなかったorz
直感&なんとなく( ゜д゜)ハッ!
という理由です。
インストール
node.jsが使える環境なら、
$ npm install railway -g
とするだけです。
node.jsの環境構築等はいっぱい情報があるので省略。
アプリの雛形作成
こちらもRuby on Railsよろしく、アプリケーションの雛形を作成してくれます。
ずらずら-とファイルが作成されます。
※coffee-scriptを使うので--coffeeオプションを追加しています。
$ railway init csv2sortableList --coffee
作業ディレクトリへの移動・必要なパッケージのインストール
作成されたディレクトリに移動して、関連パッケージをインストールします。
$ cd csv2sortableList $ npm install -l
ここまでで最低限必要な作業は終了。
ここからアプリの実装に必要な作業に入ります。
scaffoldを使って基本枠を作る
$ railway g scaffold post title content updated_at
これだけで動くアプリができます。
controllerもviewもlayoutsも、Ruby on Railsと同じ構成になっています。
また中身は空っぽですがhelper、modelも同じ構成です。
サーバー起動
以下のコマンドでサーバー起動します。
$ railway s ポート番号
※デフォルトだと3000番でサーバ起動します。
CRUD動作が行えることを確認できます。
見た目もTwitterBootStrapがデフォルトで適用されているため、おしゃれな画面になってます。
Controllerの中身
以下の感じです。CoffeeScriptなのも手伝って、かなり見通しが良くなってます。
注目するポイントとしては、
before ->
のところでここがbefore_filterのような共通化したコードになっています。
, only: ['show', 'edit', 'update', 'destroy']
で適用するアクションを指定しています。
load 'application' before 'load post', -> Post.find params.id, (err, post) => if err redirect path_to.posts() else @post = post next() , only: ['show', 'edit', 'update', 'destroy'] action 'new', -> @post = new Post @title = 'New post' render() action 'create', -> Post.create body.Post, (err, post) => if err flash 'error', 'Post can not be created' @post = post @title = 'New post' render 'new' else flash 'info', 'Post created' redirect path_to.posts() action 'index', -> Post.all (err, posts) => @posts = posts @title = 'Posts index' render() action 'show', -> @title = 'Post show' render() action 'edit', -> @title = 'Post edit' render() action 'update', -> @post.updateAttributes body.Post, (err) => if !err flash 'info', 'Post updated' redirect path_to.post(@post) else flash 'error', 'Post can not be updated' @title = 'Edit post details' render 'edit' action 'destroy', -> @post.destroy (error) -> if error flash 'error', 'Can not destroy post' else flash 'info', 'Post successfully removed' send "'" + path_to.posts() + "'"
@post.save (err) =>
みたいなコードが見受けられますが、ORMとして
https://github.com/1602/jugglingdb
jugglingdbというORMを採用しています。
対応DBとしても
redis
mongodb
等が揃っており、使い勝手がいいです。(sqlite3、rowlevel-mysql等も使えるようですが試してません)
redis、mongodbとDBを複数使用できるのもポイント高いです。
ちなみにRailwayJSの公式サイトではORMの説明が弱いと感じます。jugglingdb https://github.com/1602/jugglingdb
を確認したほうが使い方の参考になりました。
rails console相当の「railway c」
こちらもRuby on Railsのrails consoleに相当する、「railway c」とすると対話型コンソール(REPL console)が利用できます。
railway c railway> User.find(53, c) Callback called with 2 arguments: _0 = null _1 = [object Object] railway> _1 { email: [Getter/Setter], password: [Getter/Setter], activationCode: [Getter/Setter], activated: [Getter/Setter], forcePassChange: [Getter/Setter], isAdmin: [Getter/Setter], id: [Getter/Setter] }
というような感じになります。コンソールはjavascriptのcallbackを取るスタイルに多少なれないと行けないかもしれません。
ループも含めコールバックを使う形になります。
helper
こちらもRuby on Railsのヘルパーに似てます。組み込みヘルパーは本家RailwayJSにだいたい書いてあります。
今回時刻表示のフォーマットヘルパーがどこにあるのかわからなかったので、以下の共通ヘルパーを作ってみました。
※ここは自動で生成されたものだとcoffee-scriptじゃないみたいです。
app/helpers/application_helper.js
require('date-utils'); module.exports = { my_date_format_helper: function(dateString){ if (dateString == null || dateString == undefined){ return ""; } else { var formatted = dateString.toFormat("YYYY-MM-DD HH24:MI"); return formatted; } } };
view側で
<%- my_date_format_helper(@post.updated_at) %>
で使用できます。
routes
アプリのURI管理は
config/routes.js
に書いていきます。
exports.routes = function (map) { map.resources('users'); map.root('posts#index'); map.resources('posts'); map.get("postsall", "postsall#index"); map.get('tos', 'static_page#tos'); // Generic routes. Add all your routes below this line // feel free to remove generic routes map.all(':controller/:action'); map.all(':controller/:action/:id'); };
これもほぼRuby on Railsのroutes.rbと同じです。
map.root:アプリトップを指定
map.resources:RESTなURI
map.get:該当するURIに対するコントローラ・アクション
etcetc...
パッケージ管理
プロジェクト直下に
package.json
というファイルがあります。ここに必要なパッケージを書いていく感じになります。
これもBundlerに似てます。
{ "name": "csv2sl" , "version": "0.0.1" , "engines": ["node >= 0.4.0"] , "main": "server.js" , "dependencies": { "ejs": "*" , "ejs-ext": "*" , "express": "~2.x" , "railway": ">= 0.2.6" , "jugglingdb": ">= 0.1.0" , "coffee-script": ">= 1.1.1" , "csv": "" , "mongoose": "" , "async": "" , "password-hash": "" , "everyauth": "" , "jade": "" , "date-utils": "*" , "js2coffee": "*" }, "devDependencies": { "nodeunit": "*" , "sinon": "*" , "semicov": "*" } , "scripts": { "test": "nodeunit test/*/*" } }
書いたパッケージのインストールは
$ npm install -l
で依存関係含めインストールしてくれます。
ざっくりとはこんな感じになります。
気をつけるところ
node.jsは基本非同期です。
なので、
hoge = [] for sheet in sheets hoge.push sheet render({hoge: hoge})
みたいなコードを書くと、Viewに変数hogeの値は[]で渡っちゃうことがあります。
なので、組み込みのnext()をうまく使うか、async.jsやstep.js等を使ってあげると楽できます。
今回はasync.jsを使ってみました。
ただそもそも非同期前提なんだしwebSocket楽に導入できるんだから、
・細かくコントローラを切って非同期で値の受け渡しをする
というのもありかなとおもいます。
その他
今回使ったライブラリは以下のとおりです。
csvパーサー
csv.js
https://github.com/wdavidw/node-csv-parser
フロー制御
async.js
https://github.com/caolan/async
oauth認証ライブラリ
everyauth
https://github.com/bnoguchi/everyauth
日付フォーマット整形
date-utils
https://github.com/JerrySievert/node-date-utils
テンプレート
jade
http://jade-lang.com/
※RailwayJSは基本はejsです。