TitaniumMobile勉強記

Web系エンジニア向けのキャリアアドバイザーやってましたが現在はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連(Node.js、Titanium)あたり

001-Titanium Mobileでアプリ開発をはじめる

最終的につくろうとしているアプリ

つくろうと思ったきっかっけ

理由は3つあります。

1つ目はDailyPortal ZiPhoneでも手軽に読めるReaderを作ろうと当初は思っていました。

DPZの各記事はCMSで管理されているような感じで、各エントリは

portal.nifty.com/20xx/xx/xx/[a-z]

という感じ、publishされた日付(yyyy/mm/dd)+アルファベット一文字(aからzの連番)という構造になっているため、巡回するのは簡単そうだったけど本文のHTMLがtableタグが使われている場合があったりして、スクレイピングするのが大変そうと思ってちょっと断念

ただ折角途中まで考えていたので、このアイデアを転用できないかと思いつき、これを作ることで、過去自分が書いたエントリをオフラインでもじっくり読めるようになるかもというのがきっかけの1つ目です

2つ目は、スマートフォン向けのアプリ開発者求人が徐々に増えており、今後そういう技術に長けた人とキャリアカウンセリングする場面が出てくると思うので、最低限自分自身も知っておいたほうが良いかなと思ったから。

3つ目は、単純に自分自身を手軽に売り込める手段として

人材業界というマーケットの中で自分が優位に立てるポジションっていうのは

「キャリアカウンセリングに必要な素養 + コードも書けて必要に応じてサーバ構築なんかも出来るITスキル」

かなと思っています。

同業他社(他者)で、IT業界出身者って意外といます。

でもそういう人達は、SIer出身でコードは新人時代に研修で習った程度という感じです。

(仮にバリバリコード書いていたっていう人がいても)そういう人は、インフラの方は苦手っていう感じです

そういう意味では、自分はそこそこ両方出来るから、自分が優位に立てるポジションでさらにスキルを伸ばしておくのが自分のキャリア形成上、有利になるかなと思っています。

データ構造

iPhoneのUI考えるのは結構楽しそうなので、そっちにとりかかりたい気持ちをグッと抑えてまずは、データをどのように格納するかそちらか考えることにしました。

考えているModelは今のところこんな感じ

blogger
  • blogger_name:名前
  • blogger_uri_entry_point:あすなろブロガーの執筆者別にディレクトリが設定されているのでそのディレクトリ名
  • entry_frequency:ブログの更新頻度。この数値をブロガーのランキングの重み付けに活用したい
  • social_media_:はてブや、twitterのようなソーシャルネットワークサービスに対する影響度。これもブロガーランキングの重みづけに活用したい
entry
  • id: auto incrementで可能であれば採番したい
  • url:各エントリのURL
  • entry_body:ブログの本文。HTMLのbodyパートから本文部分だけを抽出
picture
  • picture_path:写真のリサイズを可能だったらやりたい。そのためにリサイズされた画像のファイルパスを格納
entry_list

TOP画面のベースとなるエントリ情報の一覧を格納する目的で利用する

  • id: auto incrementで可能であれば裁判したい
  • entry_id:entryモデルのidとリレーションがはられる関係

懸念事項など

通勤途中の電車内で、Moleskineで1人ブレストしながらあれこれ考えながら、メモを書いているうちに、2つ懸念点が出てきました。

同期処理どのようにするか?

iPhone側でローカルに格納する記事と、最新記事とどのように同期するのが最適なんだろうと疑問に感じました。

現状、考えているやり方としては

  1. まずは最新記事5件取得して配列に格納
  2. ローカルの記事一覧の配列を準備
  3. 最新記事を格納している配列と集合演算

これについては、自分の業務効率をあげるために会社で使っている自作ツール(WSH+JScript)作成するときに参考にした配列の集合演算を実装する

function difference(arrayA, arrayB) {
  var result = [];
  for (var i = 0, len = arrayA.length; i < len; i++) {
    if (!include(arrayA[i], arrayB)) {
      result.push(arrayA[i]);
    }
  }
  return result;
}
var a = [1, 2, 3, "a"];
var b = [1, 4, 5, 6, "a", "あ"];

console.log(difference(a, b));
//=> [2, 3]

を参考に実装していけばOK(なはず)

クローラー的な処理

あすなろブログが全文配信してないという問題もあるし、そもそもクローラー的なものを実装しないといけいない。
このあたりの実装が自分にとっては一番の課題になりそう