Sencha Touch 2 Recipes:4 プラグイン機能を使ってパッチをあてる

このエントリーを含むはてなブックマークはてなブックマーク - Sencha Touch 2 Recipes:4 プラグイン機能を使ってパッチをあてる この記事をクリップ!Livedoorクリップ - Sencha Touch 2 Recipes:4 プラグイン機能を使ってパッチをあてる Share on Tumblr newsing it! Bookmark this on Delicious Digg This

先日、開発した Sencha Touch アプリのユーザビリティテストを社内で行ったところ、多くの被験者が、検索機能を正しく使うことができませんでした。

確認したところ、iPhone で Sencha Touch の検索コンポーネントを利用する際、入力キーボードの右下が検索ボタンにならず、改行ボタンになっていることが原因の模様。

具体的には、以下のような状態です(※右下に注目)。

改行ボタンを押すと検索アクションが実行されるのですが、普通は気づかないですよね。。

検索コンポーネントの入力フィールドは、input タグで、HTML5 から新たに追加された type=”search” 属性を指定しています。この type 属性に応じて、キーボードのボタンを切り替えることができるのですが、実は、input タグは form タグで囲われている必要があるようです。ところが、Sencha Touch が生成する HTML は input タグ単体で form タグで囲われていませんでした。

操作を中断させてしまうクリティカルなバグなので対応が必要です。パッチのあて方はいろいろあるのですが、今回は Sencha Touch のプラグイン機能を利用しました。

Problem:

- 何かしらの事情があり、特定のコンポーネントに特殊な処理を施したい
- メンテナンスビリティを保ちつつ、できるだけ小さな影響範囲でパッチをあてたい

Solution:

Sencha Touch のプラグイン機能を利用してパッチをあてます。

// プラグインを定義します

Ext.define('Ext.plugin.IosKeybordSearch', {
  extend: 'Ext.Component',
  alias: 'plugin.ioskeybordsearch',
  init: function (search) {
    var component = search.getComponent()
      , tmpEl = component.element.dom
      , formEl = document.createElement('form');
    formEl.appendChild(tmpEl);
    formEl.action = 'javascript:void(0)';
    search.element.down('div[class=x-component-outer]').appendChild(formEl)
  }
});

// プラグインを利用します
// ファイルを動的ロードしている場合は、読み込むプラグインファイルの定義も追加します

Ext.define...
    ...
    requires: [
        ...
        'Ext.plugin.IosKeybordSearch'
    ],
    ...
 
  {
    xtype : 'searchfield',
    placeHolder: 'Search',
    name : 'searchfield',
    plugins: [
      {
        xclass: 'Ext.plugin.IosKeybordSearch'
      }
    ]
  },
  ...

view raw gistfile1.js This Gist brought to you by GitHub.

無事に検索ボタンが出るようになりました(※右下に注目)。

Discussion:

プラグイン機能は、コンポーネントが生成された後、そのコンポーネントに対して、任意の加工を施す機能です。本来の用途としては、リストコンポーネントにページング機能を追加したり、再読み込み機能を追加したりと、標準では備わっていない機能を付与するのに使われます。

今回のプラグインは、生成されたコンポーネントの dom 要素に対して form タグでラップするもので、パッチが目的ですが、影響範囲を狭めつつ、ロジックの再利用が可能なので、なかなかおすすめです。

Sencha Touch にはフレームワークのロジックを上書きするための Override 機能があるのですが、これは影響範囲が大きいため、なかなか積極的に使う気分になれません。

また、特殊な処理を行うための親クラスを作って、それを各々のコンポーネントで継承する、という方法もあるのですが、メンテナンスのことを考えると、クラス階層はできるだけシンプルにしたい。フレームワークのバグ回避のためだけにクラスを作って継承させるのはナンセンスな気がしますし。

そんなときに、もしかすると使えるかもな Tips でした。

See Also:

最新の Sencha Touch(2.0.1 – 2012.4.23リリース)でも、まだこのバグは残っているので、必要な方向けにプラグインを公開します。
https://github.com/kawanoshinobu/Ext.plugin.IosKeybordSearch

このバグは、近々修正される予定です。
http://www.sencha.com/forum/showthread.php?151529-searchfield-not-showing-quot-Search-quot-button-on-iOS-keyboard.-Bug


関連文書:

カテゴリー: 開発 | タグ: , , | コメントをどうぞ

[OpenFlow] NOX から生まれた POX の話

このエントリーを含むはてなブックマークはてなブックマーク - [OpenFlow] NOX から生まれた POX の話 この記事をクリップ!Livedoorクリップ - [OpenFlow] NOX から生まれた POX の話 Share on Tumblr newsing it! Bookmark this on Delicious Digg This

 先日開発した Jaxon (Java 版 OpenFlow コントローラ) ですが. 早くも, オワコンの様相がどうにも拭えません.
 
 これと言うのも Jaxon が依存している OpenFlow コントローラ NOX が, 新しいフレームワーク “POX” の開発に移行したことに起因します.
 
 NOX 公式サイトのトップに, 次の絶望的な文書が掲載されています (以下抜粋).

There's also NOX Classic which supports both C++ and Python.
We have no plans to do substantial further development on this project

 もう POX に完全移行したと思ってまず間違いないでしょう.
 github のリポジトリを見ても, POX はむちゃくちゃホットであるのに対して. NOX はというと完全に放置されています.
 
 POX というのは, NOX チームが開発した Python ベースで OpenFlow コントローラを記述するフレームワークです. POX 自体も Python で書かれています.
 
 これまでも NOX では Python によるコントローラの記述が行えました (これには “NOX-Classic” と名付けられたようです).
 
 しかし NOX-Classic は, 本体が C/C++ なので, せっかく Python で書いたのに移植性が悪く, また設計上遅いという問題がありました.

 どいうことかというと, NOX-Classic の Python コンポーネントは, C++ でかかれた NOX 本体固有で, 且つ全ての Python コンポーネントに対して共通のコントローラから SWIG 経由で, ユーザ定義の Python コードを呼び出す設計になっています.
 
 これに対して POX は, それまで C/C++ で書かれていた OpenFlow コントローラ機能を Python で実装したことで, プラットフォーム間でのポータビリティの向上に加え, PyPy といった JIT による高速実行エンジンによって, 高速化が実現できたりしています.

 ただ Jaxon にしてみれば. せっかく試行錯誤の末 NOX 本体のコードには一切手を触れずに, NOX-Java 連携を実現したというのに. こうもあっさり NOX コードを捨るとは…
 
 彼らの思い切りの良さと, 自分のあまりの先見の明のなさにショックを隠しきれません.
 失意のあまり, これを期に Java をやめたいくらいです.


関連文書:

カテゴリー: いろいろ | コメントをどうぞ

「ソフトウェア開発という仕事」と題して講義をしました

このエントリーを含むはてなブックマークはてなブックマーク - 「ソフトウェア開発という仕事」と題して講義をしました この記事をクリップ!Livedoorクリップ - 「ソフトウェア開発という仕事」と題して講義をしました Share on Tumblr newsing it! Bookmark this on Delicious Digg This

社内で新卒向けに講義をしました。社内固有の情報を削除した上で、下記に講義資料を公開します。

ソフトウェア開発における開発者の仕事を理解してもらうために話をしました。

講義対象者の半数以上が開発志望ではなかったので、開発者でない人が、今後、IT業界の中でどう開発者と向き合っていくかを主眼にして話しました。IT業界にいながら、開発者のことを理解できない人たち、あるいは何をしているのか分からない、と偏見を持つ人がいるからです。彼らにそうなって欲しくないからです。共感できるかは別です。考え方や価値観が違うなら違うでもいいと思います。はじめから理解を拒否していたら、いつまでもコミュニケーションが生まれません。

ついでに、半数以上が女性だったので、裏の意図として、プログラマがモテるようになって欲しいと思って話しました。プログラマがモテる世界にしたいと思っているからです。若い女性の前で話す機会を得られた今、プログラマの世界で育てられた自分にとって果たさなければいけない責務だと思っています。

==========================================================
新卒向けの講義:

ソフトウェア開発という仕事

* この講義の目的

- ソフトウェアの開発者の生態の理解

(原則)開発者志望ではない人を想定します

* 目次

- ソフトウェア開発にはどんな職種があるのか?(世間一般)
- 開発者は普段何をしているのか?
- ソフトウェア開発とは?

* ソフトウェア開発にはどんな職種があるのか?(世間一般)

** IPAのITスキル標準(ITSS)

- http://www.ipa.go.jp/jinzai/itss/index.html
- 職種名、必要スキル、業務内容を整理した一覧
- 職種と専門分野が横軸、スキルレベル(7段階)が縦軸
- 資格ではなく、スキルの指標

** ITSSの特徴

- 単線キャリアパス(PG=>SE=>PM)から、複線キャリアパス(下級PG=>上級PG、下級SE=>上級SE、下級PM=>上級PM)へ転換

** ITSSの職種

- マーケティング
- セールス
- コンサルタント
- ITアーキテクト
- プロジェクトマネジメント
- ITスペシャリスト
- アプリケーションスペシャリスト
- ソフトウェアデベロップメント
- カスタマサービス
- ITサービスマネジメント
- エデュケーション

詳細は

http://www.ipa.go.jp/jinzai/itss/download_V3_2011.html

「2部 キャリア編の補足A」を参照

** ITSSのスキルレベル

- レベル7: 世界で通用するプレーヤ
- レベル6: 国内のハイエンドプレーヤ
- レベル5: 企業内のハイエンドプレーヤ
- レベル4: 社内においてプロフェッショナルとして認められる
- レベル3: 要求された作業を全て独力で遂行
- レベル2: 上位者の指導の下に、要求された作業を担当
- レベル1: 最低限必要な基礎知識を有す

** スキルのジレンマ

- 固有の知識(特定の製品・サービスや特定のプログラミング言語)だけでは、いずれ古びるリスク
- 固有の知識を伴わない知識や技能だけでは単なる評論家

古びないように自分のスキルを常に見直す必要

** ITSSの使い方

- 「普通の人」は、ITSSの知識体系から自分に必要なスキルを具体化する
- 「普通でない人」は、自分のスキルを抽象化して、ITSSの知識体系のどこに位置するか知る

- 職種の分類にこだわる必要はない

* 開発者は普段何をしているのか?

** 開発部内の主な職種

- プログラマ: ソフトウェアを書く人
- テスト担当者: ソフトウェアの正しさを検証する人
- インフラ担当者: ソフトウェアが正しく動く環境を整備する人

** プログラマが普段していること

- コードを書く(新機能開発、バグ修正)
- コードを読む(壊れないようにするため)
- テストする
- 調べる(どうやって実現するか調べる)
- 考える(どうやって実現するか考える)
- 新機能を提案する
- 技術の先行調査(知識のストック)
- 情報伝達(成果を披露)
- 営業協力(実現可能性の相談)
- 製品サポート(トラブル対応)

** 製品開発の段階とプログラマの役割

1. 要求を聞き出す or 発見する
2. 何を作るか考える(いわゆる要件定義)
3. どう実現するか考える(いわゆる設計)
4. コードで実現する(いわゆる実装)
5. 要求を満たす品質にする

- アリエルの多くのプログラマ: 3と4を担当
- アリエルの一部のプログラマ: 2と3と4を担当
- アリエルの古老プログラマ: 1から4まで担当
- アリエルの伝説的プログラマ: 1から5まで担当

** テスト担当者が普段していること

- 製品のテストをする
- バグを報告する
- 機能提案をする
- 修正されたバグを検証する
- 製品の品質を見える化する(リリース判断の情報提供)
- テストを効率化する
- プログラマの情報を翻訳して情報伝達
- プログラマにプレッシャーをかける
- プログラマを励ます
- 製品サポート(トラブル対応)

** プログラマとテスト担当者のまじわり(新機能開発編)

1. プログラマが機能について課題管理システムにチケットを作成して仕様を記載
2. プログラマが自分の手元でコードを書く
3. プログラマが自分の手元で動作を確認する
4. プログラマがソースコード管理システム(SCM)にコードをコミットする
5. プログラマがチケットの仕様を最終確認してステータスをfixedにする
6. 自動で単体テストなどのチェックが走る
7. 毎日、自動でビルド(コードから完成物を生成)が走る
8. できたソフトウェアを動かす(一部のテスト環境は自動デプロイ、一部は手動デプロイ)
9. テスト担当者がソフトウェアが想定どおりに動くか確認(verify)
10. 想定どおりの動きをしない場合、チケットをreopenする
(reopenされたチケットはプログラマに戻る)
11. 動作およびチケットに記載された仕様に問題がなければチケットを閉じる

** プログラマとテスト担当者のまじわり(バグ修正編)

1. 毎日、自動でビルド(コードから完成物を生成)が走る
2. できたソフトウェアを動かす(一部のテスト環境は自動デプロイ、一部は手動デプロイ)
3. テスト担当者がテスト仕様書をもとに、ソフトウェアが想定どおりに動くか確認する(システムテスト)
4. 想定どおりの動きをしない場合、チケットを作成してバグ報告する
(作成されたチケットはプログラマに行く)
5. プログラマがチケットに記載されたバグを修正する
6. 以下、略

** インフラ担当者が普段していること

- パフォーマンス計測
- 営業協力(実現可能性の相談)
- 導入支援(キャパシティプラニング)
- 情報伝達(導入や運用のマニュアル化)
- 技術の先行調査(知識のストック)
- 製品サポート(トラブル対応)
- 管理コスト軽減の側面での機能提案

* ソフトウェア開発とは?

** 様々な見方

- 製造?
- 設計?
- サービス?

業界での完全なコンセンサスをまだ得ていない
ソフトウェア開発が未成熟な証

** 製造業アプローチ

建築や製造業のようにソフトウェアの故障率の予測可能を目指す考え方

- プロセスモデル(cf. CMMI)
- ウォーターフォール
- クリーンルーム手法
- ソフトウェアファクトリー
- ハッカー気質や職人の否定

周期的に盛り上がっては消えていくソフトウェア業界の青い鳥

** 設計業アプローチ

建築や製造業と比較した時、コードは設計図に当たるという考え方(故障率という発想そのものの否定)

- 設計図なので試行錯誤は必然と見なす
- 製造に相当する工程はコンパイルやビルド(自動化済み)
- プロセスよりツールや技法(職人)を重視
- ハッカー気質の肯定

現実にもっとも適合したアプローチ。あるがままを受け入れる禅の世界

** サービス業アプローチ

ソフトウェア故障率の予測ではなく、使う人の満足度の向上の予測可能を目指す考え方

- プロセスより顧客との対話を重視
- アジャイル(cf. スクラム、XP)

コミュニケーションや顧客満足度を出されると誰も反論できない最強兵器
(熟考の末ここにたどりつく玄人と、歴史を知らず雰囲気だけでここに飛びつく素人が共存する世界)

** 開発プロセスと用語

- 要求(wish or desire)とは?
利用者の願い
(本当の要求は言語化されるとは限らない。マーケティングの領域に近い)
- 要件(requirement)とは?
技術的な裏付け(実現可能性:feasibility)をもとに要求を定義したもの(広義)
かつ関係者で合意したもの(狭義)
- 仕様(specification/spec.)とは?
ソフトウェア動作を記述したもの
完全な仕様はコード以外に存在しえないジレンマ
- コード(code)とは?
ソフトウェアの記述そのもの
- 設計(design)とは?
広義には、仕様作成からコード記述まですべての行為を指す用語
狭義には人それぞれ(仕様書とコードの中間生成物の設計書を書く行為など)
語源に忠実になれば、概念を記述(コトバ、コード、図など)して伝達すること
- 実装(implementation)とは?
一般にコードを書く行為のこと
- ビルド(build)とは?
コードから動くプログラムを生成する工程(一般に自動化される)
==========================================================


関連文書:

  • 関連文書は見つからんがな
カテゴリー: 開発 | コメントをどうぞ

イザ! OpenFlow v1.1 に切り込む(後編)

このエントリーを含むはてなブックマークはてなブックマーク - イザ! OpenFlow v1.1 に切り込む(後編) この記事をクリップ!Livedoorクリップ - イザ! OpenFlow v1.1 に切り込む(後編) Share on Tumblr newsing it! Bookmark this on Delicious Digg This

 先日, とある飲み屋で「OpenFlow って何?」と聞かれた際に, 『SDN を実現する一手法』とか『スイッチをプログラマブルに制御する手法』といった辞書的な説明しかその場でできなかった時, 自分の未熟さを痛感しました.
 
 その分野に精通するという事は, 相手に平易な言葉で容易に理解させる事も含んでいると思うので, この場で先日の屈辱を晴らしたいと思います.
 
 『OpenFlow の本質とは?』
 
 NEC の OpenFlow 事業の大物. 岩田氏曰く OpenFlowの本質は「プログラマブルであること」 だそうです.
 ここでの話は, OpenFlow での L2 から L4 までのプログラマブル制御により, ヘテロジニアスなネットワークを柔軟かつフレキシブルに設計できるという内容です.
 OpenFlow の出発点となった, ネットワーク系のトップカンファレンスの ACM SIGCOMM で発表された論文 においても, オープンプラットフォームにおけるプログラマブルなネットワーク制御という内容が強調されています.
 
 『仕組みや動作はわかったから. じゃあ OpenFlow で一体なにが (実現) できるの?』『既存ネットワークとの決定的な違いは何なの?』という単純な問いに, 長らく簡潔な答えを見出せずにいました.
 
 ”ネットワークをプログラマブル制御できる” という命題において「何ができるのか?」という問いは, 「C で何が作れるの?」という問いにほぼ置き換えて考えられるので, 明確な答えを出すのは難しいですが.
 プログラミングという手段で, ネットワーク制御の目的のいくつかに的を絞って考えると, 答えは出そうです.
 
 改めて「OpenFlow とは何か?」

 僕が考える『ネットワークが OpenFlow である必然性』は次の3つです.
 
 (1) 仮想ネットワークの構築
 (2) トラフィックの分散
 (3) ネットワークの集中管理
 
 まず, 仮想ネットワークについて.
 OpenFlow では, ネットワークに接続する全ての端末をフラットな L2 のセグメントにぶら下がっているものとして扱えます.
 またルーティングテーブルにしろ NetFilter にしろ, プロトコルスタックを意識した構造になっていますが. OpenFlow は L2 から L4 までのヘッダ情報を同時に扱えるので, 任意の L3, L4 の仮想論理ネットワークを仮想的に構築でき, そしてこれらをプログラマブルに制御できます.
 
 またトラフィックの分散と, 集中制御を同時に実現できるのが OpenFlow です.
 「”分散” と “集中” を同時にって何言うとるんや?」と思われるかもしれませんが. OpenFlow ではデータが流れる経路 (Data Plane) と, OpenFlow スイッチを制御するための経路 (Control Plane) が仕様上完全に分離されているので, 集中制御をしつつトラフィックの分散が実現できます.
 
 ここで本題の OpenFlow v1.1 について.
 さて書こうか…と思ったら, 既に内容的に優れている上に日本語で書かれているドキュメントがありました.
 
 OpenFlow ver1.1およびver1.2の追加機能と活用例
 
 これに補足する形で書くと.
 OpenFlow v1.1 において取り立てて注目すべき, 特にすさまじい (と個人的に思える) 機能が “グループ” です.
 
 リンク先のページでも書かれているように OpenFlow v1.1 から登場したグループの機能において (スイッチでリンクの死活管理機能がスイッチによってサポートされている場合に限られますが) ネットワーク障害を想定したフロールールの記述も可能になり, コントローラ側でリンクや機器の死活管理処理を記述しなくても, 障害が発生したケースだけを想定すればいいので, より簡単に堅牢なネットワークの設計ができます.
 
 また同じくグループの select タイプの処理によって, v1.0 ではコントローラにパケットを運ばないと実現できなかったロードバランサのような機能も, スイッチ側だけで実現できるようになっています.
 
 さらに同じメカニズムで, 物理的に並列に這わせたリンクを仮想的に一つのパスとして扱い, 回線能力以上のスループットと冗長性を上げる link aggregation (UNIX では bonding と呼ばれている) 処理を実現できます.
 
 OpenFlow v1.1 によって, 制御の自由度や柔軟性はグッと上がりました. また, これまでコントローラ側で行わなければできなかった事も, スイッチに適切なフローを定義してやればスイッチ単体で実現できてしまうので, パフォーマンスも格段に上がることが期待できます.
 
 ただこれを実現できるまともな環境が無いのが, 現時点での悲しいところです. もちろん全く環境がないわけではありません. Stanford Reference Switch として知られる OpenFlow スイッチのソフトウェア実装では, 早くから OpenFlow v1.1 に対応されているので実験的な事はこれを使ってできるのですが. これ自体がユーザランドのプログラムなので, スイッチがボトルネックになる懸念があります.
 また, NOX にしろ Floodlight にしろ Trema にしろ 現時点での最新版において各コントローラが OpenFlow v1.1 に対応してないので, そもそも v1.1 機能は使えません.
 先日 GNU/Linux のメインラインにマージされた頼みの OpenVSwitch の最新版 (v1.4.1) もまだ OpenFlow v1.0 ベースです.
 しかし 前回 紹介したように, OpenFlow 1.1 及び 1.2 対応は OVS コミュニティにおいて進められているようなので, スイッチ/コントローラ双方における OpenFlow v1.1 完全サポート版の登場が待ち遠しいです.


関連文書:

カテゴリー: いろいろ | タグ: | コメントをどうぞ

ありえるえりあミニ勉強会#1(Sencha Touch)を開催しました

このエントリーを含むはてなブックマークはてなブックマーク - ありえるえりあミニ勉強会#1(Sencha Touch)を開催しました この記事をクリップ!Livedoorクリップ - ありえるえりあミニ勉強会#1(Sencha Touch)を開催しました Share on Tumblr newsing it! Bookmark this on Delicious Digg This

先週4/25、弊社セミナールームにて、第一回目のありえるえりあミニ勉強会を開催しました。悪天候の中、ご参加下さった皆様どうもありがとうございました。勉強会では伝え切れなかった部分もあるので、内容を振り返りつつ、補足記事を書かせて頂こうかと思います。

勉強会で利用したスライド:
http://kawanoshinobu.github.com/arielarea-1

当日の Ustream 中継:
http://www.ustream.tv/recorded/22110265

Sencha Touch ひとめぐり

Sencha Touch の概要について、簡単にお話しました。Sencha Touch はスマートフォン・タブレットのネイティブアプリライクな WEB アプリが作れる JavaScript のフレームワークで、今年の3月に 2.0 にメジャーバージョンアップしました。対応しているデバイスは、iPhone、iPad、Android、BlackBerry、Kindle Fire。商用利用も「無料」で可能です。

他のモバイル WEB アプリ用の JavaScript ライブラリと比較してパフォーマンスがよく、機能が豊富にあること、HTML ではなく JavaScript を使って UI を構築していくことが特徴です。Sencha は、元々は ExtJS という JavaScript フレームワークを開発していたベンダーで、モバイル WEB アプリ分野への事業拡大をきっかけに社名を Sencha に変更しました。

開発準備

Sencha Touch 2.0」「Sencha SDK Tools」「Web サーバー」「ブラウザ(Chrome か Safari)」を準備します。

上記のリンクからダウンロードする Sencha Touch のソースコードが含まれたファイル一式も SDK と呼ぶので混乱を招いてしまったようです、、すみません。Sencha SDK Tools は開発を便利にするコマンドラインツールで、インストールは必須ではありません。ただ、プロジェクトの Scaffold やビルドタスクなど便利な機能があるので利用をおすすめします。

開発デモ

Instagram の API を利用した写真ビューアを作るデモを行いました。上述の Sencha SDK Tools の Scaffold 機能を使ってプロジェクトの雛形を作成し、Sencha Touch ドキュメントを参考に開発を進めます。デモでは、結局完成まで至りませんでしたが、完成形はこちら。デモアプリのソースコードは以下に置いてあります。
https://github.com/kawanoshinobu/tiny-instagram-viewer

実は、今回やった内容のネタ元は、Sencha Touch のドキュメントに掲載されている Getting Started with Sencha Touch 2 になります。実際に開発される際は、以下の動画を参考にして頂ければよいかと思います。。
http://docs.sencha.com/touch/2-0/#!/guide/getting_started

iPad 用 Webアプリ Inkpod Web の紹介

@dsuket さんに Sencha Touch を使って複雑なアプリケーションを開発した経験から、苦労話や Sencha Touch の魅力などについて語って頂きました。

開発された Inkpod Web の完成度は必見です。こちらのデモ画面をご覧下さい!
# iPad での利用を想定したものですが、PC でも Chrome や Safari から動作を確認できました。

発表内容も大変面白く、フレームワークのコアな挙動の説明なども織り交ぜつつお話されていて、とても勉強になりました。

まとめ

勉強会自体は実施の面でいろいろ反省材料の多いものでした。。次回以降、改善に努めたいと思います。個人的には、Sencha Touch を使って開発しているエンジニアの方々と交流できたことが大変楽しかったです。Sencha Touch は海外では結構使われているのに国内での利用事例が少ない、Sencha Touch の競合は、jQuery Mobile ではなくて Titanium Mobile では?など、なるほど!、と思う意見をたくさんお聴きすることができました。

勉強会の後、参加者の方から要望があったので、Facebook で Sencha Touch 開発者のページを作ってみました。
http://www.facebook.com/senchatouch
# URL が公式っぽい感じですが、あくまで非公式なページです。Sencha Touch 好きの方はぜひ「いいね」して下さい :)

さて、そんなありえるえりミニ勉強会ですが、早速第二回を5月に開催します。おかげさまで募集を始めてあっという間に定員に達してしまいましたが、前回は当日までに 24 名のキャンセルがあったので、いま申し込めば、繰り上がる可能性は大きいと思います。WEB 開発のスキルだけで、かっこいいモバイルアプリを開発できる Sencha Touch、この機会にぜひ始めてみてはいかがでしょうか〜?


関連文書:

カテゴリー: 開発 | タグ: , , | コメントをどうぞ

イザ! OpenFlow v1.1 に切り込む(前編)

このエントリーを含むはてなブックマークはてなブックマーク - イザ! OpenFlow v1.1 に切り込む(前編) この記事をクリップ!Livedoorクリップ - イザ! OpenFlow v1.1 に切り込む(前編) Share on Tumblr newsing it! Bookmark this on Delicious Digg This

先日, 格安 OpenFlow スイッチの話を耳にしました. 調べてみると Pica8 というシリコンバレーベンチャーが作ったスイッチを知りました. 既に, 代理店を通じて販売もされているようです.

OpenFlow完全対応データセンタグレードのL2/L3スイッチを販売開始

OpenFlow 制御はというと OpenVSwitch (以下, OVS) をつかっているようです.
ギガビット Ethernet が 48 ポートでお値段 30 万円台. 激安です. ○EC ならこの 10 倍はします. 某社製品と比較しても OVS か某社製ソフトウェアかの違いくらいでしょうから, むちゃくちゃ安いです.

ところで世間的に今更な話題ですが, 先月発表された Kernel 3.3 で OVS がメインラインにマージされました.

ACM の国際会議で OVS の論文 が最初に登場したのが 2009 年の 9 月で, それから 2 年半で GNU/Linux のメインラインに乗るというんですから, まさに快挙です.
メーリングリストも日々パッチが送られてきて, めちゃめちゃホットです. 「こういうケースの書き方教えろ」とか「使い方がわからないよ」などといったメールが, たまーに来る程度のどこかのコミュニティとは雲泥の差です.

これも発案者に先見の明があった事に加え. 開発者の高い能力と不屈の精神で開発を続けた事, そして厳しい GNU/Linux コミュニティとの闘争を戦い抜いて, その上で認められた結果なのでしょう (グリーン OS とは一体何だったのでしょう).

ちなみに OVS は OpenFlow v1.1 及び v1.2 の一部をサポートされていると言われています. 実際 OpenFlow v1.2 から対応される IPv6 が既にサポートされたりしているのですが.
リリースノートを見る限りでは, パイプライン処理やグループテーブルといった OpenFlow v1.1 からの機能がサポートされていなかったりと, v1.0 の実装に v1.x の機能を抜き出して加えているといった感じのようです.

それでも OpenFlow 1.x 計画 なるものを作って頑張っているのですが.
OpenFlow v1.1 で規程されているマルチキャスト/ブロードキャスト, または特定のポートに対する転送などに対して複数処理をまとめて規程するのグループ処理などが “optional” 扱いになったりしてます.

OpenFlow v1.1 が正式策定されてから 1 年余り経って尚『openflow v1.1 に対応しているコントローラは無く, スイッチも皆無…』なんて言われていますが, もう OpenFlow v1.2 が提案されて, 昨年末に Open Network Foundation に承認されました.
おまけに, 2012/4/19 とつい先日に OpenFlow v1.3 が ONF の理事会で承認されました.

OpenFlow の取り巻く環境は日々進化を遂げ, メーカーやコミュニティがまだこれに追いついていない形ですが. 各所でサポートされてからあわてて「コレなんだっけ?」となるのは寒いので, まずは OpenFlow v1.1 から切り込んでみようと思います.

次回 につづく…


関連文書:

カテゴリー: いろいろ | タグ: | コメントをどうぞ

雑誌連載「Emacsのトラノマキ」の原稿(part17)公開

このエントリーを含むはてなブックマークはてなブックマーク - 雑誌連載「Emacsのトラノマキ」の原稿(part17)公開 この記事をクリップ!Livedoorクリップ - 雑誌連載「Emacsのトラノマキ」の原稿(part17)公開 Share on Tumblr newsing it! Bookmark this on Delicious Digg This

「Emacsのトラノマキ」の原稿を公開します。画面上のメニュー「ドキュメント」からたどれます。

佐藤さんによる「怠惰なプログラマのためのドキュメント作成実践」です。Software Design 2010年9月号の掲載記事です。連載の中でも人気のあった記事です。org-modeの話ですが、みんなorg-modeが好きなんですね。

最近のEmacs界隈(なんてものがあるか知りませんが)の最大のニュースは松山(m2ym)さんのGoogle Summer of Code採択です。松山さんがいればたとえストールマンが死んでもEmacsは安泰です。


関連文書:

  • 関連文書は見つからんがな
カテゴリー: , 開発 | コメントをどうぞ

トラフィック制限(iptablesのhashlimitとshaperdの比較) -アリエル第ゼロ期生のレポート-

このエントリーを含むはてなブックマークはてなブックマーク - トラフィック制限(iptablesのhashlimitとshaperdの比較) -アリエル第ゼロ期生のレポート- この記事をクリップ!Livedoorクリップ - トラフィック制限(iptablesのhashlimitとshaperdの比較) -アリエル第ゼロ期生のレポート- Share on Tumblr newsing it! Bookmark this on Delicious Digg This

最近の社内の新卒第1期生ブームを受けて、第ゼロ期生が本気を出し始めました。

もともと才能は一級品と言われてきた逸材です。そんな第ゼロ期生のレポートを本人了承を得た上で掲載します。トラフィック制限の話です。

iptablesのhashlimitでトラフィック制限

参考サイト

  • http://c-heart.sakura.ne.jp/mt/archives/2009/10/iptables.html
  • http://kfujio.blog78.fc2.com/blog-entry-72.html

設定

  • 特定のIPアドレスとの通信のhashlimitを1666パケット/secに設定
    (mtu = 1500の場合
    1666 (packets/sec) * 1500 (byte/packets) /1024/1024 = 2.38MByte/sec
    となる事を意図)
  • それ以外の通信については all pass

とします。

以下の例で通信相手のIPアドレスをAAA.BBB.CCC.DDDと表記します。

1. iptablesの起動/終了スクリプトを作成

/usr/local/bin/iptables-up.sh
------------------------------------------------------------------
#!/bin/sh
iptables -F
iptables -X

RESTRICTED_IPADDRESS1=AAA.BBB.CCC.DDD

# INPUT
iptables -N FW-INPUT
iptables -A FW-INPUT -i lo -j ACCEPT
iptables -A FW-INPUT -p tcp -s $RESTRICTED_IPADDRESS1 -m hashlimit --hashlimit 1666/sec --hashlimit-mode srcip --hashlimit-burst 2500 --hashlimit-name prot_limit_in -j ACCEPT
iptables -A FW-INPUT -p tcp -s $RESTRICTED_IPADDRESS1 -j REJECT
iptables -A FW-INPUT -i eth0 -j ACCEPT

# OUTPUT
iptables -N FW-OUTPUT
iptables -A FW-OUTPUT -i lo -j ACCEPT
iptables -A FW-OUTPUT -p tcp -d $RESTRICTED_IPADDRESS1 -m hashlimit --hashlimit 1666/sec --hashlimit-mode dstip --hashlimit-burst 2500 --hashlimit-name prot_limit_out -j ACCEPT
iptables -A FW-OUTPUT -p tcp -d $RESTRICTED_IPADDRESS1 -j REJECT
iptables -A FW-OUTPUT -i eth0 -j ACCEPT

# apply
iptables -A INPUT -j FW-INPUT
iptables -A FORWARD -j FW-INPUT
iptables -A OUTPUT -j FW-OUTPUT
------------------------------------------------------------------
/usr/local/bin/iptables-down.sh
------------------------------------------------------------------
#!/bin/sh
iptables -F
iptables -X
------------------------------------------------------------------

参考サイト

2. 起動時にこの設定を読ませる(debian系)

# ln -s /usr/local/bin/iptables-up.sh /etc/network/if-pre-up.d/iptables-up
# ln -s /usr/local/bin/iptables-down.sh
/etc/network/if-post-down.d/iptables-down

とした後で/etc/network/interfacesに

pre-up /etc/network/if-pre-up.d/iptables-up
post-down /etc/network/if-post-down.d/iptables-down

を追加

3. 実験

とりあえずscpで実験してみたのですが、

  • 受信は大体意図通りに通信量を制限出来る
  • 送信は特に制限されているようには見えない

という感じになりました。

shaperdでトラフィック制限

もう少しちゃんと通信量を制御出来、なおかつ簡単そうなものは無いかと検索してみた所、shaperd というもので簡単に制御出来ると出てきました。

参考サイト

  • http://semind.github.com/blog/2012/02/24/shaperwoshi-tutepotodan-wei-dezhuan-song-liang-wozhi-xian-suru/
  • http://bto.la-terre.co.jp/support/shaperd.html

設定

  • 特定のIPアドレス … 送受信共にtcpについて 2000 KByte/secに制限
  • その他 … 全ての通信について、6000 KByte/secに制限

とします。

1. iptablesの設定を元に戻す

前回のhashlimit用のiptablesのチェーンを削除します。

# iptables -F
# iptables -X

自動起動の設定をしている場合は
/etc/network/interfacesの
------------------------------------------------------------------
pre-up /etc/network/if-pre-up.d/iptables-up
post-down /etc/network/if-post-down.d/iptables-down
------------------------------------------------------------------
を削除あるいはコメントアウト

2. ip_queueモジュールのロード

# modprobe ip_queue

起動時に自動ロードするように /etc/modules に ip_queue を追加します。
------------------------------------------------------------------
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

loop
ip_queue
------------------------------------------------------------------

3. shaperdのインストール

# apt-get install shaperd

4. 設定ファイルの編集

/usr/share/doc/shaperd 以下にある例を見て、/etc/shaperd/shaperd.confを作成。

------------------------------------------------------------------
log level = error
packet forwarding = ipq
daemon = yes
pidfile = /var/run/shaperd.pid
class restricted_in {
        ipv4 classifier proto=tcp saddr=AAA.BBB.CCC.DDD
        bandwidth = 2000 kbyte/s
        queue limits = 1000 kb 1000 packets
}
class restricted_out {
        ipv4 classifier proto=tcp daddr=AAA.BBB.CCC.DDD
        bandwidth = 2000 kbyte/s
        queue limits = 1000 kb 1000 packets
}
class all {
        ipv4 classifier proto=all
        bandwidth = 6000 kbyte/s
        queue limits = 1000 kb 1000 packets
}
------------------------------------------------------------------

最初、class restricted_in と class restricted_out の部分のみ書いて、class all 部分を書かなかった所、unmatched packet となってAAA.BBB.CCC.DDD以外からアクセス出来なくなってしまいました。queue limits の値は何が適当なのか不明です。

5. iptablesの設定スクリプトをコピー

debianのパッケージの場合
/etc/shaperd/up.d にiptablesのチェーンの登録スクリプト、
/etc/shaperd/down.d にiptablesのチェーンの削除スクリプト、
を置くとshaperdの起動/終了時に読み込んでくれるようです。

/usr/share/doc/shaperd/examples/ にスクリプトがあるのでこれをコピーして実行権限を付与

# cp /usr/share/doc/shaperd/examples/up.d /etc/shaperd
# cp /usr/share/doc/shaperd/examples/down.d /etc/shaperd
# chmod +x /etc/shaperd/up.d
# chmod +x /etc/shaperd/down.d
/usr/share/doc/shaperd/example/up.d
------------------------------------------------------------------
#!/bin/sh

iptables -A INPUT -j QUEUE
iptables -A OUTPUT -j QUEUE
------------------------------------------------------------------
/usr/share/doc/shaperd/example/down.d
------------------------------------------------------------------
#!/bin/sh

iptables -D INPUT -j QUEUE
iptables -D OUTPUT -j QUEUE
------------------------------------------------------------------

6. shapedの起動

  • /etc/init.d/shaperd start で起動
  • /etc/init.d/shaperd stop で終了

自動起動の場合は sysv-rc-conf か update-rc.dあたりで設定

7. 実験

scpで実験すると送受信共に大体設定通りに動いているようです。

起動時に

shaperd: warning: kernel's queue is too short, consider increasing /proc/sys/net/ipv4/ip_queue_maxlen {config.cpp:166}

の警告が出るのが気になる所です。


関連文書:

  • 関連文書は見つからんがな
カテゴリー: 開発 | コメントをどうぞ

2013年度、アリエル新卒募集が始まりました

このエントリーを含むはてなブックマークはてなブックマーク - 2013年度、アリエル新卒募集が始まりました この記事をクリップ!Livedoorクリップ - 2013年度、アリエル新卒募集が始まりました Share on Tumblr newsing it! Bookmark this on Delicious Digg This

この4月にアリエルに入社した人たちは新卒第1期生と呼ばれています。IT企業らしく第ゼロ期も存在していますが、多くを語らないのが暗黙のルールです。

2013年度の新卒募集が始まりました。入社すると第2期生になります。2進数を使うとイチゼロ世代です。

- アリエル新卒募集ページ

開発者はシャイな人が多いせいか、上記ページの「現職社員ページ」に開発者が出ていません。しかし、開発者も募集しています。ありえるえりあ読者に大学生がどれほどいるかわかりませんが、アリエルに興味があればエントリーしてみてください。エントリーは無料です。無料でエントリーさせてその後課金するようなこともありません。

5月ごろ開発志望者向けの説明会を行う予定です。アリエルが採用したい開発者像や入社後どのようなキャリアパスがあるかについて話します。こっそりD社とG社の悪口も言います。

説明会の主目的はアリエルの魅力を伝えることなので、そこをさぼる気はありません。ただ、美辞麗句を並べてアリエルに是非来てください、というプレゼンもしません。去年の新卒採用向けの説明会でもそうでしたが、もっと広い視野で、IT業界にソフトウェア技術者として就職する心構えを話したいと思います。

特定のスキル(言語、フレームワークなど)の習得は入社した会社で差がでます。しかし、どんなスキルが将来生きてくるかは運次第です。必要になった時に新しい知識を学べる学習スキルのほうが重要です。ただ、学習スキルの獲得は、どこの会社に入るかはあまり関係なく自分次第です。こう書くと、怠惰な人たちに囲まれたら怠惰になる危険があるので入る会社は大事だ、という反論がありそうです。危険はありますが、社外の勉強会で自分を鼓舞する機会は作れるはずです。そういう意味で自分次第です。

ひとつ自己努力だけで容易に学べないものがあると思っています。良い開発プロセスを経験できるかどうかです。良い開発プロセスとはウォーターフォールできっちりやるという意味ではありません。社内の開発者がどれだけ合理的にプロセスを改善しようとしているかが重要です。会社にそういう文化があるかどうかです。開発プロセスは日々の行動の積み重ねなので、勉強会で話を聞いたり本を読むだけでは限界があります(わかった気にはなれますが)。業界経験の浅い技術者であれば、良い開発プロセスがありそうかどうかで会社を選ぶのは良いと思います。学生に使える見極め方を説明会までに考えておきます。


関連文書:

  • 関連文書は見つからんがな
カテゴリー: 開発 | コメントをどうぞ

ありえるえりあミニ勉強会(Sencha Touch)のお知らせ

このエントリーを含むはてなブックマークはてなブックマーク - ありえるえりあミニ勉強会(Sencha Touch)のお知らせ この記事をクリップ!Livedoorクリップ - ありえるえりあミニ勉強会(Sencha Touch)のお知らせ Share on Tumblr newsing it! Bookmark this on Delicious Digg This

春なので新しいことを始めてみよう!という訳で、巷で話題沸騰中のスマートフォン向け JavaScript フレームワーク「Sencha Touch」をテーマに、ありえるえりあミニ勉強会を開催することになりました。

Sencha Touch なにそれ?という方は、以下のデモサイトを一度ご覧下さい。
http://dev.sencha.com/deploy/touch/examples/production/index.html
(※スマートフォン、もしくは、Chrome、Safari からのアクセスをお願いします)

全6回のシリーズで、以下の内容を予定しています。

# 第1回(4月): Hello Sencha Touch

- Sencha Touch ひとめぐり
- Sencha Touch アプリの開発デモ
- 弊社CTO井上による、スマホアプリのユーザビリティについて(仮)

# 第2回(5月): Sencha Touch Themes

- Sass ひとめぐり
- Compass ひとめぐり
- Sencha Touch テーマシステムの説明
- ハンズオン:オリジナルのテーマを作ってみよう

# 第3回(6月): Sencha Touch Components

- コンポーネントの仕組み
- イベントの仕組み
- プラグインの仕組み
- ハンズオン:オリジナルのコンポーネントを作ってみよう

# 第4回(7月): Sencha Touch Data I/O

- 外部ストレージ(データベースサーバ)連携
- 内部ストレージ(端末・ブラウザ)連携
- テンプレートの仕組み
- ハンズオン:ストレージとの連携機能を作ってみよう

# 第5回(8月): Sencha Touch Packaging

- ネイティブアプリへの変換方法
- ネイティブアプリAPIの利用方法
- ハンズオン:Sencha Touch でネイティブアプリを作ってみよう

# 第6回(9月): ハッカソン & プレゼン大会

- ハッカソン
- オリジナル Sencha Touch アプリの発表
- 打ち上げ

view raw gistfile1.md This Gist brought to you by GitHub.

勉強会はハンズオン形式で、終了時には、参加者各自がオリジナルの Sencha Touch アプリを完成させて頂ければと考えています。

実は、9月末か10月あたりに、Sencha Touch 界隈で有名なあるエンジニアの方を海外からお招きして、ありえるえりあ勉強会に登壇して頂く予定です。交渉は済んでいて、後は詳しい日程を調整する段階です :)
オリジナルの Sencha Touch アプリが完成したら、その人にぜひ自慢しちゃいましょう!

という訳で、第1回を 4/25(水) に開催します。

「ありえるえりあミニ勉強会#1 スマホのWebアプリ作るならSenchaTouchだよねjk」
http://connpass.com/event/421

Sencha Touch に興味のある方がどれ位いるのか不安だったりしますが、、WEB アプリ開発の経験がある方で、作ってみたいスマホアプリのアイデアがある方には最適な内容になるのでは、と考えています。もしくは、jQuery Mobile を試してみたけど、もう少し複雑なことができるものを求めている方とか、、。

初回はハンズオンではなくスライドを使ったプレゼンなので、 Sencha Touch ってどんなものか覗いてみよう、といったお気軽な感じで、ご参加頂ければと思います。


関連文書:

カテゴリー: 開発 | タグ: , , | コメントをどうぞ