LGPLに関する追記

2012 年 5 月 15 日

以前投稿したLGPLとAndroidの関係に関するスライドが、某所で叩かれていたようなので反応してみます。

個人的にはLGPLが嫌いなわけではないので、勘違いされているのが非常に残念です。

LGPLの恩恵に与っている身としては、間違えた使い方はやめましょう という話なのですが、誠意がないスライドだとか言われてしまっているので、悲しいです。

もちろん当人はライセンス条項は熟読しているとは思いますが、説明時にライセンス条項一つ示さずに私見で大丈夫って書いてしまったり。抜け穴的な利用方法を説明する人のほうが、よほどLGPLに対して誠意がない気がします。ってこういう反応しちゃうところが僕も大人じゃないなぁ。

スライドのタイトルは結果的に釣り餌になってしまったみたいですが、内容はjarで頒布されているLGPLのライブラリをそのまま使ったらLGPLの影響を受けてしまうというものです。
もちろん僕自身もLGPLをきちんと理解できているわけではないので、間違いの指摘は非常にありがたいです。

ただ、「別機能で提供してIntent利用すれば良い」とか「soでビルドして添付すれば良い」とかは、そもそも論点が違います

また、一般的な方法ではなくあの手この手考えて使わなければならない時点で、とても相性が良いとは到底思えないので、やはり「相性は悪いが抜け道考えれば使えないわけではない 」程度の認識があっているように思います。
そういえばjarのライブラリをどうやってsoでビルドするんだろうか。C++で書き直せってことかなぁ???

僕の勉強不足は否めないので、当然間違いもあると思うのですが、「君の意見は間違えているよ」では、結局何がどう間違えているのか、僕も含め他の読んだ人もわからない。
なので、もう少し掘り下げて「条項のココの解釈が間違えているよ」とか「過去の事例ではこうだよ」とか指摘して頂ければと思います。

せっかくスライドのリンクにブログのURLとか書いてあるので、他所で批判するよりも直接教えて頂ければ嬉しいです。その上で結果をフィードバック出来れば、より良い資料にもなるし、非常に重要なFSFの活動に貢献できますよ。

あえて某氏の意見を借りて言うなら「LGPLなどのライセンスに関する解釈はソフトウェアエンジニアにとって非常に重要であるから、自分の私見と異なるからといって、切り捨てるのは自分の首を締めるだけだと思うよ。」といったところでしょうか。他者の意見を鵜呑みにしないという姿勢には賛同します。

まあ折角色々指摘があったので、今回はAndroidだけじゃなくiOSも含んでもう少し掘り下げてみます。文章が多いのでスライドにはしません。内容に関するご指摘よろしくお願いします。

この投稿の続きを読む »

YomeWnn Ver.1.3.3 リリースしました

2012 年 1 月 29 日

YomeWnn Ver.1.3.3

予測変換時の学習内容が通常変換に悪影響を及ぼしていたので修正してみました。
もし問題等ありましたら連絡いただけると助かります。

YomeWnn Ver.1.3.0 リリースしました

2012 年 1 月 14 日

YomeWnn Ver.1.3.0

予想以上に旧来のフリック入力を実装して欲しいという要望が多かったため、試験的に旧来のフリック入力に対応しました。
設定からフリックタイプをレガシーフリックにすることで利用可能です。

p.s.
旧来のフリックとかレガシーフリックという呼び方をしているのが抵抗の名残です。w

YomeWnn Ver.1.2.2 リリースしました

2012 年 1 月 11 日

YomeWnn Ver.1.2.2

今回はGoogleサジェストの仕様変更への対応です。
昨日気づいたんですが、いつの間にかGoogleサジェストの使用が変更されていて、予測変換が使用出来なくなっていました。

p.s.
作るって言ってから音沙汰なしの放置系ゲームですが、実装しようとしていた機能の大半が「ゆけ!勇者」に実装されていることがわかったので、もう少し内容を練ってから作ることにしました。

AndroidアプリとLGPLの相性に関するスライドをアップしました。

2011 年 12 月 15 日

AndroidアプリとLGPLの相性に関するスライドをアップしました。

AndroidアプリとLGPLの相性に関して

View more presentations or Upload your own.

先日、android-bindingに関する記事を書いた後に、android-bindingのライセンスがLGPLv3だった事に気が付きました。

実はLGPLに関しては、その名前が出るたびに調べなおしたりしていますが、その度にグレーなカンジだなぁとか思っていました。

そんな中、古いページですがThe LGPL and Javaを見つけたことで、自分の中で大体結論が出たので、slideboomの試験も兼ねてスライドを作成してみました。

WordTwitテスト2

2011 年 12 月 15 日

Bit.lyで動かしてみる

WordTwitテスト

2011 年 12 月 15 日

ツイートされるかな?

WordPressのプラグインを追加してみました

2011 年 12 月 15 日

昨日WordPressを久しぶりにアップデートしたんですが、プラグインもいくつか入れてみました。

  • Google Analytics Dashboard
  • Ultimate Google Analystics
  • WordTwit
  • WP Social Bookmarking Light
  • XML-Sitemap

android-binding使ってみた

2011 年 12 月 14 日

ちょっと興味があったのでandrooid-binding使ってみました。

参考にしたサイトは以下の通りです。

このサイトで使われているのは「android.binding.0.2.jar」なので、今回は現時点で最新の「android-binding-0.45-update.jar」を使ってみます。
android-binding

説明の前にまずは今回触ったファイルを貼付け。

BMIApplication.java

public class BMIApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        Binder.init(this);
    }
}

BMIActivity.java

public class BMIActivity extends Activity {

	private BMIPoJoViewModel viewModel = new BMIPoJoViewModel();

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View v = Binder.bindView( this, Binder.inflateView( this, R.layout.main, null, false ), viewModel );
        setContentView( v );
    }

}

BMIPoJoViewModel.java

public class BMIPoJoViewModel implements PojoViewModel {

	private PojoViewModelHelper helper = new PojoViewModelHelper();

	public final StringObservable height = new StringObservable();
	public final StringObservable weight = new StringObservable();
	public final DoubleObservable bmi = new DoubleObservable(0);

	@Override
	public PojoViewModelHelper getHelper() {
		return helper;
	}

	@Override
	public void notifyPropertyChanged( String propertyName ) {
		helper.notifyPropertyChanged( propertyName );
	}

	public Command Calculate = new Command() {
        @Override
        public void Invoke(View arg0, Object... arg1) {
        	double buf = Double.parseDouble( weight.get() ) / Math.pow( Double.parseDouble( height.get() ) / 100.0, 2 );
        	bmi.set( buf );
        }
	};

}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:binding="http://www.gueei.com/android-binding/"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Height" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        binding:text="height" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Weight" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        binding:text="weight" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        binding:text="bmi" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="計算"
        binding:onClick="Calculate" />

</LinearLayout>

AndroidManifest.xml

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:name=".BMIApplication" >
    <activity
        android:label="@string/app_name"
        android:name=".BMIActivity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Binderの初期化はBMIApplication内で行なっています。AndroidManifest.xmlへの記述を忘れないようにしてください。

Binder.init(this)

次にビューのバインドに関してですが、setAndBindContentViewが@deprecatedになってしまっているので、bindViewを使用してみました。これで使い方あってるのかなぁ。

View v = Binder.bindView( this, Binder.inflateView( this, R.layout.main, null, false ), viewModel );
setContentView( v );

参考にしたサンプルから、BMIPoJoViewModelを大きく変えてしまいました。
StringObservableとDoubleObservableを使ってEditTextとバインドしています。
さらに、CalculateをCommandに変更しました。
現在のバージョンではViewModelのように双方向のバインドができているようです。
onTextChangedも拾えているので、試しに身長に175と入力した場合、ログには以下のように出力されます。

onTextChagnged, mV=null	 arg0=1
onTextChagnged, mV=1	 arg0=17
onTextChagnged, mV=17	 arg0=175

BMIに関しても値をセットすることでViewに反映されます。notifyPropertyChanged(“BMI”)のような記述は行なっていません。

bmi.set( buf );

ちょっと使っただけなので使い方が間違っているかもしれませんが、なかなか面白いライブラリですね。
これってFragmentでも使えるのかなぁ。

SyntaxHighlighter Evolved入れてみた

2011 年 12 月 14 日
public class hoge {
        public void hoge() {
        }
}