Subscribed unsubscribe Subscribe Subscribe

OSS Gateワークショップ(2016/07/30開催)に参加した感想

クラウドワークスさんにて開催されたOSS Gateワークショップに参加してきました。その際のメモをつらつらと。

どんなイベント?

OSS Gateワークショップ 2016-07-30のイベントのページにいろいろ説明があるので、詳細は割愛しますが、一言で説明すると以下のとおりです。(イベントページより引用)

OSSの開発に参加する」を実際に体験するワークショップです。

これにメンター(ワークショップ初参加でひよこメンター)として参加してきました。

実際の参加者は申し込み人数の半分くらいで、きっとみんなポケモンをどうにかするのに忙しいので(以下略)

参加者の立ち位置

ワークショップでは立ち位置が参加者によって異なります。

  • ビギナー:OSSの開発未経験な人。

会場には普段は組み込み開発をしている人や、Web系の人、フリーランスのエンジニアの人など、様々なバックグラウンドをもっている人が参加していました。「OSSの開発に参加する」を実際に体験する人達です。

  • メンター:OSSの開発経験者。

以前のワークショップに参加した人だったり、普段からOSSの開発が生活の一部になっている人。

  • サポートメンター(仮称):メンターのサポートをする人。

会場をするすると回遊し、通りすがりのメンターとしてビギナーに的確なアドバイスをして去っていく。エリアマネージャーみたいな人。

サポートメンター(仮称)は今回からはじまった制度なんだそうです。

  • 進行役:司会者兼、全体に気配りもする人

イベントの進行を采配しつつ、人が足りていないところにするっとメンターとしてサポートをこなしたりするスーパーマン

どんな風にすすんだのか?

まずは司会進行役のすとうさんから、イベントの説明があった後に、ビギナーさんと相談しつつ、題材となるOSSを決めました。

ここで注意しないといけないのが、メンターの関わっているOSSを薦める(誘導)のはあまりよろしくないかも知れないこと。

よく知っているOSSを薦めてしまうと、(メンターがそのOSSをよく知っているがゆえに)知らずしらずのうちに、わかっていることを先まわりして「答え」として教えてしまい、ビギナーが体験する機会を奪ってしまう可能性があります。

幸いにして、ビギナーの人がRails5試したいです!(ただしWindowsで)ということだったので、そちらの轍は踏まずに済みました。 それでもところどころ、先にこうすればいいんじゃないですか、と言いそうになってしまいそうになったことが何度かありました。

ただ、ぐっとそこはこらえて、ビギナーさんがはまって、これはフィードバックするチャンスポイントだね、というのを暖かく見守るというのをやっていました。

あとはビギナーさんが、作業ログ(これはビギナーさんに都度自分がやろうとしてしていることを細かくメモしてもらう)をつけてなさそうだなーというのがあれば、いまどんな感じですかというのを確認しつつ相談にのったり、記録を促したりというのをやっていました。

ふりかえり

午前中の作業が一段落したときに、「ふりかえり」をしました。これはメンターが別の島(メンター2名、ビギナー4名のグループが1単位)へと席を移動して、担当していなかった別のビギナーさんに作業を説明してもらって、アドバイスをするというものです。

立場の違いによってやることも違います。

  • ビギナー:自分のやったことを知らない人に説明する。OSSの開発では、ネットごしでのみやりとりすることも多いため、暗黙の了解ではうまくいかないことがある。説明を省略してしまうと、空中戦が発生したりと無駄なやりとりをしてしまうことになる。このとき作業ログを活用することで「何をやったのか」あるいは「何をやっていないのか」を伝えることの大事さを実感してもらう。

  • メンター:担当していなかったビギナーさんの説明を聞いて、メンターとしての視点からフィードバックする。

メンターとして、これを実践できているのはいいね!とか、ここはこうしてみるといいよ!というのを伝えるのを意識してみたりしました。

フィードバックしよう

午前中にOSSを動かしてみて、ハマったところや、こうなっていたらいいなという「気になるポイント」をビギナーさんが実際にupstreamにフィードバックしようというのをやりました。

ただ、フィードバックを完遂するところまで一緒にできなかったのがやや心残りではあります。(フィードバックしたい内容を整理するところまではできた)

もちろん時間内にそこまでできてれば良いに越したことはありません。ですが、フィードバックを完了させることを優先してしまうと、ワークショップの後でひとりでもそれができるかは難しいような気がします。(ちょっと言い訳っぽい)

あとは英語になおすだけ、がビギナーさんにとって結構ハードル高いという。。。

ふりかえり再び

また席を移動して、別のビギナーさんとのふりかえりを実施しました。

ビギナーさんによっては、すんなりフィードバックするところまでうまくいけている人がいるのが印象的でした。メンター力の違い?

「英語つらい」にどう答えるか

これは私も英語つらいので悩ましいところです。

こんな感じのつたない英語でも大丈夫だよ、という具体例を説明したりしましたが、それでよかったのかどうか。

さいごに

他のメンターは2人のビギナーの面倒をみていましたが、私は参加人数の都合で、1人のビギナーの面倒を主にみていました。初めてのメンターとしての参加だったので、両隣にビギナーさんがいたら十分なサポートができたかはあまり自信がありません。

とはいえ、機会があればまたメンターとして参加してみるのもいいかなーと思った次第でした。(楽しかった) サポートメンター制度は次回以降も採用とのことなので、メンターをやるのにちょっと自信がないんだけど、という人でも安心です。(ふらりと現われて、的確なアドバイスをして去っていくので)

どうでもいいことですが、私以外はみなポケモンマスターだったのが印象的でした。みんな好きだなポケ(以下略)

sourceforge.netミラーの状況について

はじめに

C/C++のテスティングフレームワークにCutterというものがある。これはsourceforge.netにてホスティングされているプロジェクトである。 このプロジェクトでは年に1回くらいの頻度で新しいバージョンをリリースしている(場合によっては年2回ということもある)

sf.netのここ最近のやらかしでミラー減ってるぞというのを耳にした。 ちょっと不安になって、tar.gzのミラー状況をみてみた。

リリースバージョンとミラー状況

1.2.5 12サイトでミラーされている。 f:id:kenhys:20160329000132p:plain

1.2.4 13サイトでミラーされている。 f:id:kenhys:20160329000141p:plain

1.2.3 2サイトでミラーされている。 f:id:kenhys:20160329000152p:plain

1.2.2 1サイトでミラーされている。 f:id:kenhys:20160329000205p:plain

1.2.1 1サイトでミラーされている。 f:id:kenhys:20160329001226p:plain

1.2.0 1サイトでミラーされている。 f:id:kenhys:20160329001240p:plain

2世代前からミラーサイトが激減しているのがわかる。

さいごに

1.2.2以前はもうsourceforgeにしかない。1.2.2は2012年10月リリースなので数年前といえばそうなのだが、古いアーカイブもきっちりミラーされているという勝手な思い込みは幻想でしかなかった。 ほかのホスティングサイトならどうだというのは調べていないので、sf.netが他と比べてどうだとかいうつもりはない。 あくまで、現状こんな感じなのかという気付きをメモしたまでである。

Groonga on ARMパッケージの最新版(5.1.1)がp.d.oに入りました

しばらく前から、armhf向けにDebian/GNU Linux unstableのパッケージを実験的にひっそり提供していました。

apt-lineに以下のようなエントリを書いておけば、aptでインストールできるようにしていた、ということです。

deb http://packages.groonga.org/armhf unstable main

この度、現時点の最新版であるgroonga 5.1.1とgroonga-normalizer-mysql 1.1.0がunstableにはいったので、今後はそちらを使うようにしてください。 つまり、/etc/apt/sources.list.d/以下のapt-lineの設定はいらなくなります。

ちなみに、testingにも入ったのでうまくいけばstretchにも同じものか、より新しいバージョンが提供されることになります。多分。

ながらく更新できてなくて4.0.6のままだったので、ようやく追いつきましたね。

Groongaのコンパイル時にmax-gcse-memoryを指定してみた

はじめに

Groongaをコンパイルしているとこんな警告がでていることに気づく。

warning: const/copy propagation disabled:

これはGCSEというやつで、最適化が無効になったという警告である。 無効になってしまったんなら、そこはなんとか有効にしてあげたくなるというのが人情というものである(適当)。

Optimize Options - Using the GNU Compiler Collection (GCC) を読むと、必要なメモリを確保できなくて最適化を諦めたとある。 ならばパラメーターを明示的に指定してもうちょっとGCCに頑張ってもらおう。

そのためのオプションもある。それがmax-gcse-memoryである。

--param max-gcse-memory=

デフォルトが128MBらしい。それを超えてしまうと、断念してしまうようだ。 デフォルトの値を超えることってそんなにはないだろうが、それをGroongaさんは超えてしまった。

max-gcse-memoryを指定してコンパイル

適用するのにlib/Makefile.inにひとまず直に書いて試した。

CFLAGS = @CFLAGS@ --param max-gcse-memory=268435456

これによってコンパイル時間が増えるだろうと思ったらせいぜい1割増程度だった。

適用前

V=1 make 2>&1  258.80s user 18.57s system 96% cpu 4:46.33 total

適用後

V=1 make 2>&1  269.90s user 32.32s system 97% cpu 5:10.68 total

ベンチマークをしてみる

どれくらい効果があったのか、ベンチマークをとってみることにした。 幸いにしてGroongaにはbenchmarkが付属している。この結果を比較すればよいはずである。

  • Groonga 5.1.1
  • Intel Core i5-2467M CPU @ 1.60GHz
  • メモリ8GB
  • 10回試行し、その中央値をそれぞれプロット
  • Original versionというのが普通にコンパイルした版
  • Modified versionというのがmax-gcse-memoryをカスタマイズした版

f:id:kenhys:20160104204539p:plain

f:id:kenhys:20160104204532p:plain

f:id:kenhys:20160104204537p:plain

f:id:kenhys:20160104204533p:plain f:id:kenhys:20160104204534p:plain

f:id:kenhys:20160104204535p:plain f:id:kenhys:20160104204536p:plain

見事にほぼどんぐりの背比べである。なかには変更後のほうが妙に遅いケースもみられる。

まとめ

片手間にとったベンチマークとはいえ、残念ながらちょろっとコンパイルオプションを変更して速くなるかというと、そうでもなかった。 そんなに甘くないのが現実である。

MIYABIの広告配信問題について

FREETELから発売されたSIMフリー端末、MIYABIに広告配信問題が浮上した。

【重要なお知らせ】SAMURAI 雅 予期せぬ広告配信について | freetel

プリインストールされたアプリケーションが中国語の広告を配信してくれるらしい。 さすがにそれはどうなんだということで、「Beauty Makeup」は次回アップデートで削除されるらしい。

こいつは結構権限が怪しいので速攻無効にしていたんだけど、どんなもんかちらみしてみた。

package:com.gangyun.makeup として端末にインストールされているのが該当する。

apkをばらしてsoとかjarを適当にリストアップしてみた。

  % find . -name '*.so'
  ./assets/snowfox.so
  ./lib/armeabi/libGangyunFace.so
  ./lib/armeabi/libBeautyFeature.so
  ./lib/armeabi/liblocSDK3.so
  ./lib/armeabi/libDetectFeature.so
  ./lib/armeabi/libweibosdkcore.so
  ./lib/armeabi/libgybeauty420sp.so
  % find . -name '*.jar'
  ./assets/gdt_plugin/gdtad.jar

weibosdkってのはたぶん、 sinaweibosdk/weibo_android_sdk · GitHubだと思う。中国版twitterみたいなやつのSDKっぽい。

今回問題となった広告の配信に使われたのは多分gdtad.jar。 广点通http://e.qq.com/index.shtmlってとこの広告プラットフォームに対応するプラグインのようだ。

ぐぐってみると 无标题文档みたいにKeymobかBaiduかGdtのどれかを使え、とあるくらいにはそこそこ使われているものなんだろうか。

このへんと通信するっぽい。

バックグラウンド通信に云々ついてはまた別問題っぽいね。

なろうのブックマークカテゴリ一覧を取得するには

favnovelmain/listに遷移すれば以下のようにして取得できる。

require 'mechanize'
require 'yaml'

agent = Mechanize.new
agent.user_agent = 'Narou Browser'

(ログインはできているものとして省略)

page = agent.get('http://syosetu.com/favnovelmain/list/')
page.search("div[id='sub']/ul[class='category_box']/li").each do |li|
  p li.text
end

なろうにMechanizeでログイン

Rubyでログインするサンプルスクリプト

アカウントは別のYAMLに書いてあるとする。

% cat account.yaml
email: hoge@example.com
password: mypassword

実際のスクリプトはこんな感じ。

require 'mechanize'
require 'yaml'

agent = Mechanize.new
agent.user_agent = 'Narou Browser'

params = YAML.load_file('account.yaml')
  
#agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
agent.ca_file = 'ssl.syosetu.com.crt'
page = agent.get('https://ssl.syosetu.com/login/input/')
next_page = page.form_with do |form|
  form.id = params['email']
  form.pass = params['password']
end.submit
p next_page

事前にサイトの証明書をブラウザからエクスポートしておく。agent.ca_fileに指定しているのがそれ。