be a library developer!

91
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8 Be a library developer! Remember than Imagine Kouhei Sutou ClearCode Inc. 2013/06/01

Upload: kouhei-sutou

Post on 04-Jul-2015

550 views

Category:

Technology


0 download

DESCRIPTION

Is there a gem author around you? Did you meet any author of the gems used? Did you contact with any author of the gems used on the Internet? Do you think that "the author is cool!", "the author is awesome!" or "I respect the author!"? Do you want to be a gem author? This talk doesn't describe about how to create a gem because it is easy. "gem" is a package of Ruby library (, tool and so on) for easy to install. This talk describes about developing a library that is gem content. This talk is based on my experience as a library developer. This talk describes about how to write codes, how to write documents, release, support and mental set for a better "library developer". I hope that this talk is a trigger for increasing the number of better "library developers".

TRANSCRIPT

Page 1: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Be a library developer!

Remember than Imagine

Kouhei SutouClearCode Inc.

2013/06/01

Page 2: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Table of contentsShare this talk's goal✓

Describe key idea✓

Apply the key idea✓

Wrap up & The next step✓

Page 3: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Share the goalShare this talk's goal✓

Describe key idea✓

Apply the key idea✓

Wrap up & The next step✓

Page 4: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

This talk's goal

You knowhow to develop better softwares

Page 5: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Better?

Showby example

Page 6: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API

context.savecontext.circle(50, 50, 10)context.strokecontext.restore

from cairo gem

Page 7: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Point

context.save # <- Pointcontext.circle(50, 50, 10)context.strokecontext.restore # <- Point

from cairo gem

Page 8: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Better

context.save docontext.circle(50, 50, 10)context.strokeend

from cairo gem

Page 9: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Why

Why is it better?

Page 10: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Because

Because it's more Ruby-ish

Page 11: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Ruby-ish?

-ish ==Similar to others

Page 12: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Is "similar" better?

Similarity makes consistency✓

Consistency makes readability✓

Readability is important to develop better softwares

Page 13: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Is "readability" important?Readability makes maintenability

Maintenability is needed for improving your softwares repeatedly

Page 14: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

So

Ruby-ish isbetter

Page 15: Be a library developer!

Let's validate the example

Page 16: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Remember

File

Page 17: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Remember: File

# Setupfile = File.open(path)file.read# Teardownfile.close

Page 18: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Remember: File

# SetupFile.open(path) do |file| file.readend # Teardown

Page 19: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API (reprise)

context.save # Setup context.circle(50, 50, 10)context.strokecontext.restore # Teardown

from cairo gem

Page 20: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Better (reprise)

context.save do # Setup context.circle(50, 50, 10) context.strokeend # Teardown

from cairo gem

Page 21: Be a library developer!

Wrap up

Page 22: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Better

Ruby-ish

Page 23: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

In other words

Similar to others

Page 24: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

The goal (reprise)

You knowhow to develop better softwares

Page 25: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

In other words

You knowwhat is "similar" and do similarly

Page 26: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Describe key ideaShare this talk's goal✓

Describe key idea✓

Apply the key idea✓

Wrap up & The next step✓

Page 27: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Key idea

RememberthanImagine

Page 28: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Remember than Imagine

Knowledge

Remember

???

Imagine

Easy! Di�cult...

Page 29: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

To remember,

Remember

???

Imagine

Easy! Di�cult...How to get?

Knowledge

Page 30: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

How to get knowledge?

Experience✓

Ask✓

Observe✓

Page 31: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Experience!

Experience ← Do this �rst!✓

Ask✓

Observe✓

Page 32: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Key idea

RememberthanImagine

Page 33: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Apply the key ideaShare this talk's goal✓

Describe key idea✓

Apply the key idea✓

Wrap up & The next step✓

Page 34: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

The goal (reprise)

You knowhow to develop better softwares

Page 35: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Apply the key idea

Knowledge

Remember

Bettersoftwares

Page 36: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

To achieve the goal,

What should you experience?

Page 37: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

What experience?

Knowledge

Remember

BettersoftwaresKnowledge

What experience?

Page 38: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Rubyist

Knowledge

Remember

BettersoftwaresKnowledge

Rubyist experience!

Page 39: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Rubyist?

You experienced!

Page 40: Be a library developer!

Try

Page 41: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Getter

window.get_property("opacity")# What is better API???

from gtk2 gem

Page 42: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Getter (better)

window.get_property("opacity")window.opacity # Better

from gtk2 gem

Page 43: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Now,

You found "remember" is

"di�cult"

Page 44: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Di�cult!

Remember!?What is

"Ruby-ish"!?

Page 45: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Di�cult?

Knowledge

Remember

???

Imagine

Di�cult...Easy!

Di�cult???

Page 46: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Because

You don't have experience about"Remember than

Imagine"

Page 47: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

No "remember" experience

BettersoftwaresKnowledge

Rubyist experience!

Remember

No experience

Page 48: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Your status

Experience✓

Ask (Heard) ← You are here!✓

Observe✓

Page 49: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

To achieve the goal,

What should you experience?

Page 50: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

What experience?

BettersoftwaresKnowledge

Rubyist experience!

Remember

What experience?

Page 51: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Library developer

BettersoftwaresKnowledge

Rubyist experience!

Remember

Library developer

Page 52: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Library developerConsiders about

easy to use APIas a Rubyist✓

easy to understand documentas a library user✓

Page 53: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Library developer

Considers them many times

Page 54: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

"Many times"

It's very good exercise

Page 55: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Exercises

API✓

Document✓

Page 56: Be a library developer!

API

Page 57: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Getter (reprise)

# Low levelwindow.get_property("opacity")# Betterwindow.opacity

from gtk2 gem

Page 58: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Better?

# Low levelwindow.get_property("visible")# Better# ???: hint: "visible" is bool

from gtk2 gem

Page 59: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Better

# Low levelwindow.get_property("visible")# Betterwindow.visible?

from gtk2 gem

Page 60: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Getter

# Better for record as collectionrecord["name"]# Better for record as objectrecord.name

from rroonga gem

Page 61: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Init

require "gst"# ???Gst.init # <- What?Gst::ElementFactory.make("playbin")

from gstreamer gem

Page 62: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Init (usage)

require "gst"# For advanced useGst.init("--gst-debug=*:9")Gst::ElementFactory.make("playbin")

from gstreamer gem

Page 63: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Init (better)

require "gst"# Make optional# Gst.initGst::ElementFactory.make("playbin")

from gstreamer gem

Page 64: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

API: Init (impl)

class << Gst def const_missing(name) init; const_get(name); end def init(*argv) # ...initialize library... class << self remove_method(:const_missing) end; end; end

from gstreamer gem

Page 65: Be a library developer!

Document

Page 66: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Document: Install

Install:

For Debian GNU/Linux: % sudo apt-get install libgtk2.0-dev % gem install gtk2For OS X: ...

Page 67: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Document: Better

Install:

% gem install gtk2

libgtk2-0-dev is installed automatically

"gem install GEM_NAME" is popular install way

Page 68: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Exercises end

We remembered about"what is similar?"

We done "similarly"✓

Page 69: Be a library developer!

Do you understand about

"Remember than Imagine"?

Page 70: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Wrap upShare this talk's goal✓

Describe key idea✓

Apply the key idea✓

Wrap up & The next step✓

Page 71: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

This talk's goal

You knowhow to develop better softwares

Page 72: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Better

Ruby-ishSimilar to others

Page 73: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Goal: In other words

You knowwhat is "similar" and do similarly

Page 74: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Key idea

RememberthanImagine

Page 75: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Remember than Imagine

Knowledge

Remember

???

Imagine

Easy! Di�cult...

Page 76: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

For developmentExperience Rubyist for knowledge

Then remember the knowledgeBut it is di�cult because you don't have experience about "remember"

Page 77: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

No "remember" experience

BettersoftwaresKnowledge

Rubyist experience!

Remember

No experience

Page 78: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Experience lib developer

It's very good exercise

Page 79: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

The next stepShare this talk's goal✓

Describe key idea✓

Apply the key idea✓

Wrap up & The next step✓

Page 80: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

The next step

Use "library developer" experience to other

things

Page 81: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

For example,

Use it to develop other

softwares

Page 82: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Develop other softwaresYou can remember about

a better bug reportHow to reproduce?✓

a better patchHow to commit? (size? message?)✓

Page 83: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Conclusion

Be a library developer!

Page 84: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

FYI

We accept applications about our internship

You can develop a library with us✓

Page 85: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Bonus tracks

Similar vs. Innovation✓

No "imagine" communication✓

Page 86: Be a library developer!

Similarvs.

Innovation

Page 87: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Innovation

Doing "similarly" will not achieve "innovation"

Should all we aspire innovation?

Page 88: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

No

We have regular life✓

It's also important thatwe improve our regular life

Page 89: Be a library developer!

No"imagine"

communication

Page 90: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

No "imagine"Show all u need from the start

Don't omit anything✓

If you emit something,other people need "imagine"

Use your experience for it!✓

Page 91: Be a library developer!

Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8

Key idea

RememberthanImagine