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".
1. 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
2. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Table of contents
Share this talk's goal✓
Describe key idea✓
Apply the key idea✓
Wrap up & The next step✓
3. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Share the goal
Share this talk's goal✓
Describe key idea✓
Apply the key idea✓
Wrap up & The next step✓
4. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
This talk's goal
You know
how to develop better softwares
5. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Better?
Show
by example
6. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API
context.save
context.circle(50, 50, 10)
context.stroke
context.restore
from cairo gem
7. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API: Point
context.save # <- Point
context.circle(50, 50, 10)
context.stroke
context.restore # <- Point
from cairo gem
8. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API: Better
context.save do
context.circle(50, 50, 10)
context.stroke
end
from cairo gem
9. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API: Why
Why is it better?
10. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API: Because
Because it's
more Ruby-ish
11. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Ruby-ish?
-ish ==
Similar to others
12. 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
✓
13. 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
✓
14. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
So
Ruby-ish is
better
16. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Remember
File
17. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Remember: File
# Setup
file = File.open(path)
file.read
# Teardown
file.close
18. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Remember: File
# Setup
File.open(path) do |file|
file.read
end # Teardown
19. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API (reprise)
context.save # Setup
context.circle(50, 50, 10)
context.stroke
context.restore # Teardown
from cairo gem
20. 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.stroke
end # Teardown
from cairo gem
22. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Better
Ruby-ish
23. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
In other words
Similar to others
24. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
The goal (reprise)
You know
how to develop better softwares
25. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
In other words
You know
what is "similar"
and do similarly
26. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Describe key idea
Share this talk's goal✓
Describe key idea✓
Apply the key idea✓
Wrap up & The next step✓
27. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Key idea
Remember
than
Imagine
28. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Remember than Imagine
Knowledge
Remember
???
Imagine
Easy! Di�cult...
29. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
To remember,
Remember
???
Imagine
Easy! Di�cult...
How to get?
Knowledge
30. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
How to get knowledge?
Experience✓
Ask✓
Observe✓
31. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Experience!
Experience ← Do this �rst!✓
Ask✓
Observe✓
32. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Key idea
Remember
than
Imagine
33. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Apply the key idea
Share this talk's goal✓
Describe key idea✓
Apply the key idea✓
Wrap up & The next step✓
34. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
The goal (reprise)
You know
how to develop better softwares
35. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Apply the key idea
Knowledge
Remember
Better
softwares
36. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
To achieve the goal,
What should
you experience?
37. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
What experience?
Knowledge
Remember
Better
softwares
Knowledge
What experience?
38. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Rubyist
Knowledge
Remember
Better
softwares
Knowledge
Rubyist experience!
39. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Rubyist?
You
experienced!
41. 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
42. 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
43. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Now,
You found
"remember" is
"di�cult"
44. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Di�cult!
Remember!?
What is
"Ruby-ish"!?
45. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Di�cult?
Knowledge
Remember
???
Imagine
Di�cult...Easy!
Di�cult???
46. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Because
You don't have
experience about
"Remember than
Imagine"
47. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
No "remember" experience
Better
softwares
Knowledge
Rubyist experience!
Remember
No experience
48. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Your status
Experience✓
Ask (Heard) ← You are here!✓
Observe✓
49. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
To achieve the goal,
What should
you experience?
50. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
What experience?
Better
softwares
Knowledge
Rubyist experience!
Remember
What experience?
51. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Library developer
Better
softwares
Knowledge
Rubyist experience!
Remember
Library developer
52. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Library developer
Considers about
easy to use API
as a Rubyist✓
✓
easy to understand document
as a library user✓
✓
53. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Library developer
Considers them
many times
54. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
"Many times"
It's very good
exercise
55. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Exercises
API✓
Document✓
57. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API: Getter (reprise)
# Low level
window.get_property("opacity")
# Better
window.opacity
from gtk2 gem
58. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API: Better?
# Low level
window.get_property("visible")
# Better
# ???: hint: "visible" is bool
from gtk2 gem
59. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API: Better
# Low level
window.get_property("visible")
# Better
window.visible?
from gtk2 gem
60. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API: Getter
# Better for record as collection
record["name"]
# Better for record as object
record.name
from rroonga gem
61. 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
62. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API: Init (usage)
require "gst"
# For advanced use
Gst.init("--gst-debug=*:9")
Gst::ElementFactory.make("playbin")
from gstreamer gem
63. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
API: Init (better)
require "gst"
# Make optional
# Gst.init
Gst::ElementFactory.make("playbin")
from gstreamer gem
64. 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
66. 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 gtk2
For OS X:
...
67. 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
68. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Exercises end
We remembered about
"what is similar?"
✓
We done "similarly"✓
70. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Wrap up
Share this talk's goal✓
Describe key idea✓
Apply the key idea✓
Wrap up & The next step✓
71. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
This talk's goal
You know
how to develop better softwares
72. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Better
Ruby-ish
Similar to others
73. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Goal: In other words
You know
what is "similar"
and do similarly
74. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Key idea
Remember
than
Imagine
75. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Remember than Imagine
Knowledge
Remember
???
Imagine
Easy! Di�cult...
76. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
For development
Experience Rubyist for
knowledge
✓
Then remember the knowledge
But it is di�cult because you don't
have experience about "remember"
✓
✓
77. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
No "remember" experience
Better
softwares
Knowledge
Rubyist experience!
Remember
No experience
78. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Experience lib developer
It's very good
exercise
79. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
The next step
Share this talk's goal✓
Describe key idea✓
Apply the key idea✓
Wrap up & The next step✓
80. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
The next step
Use "library developer"
experience to other
things
81. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
For example,
Use it to
develop other
softwares
82. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Develop other softwares
You can remember about
a better bug report
How to reproduce?✓
✓
a better patch
How to commit? (size? message?)✓
✓
83. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Conclusion
Be a library
developer!
84. 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✓
✓
85. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Bonus tracks
Similar vs. Innovation✓
No "imagine" communication✓
87. 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?
✓
88. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
No
We have regular life✓
It's also important that
we improve our regular life
✓
90. 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!✓
91. Be a library developer! - Remember than Imagine Powered by Rabbit 2.0.8
Key idea
Remember
than
Imagine