Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

タグ

ブックマーク / higelog.brassworks.jp (23)

  • RubyMotionはiOS SDKに疎い人にもオススメできる - ひげろぐ

    iOSで作りたいモノが特にないのでこの頃あんまりアクティブに触ってはいないけど、一方で所感が確かな物になってきたので書いておきたい。 RubyMotionがリリースされたばかりの頃はiOS SDKの知識が必要なので敷居が高いのではと書いたが、それから三ヶ月弱立った現在、iOS SDKに疎くても気にせず開発できる環境が整ってきた。またREPLの存在によりiOS SDKを学ぶにも役に立つものだと思うようになった。 加えてどれほどの物が作れるのか、ということとサポートの話など。 Rubyらしく書く BubbleWrapのようなRubyらしく書いていけるライブラリが順調に育っていて当初よりかなり良い感じになっている。 iOS SDKの知識がなくてもかなりの所までいけるようになっているんじゃないだろうか。 他にもDSL的なライブラリがいろいろできて盛り上がっているので、今後も「Rubyらしく」という

  • RubyMotionのプロジェクトでアプリの設定画面を作る - ひげろぐ

    主に以下のサンプルを参考に。基的な考え方はObjective-Cでやるときと変わらない。 mordaroso/rubymotion-settings · GitHub resources以下にSettings.bundleを置けばiOSの設定アプリに自作のアプリの設定画面が追加される。Settings.bundleの詳細については情報がいくらでもあるので省略。 アプリ内での設定や取得、初期化などは以下のようにして行う。詳細についてはNSUserDefaultsでググるといろいろ出てくるので基的な操作のみ。 値の設定 NSUserDefaults.standardUserDefaults["key_a"] = "A" ハッシュと同様に操作できる。 数値などもそのまま設定できるのはなかなか素晴らしい。 値の取得 NSUserDefaults.standardUserDefaults["ka

  • しばらく見ぬ間にXcodeも進歩していた - ひげろぐ

    このところ昔Xcodeを使ってObjective-Cで書いたアプリをRubyMotionで書き直してみたりしている。とても楽しくて仕方が無い。 一方で長い間Xcodeとはご無沙汰だったので、そちらは今どうなっているのだろうかとRubyMotionと比較する上で気になった。そこで一年ぶりくらいにXcodeをちょっとだけ触ってみたが、どうやらこちらもけっこうよろしくなっている。 メモリ管理が不要になった Xcode 4.2.1以降ではプロジェクト作成時に「Use Automatic Reference Counting (ARC)」にチェックを付けると自前でメモリ管理しなくてもよくなった。 Objective-CをRubyMotionに書き換えるときメモリ管理に由来するコードをバッサリ削るのが楽しかったが、Objective-Cでも今ならバッサリいける。 メモリ管理の煩わしさがなくなると同時に

  • RubyMotion Weekだった今週 - ひげろぐ

    かなりの盛り上がりでGitHubには雨後の筍のように新しいプロジェクトが次々できている有様。 個人的にも昔Objective-Cで書いたものをRubyで書き直してみたりしていてRubyMotion成分濃い目のエキサイトした週だった。 正直勢いがありすぎて自分では追い切れてないが、公式ブログにリリース後一週間の熱狂が綴られていたので抄訳してみる。 RubyMotion’s Blog — What a week! コミュニティ 今日までにユーザーによる約55のRubyMotion関連リポジトリがGitHubにできている GLKit/OpenGL, Facebook, Parse, cocos2d等の特殊なフィーチャーやフレームワークのサンプルデモ CoreDataやUIKit等の抽象化 Redcar、TextMate、Vimのコード補完を含むRubyMotionサポート RailsFactor

  • Titanium MobileとRubyMotionの比較 - ひげろぐ

    双方とも脱Objective-Cを実現してくれるプロダクトだけど性格はけっこう違う。 共通で興味を持っている人が多そうなので思うところをとりとめもなく書いてみる。 取っつきやすさ iOS SDK開発未経験者がとっつきやすいのはTitanium。おそらくRuby経験者でも。 逆にiOS SDK経験者ならばRubyMotionの方が入って行きやすいかもしれない。 RubyMotionはiOS SDKのAPIをタイトになぞっているためにiOS SDKのAPIに関する知識が必要だが、iOS SDKのAPIには直感的じゃない部分が多々あって、それに馴染むまでけっこう時間がかかる。その学習コストがけっこう高い。 TitaniumのAPIはTitanium独自のものだが整理されていて扱いやすい。学習コストは皆無ではないがiOS SDKに比べればずっと楽。 またObjective-Cよりマシとは言えRub

  • RubyMotionでCocoaPodsを使う - ひげろぐ

    CocoaPodsはRubyで言うとBundlerみたいなもの。 Objective-Cのプロジェクトにおいてライブラリの依存性を管理して使いやすくしてくれる。 podとして提供されているライブラリの一覧はここにまとまっている。 RubyMotionでもこのCocoaPodsを利用できる。 以下だいたい公式のドキュメント通り。 CocoaPodsのインストール まずはCocoaPodsを入れてセットアップする。sudoはRVMを使っているなら不要。 $ [sudo] gem install cocoapods $ pod setup motion-cocoapodsのインストール 次にRubyMotionからCocoaPodsを使うためのmotion-cocoapodsを入れる。 $ [sudo] gem install motion-cocoapods Rakefileの修正 RubyM

  • RubyMotionがすごい - ひげろぐ

    RubyMotionを使うとObjective-Cの代わりにRubyでiOSアプリを作ることができる。 有料版しかなく無償で試したりはできないがRubyMotionのサイトやサンプルコードを見てすぐに購入した。これはいいものだ。 日語での概要は以下に良くまとまっている。 Rails Hub情報局: MacRubyがiOSに来た!RubyでiOSのネイティブアプリ開発ができる「RubyMotion」登場 RubyMotion、はじめの一歩 – Watson’s Blog 一言で言うと今までObjective-Cで我慢して書いていたものをすべてRubyでサクッと書いちゃおうぜ、というノリのものだ。 JavaScriptに対するCoffeeScriptの関係に似ているかもしれない。 個人的には以下の利点だけで値千金。 配列や文字列の処理がとてもとても楽ちん メソッド定義およびメソッド呼び出しが

  • Railsでruby-debugを試したら10分で使えた - ひげろぐ

    前々から名前は知っていたけど、なんだか身構えてしまっていて試していなかったもの。 試してみたらすぐに簡単に使えて激しく便利でした。もっと早くやっておいたらよかった。 これでデバッグのときに変数の内容を表示するようなデバッグコードをがんばって埋める必要がなくなりました。 インストール gemでさっくりと。 gem install ruby-debug コードにブレークポイントを仕掛ける require 'ruby-debug' とライブラリを読み込んで、ブレークポイントを仕掛けたい場所に debugger と書くだけ。 def hoge i = 1 debugger end みたいなかんじ。 動かす WEBrickを動かしてアプリをいじっているとブレークポイントを設定した箇所で実行が停止する。 WEBrickを実行したコンソールにプロンプトが出るのでそこでコマンドを打つと現在の変数の状況など

  • GuardでTitanium+CoffeeScriptの開発を快適に - ひげろぐ

    久々にTitaniumを触るにあたってCoffeeScriptのコンパイルをGuardにまかせることにしてみたメモ。 Guardはファイルの変更を監視して、変更があったタイミングで何らかの処理を実行できるツール。 これを利用するとCoffeeScriptを書いたそばから自動的にJavaScriptに変換するなんてことも簡単にできるわけで。 そしてそのものずばりのことを実現するGuard::CoffeeScriptなんてものがあったりします。 Guard::CoffeeScriptの導入 gem install guard-coffeescript これでGuard体も入る。あ、要Rubyです。 追記 ファイルシステム監視のために以下のGemも必要だった。 gem install rb-fsevent 上記はMacの場合でLinuxWindowsの場合は違うGemになるので詳しくはGua

  • WordPressのデータをActiveRecordでいじる - ひげろぐ

    the_titleとかget_the_titleとかWordPressのネーミングセンスにつきあってると頭がおかしくなって死ぬ。 万事そんなかんじなので、可能であればなるべくおつきあいを遠慮したい。 WordPressDBMySQLなのでテーブルの構成さえ分かればActiveRecordなりSQLなりでデータを直接いじれる。 ということでバッチ処理等、フロントエンドに関係なくDBにだけタッチすればよい場合はWordPressとは独立したプログラムを書いて対応することができる。 ただしデータを直接いじる場合は、WordPressのフィルタ機構が働かない点に注意。 投稿の更新の際にフィルタをかけるプラグインなどを利用している場合は、データに不整合が出てしまう可能性もある。 WordPressのテーブル構造 Database Description « WordPress Codex バージ

  • Jasmine TitaniumをGithubで公開しました - ひげろぐ

    akahigeg/jasmine-titanium – GitHub お得意のヤク毛刈りの延長でまとめたものをついでなので公開してみました。 fork歓迎です。 specs.shを見ると分かりますがけっこう強引な手段で実現しているので、あまりお行儀のいい感じのものではないのですが、ひとまずlibとspecにソースを放り込んでいくだけでJasmineがTitanium上で動くようになっているはずです。 READMEの英語が少々インチキだと思うので、日人の方はREADME.jaの方をどうぞ。 Markdownとか初めて書きましたよ。というかそういう記法があることを初めて知りましたよ。 これまでのあらすじ 興味ある方は以前の取り組みも参照してみてください。 あれ、これあらすじって言わねえ。 Titaniumでユニットテスト | ひげろぐ Titaniumでユニットテスト Jasmine再び編

  • Titainiumでステータスバーにインジケータを表示する - ひげろぐ

    TiUIWebViewで作ったアプリ内ブラウザでページをロード中にインジケータがどこにも回ってないのに気がついて、くるくると回るインジケータを表示したいと思った。 ActivityIndicatorは作る方法があるので、このオブジェクトを作ってナビゲーションバーやツールバーに表示してもいいのだけど、今回はステータスバーに小さく表示したかったのでやり方を探した。 探した とりあえず家のドキュメントやQ&Aを探しても見つけられなかったのでソースにダイヴ。 ちなみにステータスバーのインジケータのオンオフはObjective-Cでは以下のように簡単に書ける。 [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; [[UIApplication sharedApplication] setNetwor

  • Titanium Mobileを二ヶ月くらいさわってみた感想。 - ひげろぐ

    今年に入ってからほぼ毎日触ってました。でもほとんどiPhone開発しかしてない感想。 主観的なところをだらだらと書いてみましょう。 とりあえず気に入っているところイマイチと思うところを挙げてみたい。 合わせて総評など。 気に入っているところ さくさく開発できる Objective-Cとは段違いの開発効率。 冗長なメソッド名とメモリ管理の煩わしさからの解放がうれしい。 ちょっとしたモックアップ程度ならさくっと作れてしまう。 そこから開発者が作り込みに注力できる環境が見事にできあがっているのではないかと。 JavaScriptはくせもあるけどおおむね使いやすい言語。 CoffeeScriptとの組み合わせでさらにいいかんじ。 TDDできる Jasmineで気持ちよくTDD出来ている点が非常にポイント高い。 おかげでTitaniumラブですよ。 Objective-CでもTDD可能だけど、OCU

  • TitaniumのJSSという機能 - ひげろぐ

    1.5.1から追加された機能で、オブジェクトの外見をJavaScript StyleSheetでカスタマイズできる。 コンパイルされたファイルを消してビルドし直さないと修正が反映されないという大きな問題があったが、1.6.0で修正されている。 要はHTMLに対するCSSのようなもの。 構造とデザインを分離できるという利点がある。 でもまだ正直あんまり練れた機能ではないかも。 基的な使い方 概要 *.jsにあわせて*.jssファイルを作る(ex. app.js => app.jss, menu.js => menu.jss) *.jssでID別、クラス別、オブジェクトのタイプ別にスタイルを定義する *.jsでIDまたはクラスを指定してオブジェクトを作成する *.iphone.jssや.*.android.jssのようにプラットフォーム別にファイルを分けることができる global.jssを

  • requireでTitaniumのインクルードパスの問題を解決する - ひげろぐ

    Ti.includeじゃなくてrequireを使うと幸せになれるっぽい。 CommonJSでJavaScirptのモジュールを定義することになるので、Ti.includeをそのまま置き換えることはできないけど。 これで黒魔術とおさらばできるかしら。 実験 app.js var window = Ti.UI.createWindow({ url: "lib/hoge.js" }); window.open(); Ti.includeとは違うところを確認するためにlib以下のurlを指定したウィンドウを開く。 lib/hoge.js var hoge = require("lib/fuga"); hoge.foo(); lib/fuga.jsのrequireを行う。 Resourcesからの相対パスで指定できているところに注目。 Ti.includeで同じような指定をすると Ti.includ

  • CoffeeScriptでTitanium 一ヶ月目くらいの感想 - ひげろぐ

    CoffeeScriptについて ここんところしばらくCoffeeScriptとTitaniumの組み合わせで開発しているわけだけど、CoffeeScriptに関して言えば特に大きなハマりどころもなく快適に使えている。 強いて言えばこの間の@だけど、あれはどっちかというとJavaScriptのハマりどころだったわけで。 文法を覚えるコストがゼロとは言わないが、Rubyのバックグランドを持っていたせいかそんなに苦労はしなかった。 書き方を覚えてしまえばJavaScriptよりもさくさく書けて、かなり生産性に寄与してくれているのではないかと思う。 個人的には後置のifとforが特にお気に入り。 Titaniumとの組み合わせについて Titaniumとの組み合わせもまったく問題なし。 逆にCoffeeScriptなしでの開発が今となっては考えられないくらい。 Resources以下で以下のコー

  • Titaniumが生成したObjective-Cのコードを修正する - ひげろぐ

    禁断の技に手を染めてみたメモ。 しかしながらこの技は相当の技術的負債をともなうため、非推奨。 修正対象のコードのある場所 一度でもアプリをビルドするとproject_dir/build/iphone/Classes以下にTitaniumが生成したObjectiv-Cのコードが展開されるので、これを修正する。 修正されるとちゃんと反映されるのでちょっと面白い。 ただ全てのソースコードの頭のコメントにはもれなく次のような警告が含まれている。 * WARNING: This is generated code. Modify at your own risk and without support. リスク Titaniumが生成したObjective-Cのコードを修正することにはリスクがある。 ちょっと考えただけでもいろいろな面倒の可能性が思いつく。 修正したコードにバグを埋め込んでしまう ク

  • Titaniumのモジュール作成にチャレンジ - ひげろぐ

    MapViewのアノテーション表示処理をカスタムしたくてモジュール作りに走ってみた。 参考リソース 日語リソースとしては以下のページがとても参考になる。 [Titanium] Titanium Module Development メモ – その1 – それはBlog [Titanium] Titanium Module Development メモ – その2 – それはBlog チュートリアルとして見るとモジュールの設置やtiapp.xmlの編集が抜けていたりするけれども、全体的にスクリーンショット入りでわかりやすくまとまっていてGJなかんじです。 後は家のPDFを見るべし。 モジュールの作成 モジュールはアプリケーションとは別のプロジェクトとして作成する。 準備 $ alias /Library/Application\ Support/Titanium/mobilesdk/os

  • 既存のTableViewの行を取得する - ひげろぐ

    TableView > TableViewSectionの配列 > TableViewRowの配列 という構造を念頭に置く必要がある。 単純なテーブルの場合はdataにTableViewRowの配列をそのまま突っ込めるので TableView > TableViewRowの配列 と勘違いしてしまいがちだが、その理解だとTableViewから行を取得することはできない。 ダメなコード dataがrowsと同じ内容と期待して裏切られたコード。 rows = [ {title:"1st"}, {title:"2nd"} ] tv = Ti.UI.createTableView({data:rows}); // すぐに実行するとtvがまだnullの場合があるので1秒後に実行 setTimeout(function(){ Ti.API.info("rowCount:" + tv.data.rowCo

  • WebViweに表示されているHTMLからTitaniumの処理を実行する - ひげろぐ

    Objective-CではUIWebViewDelegateを使うとHTML内のリンクをクリックした時にアプリ内のネイティブな処理を実行する事ができた。 Titaniumでも同じ事ができる。 しかもかなり簡単に。 このおかげでHTMLUIを作ることができるため、ウェブの経験が長い人間にとっては手軽にちょっとリッチなUIを作れるようになる。 手順 カスタムイベントを定義する Ti.Appにカスタムイベントを追加する。 Ti.App.addEventListener("sample_custom_event", callback); HTML内でイベントを発火させる 定義したカスタムイベントをTi.App.fireEventで発火させる。 <a href=\"#\" onClick=\"Ti.App.fireEvent('sample_custom_event', {}); return f