be a library developer!
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
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
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✓
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✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
This talk's goal
You knowhow to develop better softwares
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Better?
Showby example
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
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
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
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API: Why
Why is it better?
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API: Because
Because it's more Ruby-ish
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Ruby-ish?
-ish ==Similar to others
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
✓
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
✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
So
Ruby-ish isbetter
Let's validate the example
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Remember
File
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Remember: File
# Setupfile = File.open(path)file.read# Teardownfile.close
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Remember: File
# SetupFile.open(path) do |file| file.readend # Teardown
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
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
Wrap up
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Better
Ruby-ish
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
In other words
Similar to others
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
The goal (reprise)
You knowhow to develop better softwares
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
In other words
You knowwhat is "similar" and do similarly
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✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Key idea
RememberthanImagine
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Remember than Imagine
Knowledge
Remember
???
Imagine
Easy! Di�cult...
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
To remember,
Remember
???
Imagine
Easy! Di�cult...How to get?
Knowledge
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
How to get knowledge?
Experience✓
Ask✓
Observe✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Experience!
Experience ← Do this �rst!✓
Ask✓
Observe✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Key idea
RememberthanImagine
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✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
The goal (reprise)
You knowhow to develop better softwares
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Apply the key idea
Knowledge
Remember
Bettersoftwares
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
To achieve the goal,
What should you experience?
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
What experience?
Knowledge
Remember
BettersoftwaresKnowledge
What experience?
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Rubyist
Knowledge
Remember
BettersoftwaresKnowledge
Rubyist experience!
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Rubyist?
You experienced!
Try
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
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
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Now,
You found "remember" is
"di�cult"
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Di�cult!
Remember!?What is
"Ruby-ish"!?
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Di�cult?
Knowledge
Remember
???
Imagine
Di�cult...Easy!
Di�cult???
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Because
You don't have experience about"Remember than
Imagine"
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
No "remember" experience
BettersoftwaresKnowledge
Rubyist experience!
Remember
No experience
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Your status
Experience✓
Ask (Heard) ← You are here!✓
Observe✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
To achieve the goal,
What should you experience?
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
What experience?
BettersoftwaresKnowledge
Rubyist experience!
Remember
What experience?
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Library developer
BettersoftwaresKnowledge
Rubyist experience!
Remember
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✓
✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Library developer
Considers them many times
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
"Many times"
It's very good exercise
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Exercises
API✓
Document✓
API
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
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
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
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
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
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
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
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
Document
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: ...
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
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Exercises end
We remembered about"what is similar?"
✓
We done "similarly"✓
Do you understand about
"Remember than Imagine"?
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✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
This talk's goal
You knowhow to develop better softwares
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Better
Ruby-ishSimilar to others
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Goal: In other words
You knowwhat is "similar" and do similarly
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Key idea
RememberthanImagine
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Remember than Imagine
Knowledge
Remember
???
Imagine
Easy! Di�cult...
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"
✓
✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
No "remember" experience
BettersoftwaresKnowledge
Rubyist experience!
Remember
No experience
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Experience lib developer
It's very good exercise
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✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
The next step
Use "library developer" experience to other
things
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
For example,
Use it to develop other
softwares
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?)✓
✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Conclusion
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✓
✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Bonus tracks
Similar vs. Innovation✓
No "imagine" communication✓
Similarvs.
Innovation
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?
✓
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
✓
No"imagine"
communication
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!✓
Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Key idea
RememberthanImagine