トピックブランチ的にワーキンググループを使う弊害

最近(というかここ2,3年くらい)今の職場で、新しい挑戦はセクションの壁を超えてトピックブランチ的にワーキンググループを作って自主的に議論して上に提案するというスタイルが普通になった。

これはやる気がある人が積極的に議論に加わるので、調子がいいし議論も生産的で楽しい。

が、あるワーキンググループの議論の中で「自分はその(別の)WGに参加してないからコンテクストが理解出来ない」みたいなことを言われたのでちょっと考えてしまった。

トピックブランチは他に影響を与えないで新しいことを試すので、WGも参加者以外には基本的に見えない。だからそういう発言になってしかるべきだし、それはあり方として正しい。一方で全然ワーキンググループに参加しないヒトは振る舞いや思想がメンテナンスブランチのそれに近くなってきているのではないかと。そもそも保守的な考えのヒトが多いからほっといたら保守化するわな、そりゃ。

昔はセクションのトップがそういうヒトにもある程度成長のためのチャレンジを促していたような気がするけど、プロジェクト色が強くなるとどうしても自主的に動けるかどうかが重要視されるよなぁと。

まぁサイエンティストだったら当たり前の感覚だろうけど、企業研究者の8割は単なる労働者でしょ?そういう状況で、こういうやり方が組織論的に正解なのかはよくわからん。

pybelでanilineをnitrenium ionに変換する

なぜnitrenium ionにする必要があるのかはここではふれないので、ココらへんを見てください。

import pybel
smarts = pybel.Smarts("c[#7]([#1])[#1]")

mol = pybel.readstring('smi', 'c1ccccc1N')
mol.make3D()
matches = smarts.findall(mol)
mol.OBMol.DeleteAtom(mol.atoms[matches[0][2]-1].OBAtom)
mol.OBMol.SetTotalCharge(1)
print mol.write('mol')

分子に修飾をしたい時はpybelにメソッドがないので、OpenBabelのオブジェクトを直接触る必要があるのであまりスマートではない気がする。

legit / Git for Humans

gitにわかりやすい名前のコマンドを追加してくれる。

使いそうなものから

git switch {branch}

checkoutよりもswitchのほうがスイッチした感が得られますね。

git branches

各ブランチが色付きで表示されつつ、それがリモートにpublishされているかどうかもあわせて表示されるので便利。

git graft {branch}

Merge unpublished branch into current branch, then remove it.

ってなってるんだけど、トピックブランチを立ててマージした後に残ったブランチを削除するのも面倒なので こっちのコマンドのほうがいいのかなと思うんだけど。そういう用途向けじゃないのかな。

git sprout {branch}

現在のブランチから新しいブランチを作る

git publish {branch}

リモートにブランチをパブリッシュ。

トピックブランチはリモートにpushしないのであまり使わないけど便利そう。

git unpublish {branch}

逆にこっちをgitのコマンドで実行するやり方がわからない。

git harvest {branch}

よくわからん。というかrebaseをきちんと理解してないのを理解したので調べた

結果、単独開発の場合はあまり必要ない感じだった。

git sync

複数人で作業することはないのでほとんど使わなさそう

ProductName 入門Git
濱野 純(Junio C Hamano)
秀和システム / 2310円 ( 2009-09-19 )


Python modules for Humans

for Humansなモジュールが気になったのでPyPiを探してみた

paperはちょっと気になるが、開発中。

大手メーカーが作らない「B級」iPhoneゲームが売れる50の理由

なかなか、面白かった。

真面目な内容を期待すると裏切られた感が得られるが、行間とか内容の本質を考えながら読めばそれなりに得られるものがあると思う。

僕の場合は参考になることが多かった。

Bootstrap2を利用したイイカンジのサイト

最近bootstrap2を使い始めていて、FlaskとかExpressとかのスケルトンとして使えたら便利だろう(職場のサイトでは必要十分な気がする)なーとbootstrap2を中途半端に利用していい感じに仕上げているサイトを探している

wordpressだといくらでもチュートリアルが見つかるんだけど、bootstrapはなかなか見つからないのはなんでじゃろかねーとか思いながらBuilt With Bootstrapを見ながらヨサゲなサイトを探していた。

bootstrapのテーマを売っているサイトもみつけた。

グリッドデザインに使えるツールいろいろも役に立ちそうな気がするが。

個人的にはFlask+bootstrap2+Brunchですぐに開発できるようにしておけば最高なんじゃないかなぁと思っているので、今度のつくる会ハングマンのサンプルをこの構成で書きなおしてみるっていうのも面白いかなと。

ProductName JavaScript Web Applications
Alex Maccaw
Oreilly & Associates Inc / 3020円 ( 2011-08-30 )


Brunchでtwitter検索

Brunch(Backbone.js)の練習を兼ねて、Backbone.js で HTML の View と Model を分離してみるよのサンプルをBrunchで。

まずは、スケルトン作成

$ brunch new brtwitter

watchしつつ、ファイル更新を検知してコンパイルしつつ、サーバーを3333番portで起動する

$ cd brtwitter
$ brunch watch --server
[19:23:17]: [Brunch]: application starting on http://0.0.0.0:3333.
[19:23:17]: [Brunch]: compiled.

あとはapp以下のファイルをいじる。

models/tweet.coffee

モデルをつくる。

class exports.Tweet extends Backbone.Model
  initialize: ->
    @set
      domId: "tweet_#{@cid}"

collections/tweet_list.coffee

コレクションを設定。ここまでは簡単

{Tweet} = require 'models/tweet'

class exports.TweetList extends Backbone.Collection
  model: Tweet

views/tweet_list_view.coffee

{TweetView} = require 'views/tweet_view'
{Tweet} = require 'models/tweet'
tweetListTemplate = require './templates/tweet_list'

class exports.TweetListView extends Backbone.View
  id: 'tweets-view'

  initialize: ->
    app.tweetList.bind 'add', @addOne
    $('body').append @render().el

  render: ->
    $(@el).html tweetListTemplate()
    @

  addOne: (tweet) ->
    view = new TweetView model: new Tweet(tweet)
    $(@el).find('#tweets').prepend view.render().el

views/templates/tweet_list.eco

テンプレートは今回ecoをデフォルトのecoを使った。個人的にはjadeのほうが好きなのでそのうちJadeに乗り換える。

views/templates/tweet_list.eco

<ul id="tweets"></ul>

views/tweet_view.coffee

同様にtweetも

tweetTemplate = require('./templates/tweet')
class exports.TweetView extends Backbone.View
  id: 'tweet-view'
  tagName: 'li'

  initialize: ->
    @model.view = this

  render: ->
    $(@el).html tweetTemplate tweet: @model.toJSON()
    @

views/templates/tweet.eco

<div class="twtr-avatar">
  <div class="twtr-img">
    <a href="http://twitter.com/intent/user?screen_name=<%= @tweet.from_user %>" target="_blank">
      <img src="<%= @tweet.profile_image_url %>">
    </a>
    <p><%= @tweet.text %></p>
  </div>
</div>

assets/index.html

bodyタグの間に入れとく

<input id="searchTxt" type="text" value="backbone.js" />
<button id="searchBtn">search</button>
<div id="tweetContainer">searchボタンを押すとTwitterから検索してくるよ!</div>

initialize.coffee

最後に初期化する。

{BrunchApplication} = require 'helpers'
{MainRouter} = require 'routers/main_router'
{TweetList} = require 'collections/tweet_list'
{TweetListView} = require 'views/tweet_list_view'

class exports.Application extends BrunchApplication
  initialize: ->
    @router = new MainRouter
    @tweetList = new TweetList
    @tweetListView = new TweetListView

    $("#searchBtn").click (e) ->
      jqxhr = $.ajax
        dataType: "jsonp"
        url: "http://search.twitter.com/search.json"
        data: { q: encodeURI( $( "#searchTxt" ).val() ) }
        jsonp: "callback"

      jqxhr.done (data) ->
        _.each data.results, (result) ->
          app.tweetListView.addOne(result)

window.app = new exports.Application

ファイル構成はこんな感じ。home_*は必要ないけどスケルトンで作成されたのでそのまま放ってある。

.
├── assets
│   ├── images
│   └── index.html
├── collections
│   └── tweet_list.coffee
├── helpers.coffee
├── initialize.coffee
├── models
│   └── tweet.coffee
├── routers
│   └── main_router.coffee
├── styles
│   └── main.styl
└── views
    ├── home_view.coffee
    ├── templates
    │   ├── home.eco
    │   ├── tweet.eco
    │   └── tweet_list.eco
    ├── tweet_list_view.coffee
    └── tweet_view.coffee

backbone.jsってviewがファットになんのね。

静岡デベロッパーズつくる会#5をやります

4/8(sun)にいつものコミュニティfで。

1332706933

久しぶりにGAEでなんか作ろうかなと思っている。とかいいつつjQuery Mobileにはしるかも。

今日の畑(120324)

明け方まで降っていたのだが昼には晴れたので、種まきをすることにした。風が強い日だったが、娘と一緒に畑を耕した。

1332667917

ニンニクは順調。

1332667919

人参と大根の種を撒いた。畑仕事の後にいけたにさんでお酒を買うついでに畑の話をしてたら、春撒き大根は結構チャレンジングらしかった。まぁ種はかなり余っているから上手くいかなかったら秋撒きにまわして、区画も他のに回せるから、今回は初大根にチャレンジしてみる。

1332667922

スナップエンドウの花も咲いてたので、来月の終わりから収穫シーズンになりそう。

1332667924

brunch(backbone.js)を触りまくってたら日が暮れた

Brunchはいまだにお作法がよくわからん。やっぱbackbone.jsから地道にステップアップしていくのがいいのか?

ProductName Developing Backbone.Js Applications
Addy Osmani
O'Reilly Media / 2760円 ( 2012-07 )


さて、クライアントサイドMVCってことはクライアント側に小難しい処理が移行しているってことですよね。加えてHTML5的な潮流はマークアップじゃなくてCSSでデザイン周りをやれというimplicitな意図を感じるわけです。さらにclosureみたいなアプリケーション構築用のライブラリの存在を考えると、jQueryでプラグイン入れまくりのスパゲッティライクなフロントエンドがどこまで許されるのかなぁと思ったりする。

ふとWOMASという言葉がよぎった。

Webservice Of Maintainability And Sustainability