Who?
godfat (Lin Jen-Shin)
2001~2004: C
2004~2009: ActionScript
2005~2008: C++
2006~2014: Ruby
2007~2014: (learning) Haskell
How I decide use or create...
- What problem?
- Similar problem before?
- y: Has it been solved? (&solved?)
- y: Solution good enough?
- y: JUST USE
- n: Could we accept?
- y: JUST USE
- n: Could we afford building one?
- n: Do we really have this problem? (&problem?)
- n: Was there a bit similar problem?
- y: GOTO *solved?
- n: GOTO *problem?
- What problem?
- Similar problem before?
- y: Has it been solved? (&solved?)
- y: Solution good enough?
- y: JUST USE
- n: Could we accept?
- y: JUST USE
- n: Could we afford building one?
- n: Do we really have this problem? (&problem?)
- n: Was there a bit similar problem?
- y: GOTO *solved?
- n: GOTO *problem?
- What problem?
- Similar problem before?
- y: Has it been solved? (&solved?)
- y: Solution good enough?
- y: JUST USE
- n: Could we accept?
- y: JUST USE
- n: Could we afford building one?
- n: Do we really have this problem? (&problem?)
- n: Was there a bit similar problem?
- y: GOTO *solved?
- n: GOTO *problem?
- What problem?
- Similar problem before?
- y: Has it been solved? (&solved?)
- y: Solution good enough?
- y: JUST USE (rack)
- n: Could we accept?
- y: JUST USE (webmock)
- n: Could we afford building one?
- n: Do we really have this problem? (&problem?)
- n: Was there a bit similar problem?
- y: GOTO *solved?
- n: GOTO *problem?
- What's wrong with the solution?
- Could we accept this problem?
- y: JUST USE (bacon)
- n: Is working around it easy?
- y: JUST USE (rest-client)
- n: Is there other alternatives?
- y: GOTO *solved?
- n: Could we afford building one?
Cost =
- (P) Understanding the problem
- (S) Understanding the solution
- (I) Implementing the solution
- (D) Debugging the implementation
Use =
- (P) Understanding the problem
- (S) Understanding the solution
- (0) The illusion of 0 cost -- might still need to rewrite
- (D) Debugging the implementation
- (M) Misunderstanding the problem/solution/implementation
- The joy of creating.
- The joy of solving problem perfectly.
- The joy of not debugging other people's code.
- The joy of being fearless and doubtless.
- ⬆ Well, that must be my bug
- ⬆ I don't have to keep bugging support
- ⬆ Which is sometimes hopeless
Programming shall be happy
Solve the problem, and be happy
My very first gem -- ludy
- First commit: 2007-04-23 14:14:34 +0000
- Random stuffs -- like facets or activesupport
- C++ preprocessing
- Allow customizable partial HTML
- Use hpricot, libxml-ruby, or nokogiri
- Borrowed Drupal's regexp for autolinking
- I guess now we all use Markdown instead...
Pagination -- pagify
- will_paginate was too intrusive and not flexible
- There's no kaminari (don't recommend, either)
- For activerecord 2 and dm-core
- For rails 2 and innate, and ramaze
- No longer my business...
Thumbnails -- thumbo
- The old chaotic rails plugins days...
- Namely acts_as_attachable, attachment_fu, etc
- There's no paperclip (ok)
- carrierwave (fog is bad), dragonfly (fog is bad)
- Why not the official aws-sdk?
- We needed mogilefs-client
- No longer my business...
- capistrano (switchtower) was awfully slow
- net-ssh and other friends, seriously, why?
- Not sure how to use vlad
- Just use the ssh command from openssh
- No longer my business...
- Stolen from dm-dev (not a gem)
- Strip trailing whitespace
- Normalize newlines
- Transcode big5
- Fix file permission (from FAT32)
- No longer take files from Windows...
Data sharing -- shere
- heel was using thin, slow as hell
- nginx to the rescue
- create tmp nginx config
- I didn't share a lot of files as before...
Net receive -- nr
- Why there's no reverse nc?
- nc does have listen mode...
- Now I am using socat
- There's no HTTPS support for cool.io
- Built-in HTTP client didn't have a good API
- Who cares about cool.io now?
- rails' default serialize is yaml based, which is slow
- Auto-detect encoding (yaml or marshal)
- Auto-convert encoding (yaml or marshal)
- Smarter and better dirty tracking!
- rails accepts custom codec now,
and I don't want to fight with it again!
- Make dm-core like activerecord
- Model source codes generation
- Manipulating existing database would be easier
- I am not sure if dm-core is going anywhere
- eventmachine thread pool for rainbows
- eventmachine is not going anywhere, and please just use nginx
- Synchronizing between different strategies
- For threads, fibers, events, etc.
- Wrong approach
- Tell rails respect rack's spec, i.e.
env['rack.logger']
- So we don't see some weird inconsistency
- This was actually a hack... could we fix rails?
- rack handlers for unicorn family
- So `
rails s
` would work for them
- Try to guess the config located at config/unicorn.rb, etc
- Replay the request from a host to another host
- Could also be served as a reverse proxy (not implemented yet)
- Open the EDITOR for a gem
- Detect versions, files
- gem-edit was already taken
- grep or ag for a gem
- Detect versions, files
- grep from Gemfile (like a global search) (not implemented yet)
- No more rfacebook or facebooker
- Only for Graph API
- As lightweight as possible
- I moved the development to rest-core and rest-more
API clients builder -- rest-core
- Support callbacks and futures
- With em-http-request or rest-client with threads
- As flexible as possible
- Quite complex internally...
Clients collection -- rest-more
- Using rest-core to build clients
- Support Facebook, Twitter, etc
- Has rails helpers
- Facebook support was ported from rest-graph
net/http wrapper, rest-request
- Not yet implemented
- Fork from rest-client
- Remove culprits (0) (1)
- Remove unnecessary features (no way to pass some params)
- Haven't got a time to do this,
and motivation is not strong enough,
as patching rest-client does work
bacon fork
- Not yet implemented
- Remove unnecessary features (this.is.meaningless)
- Add a diff output
- Haven't got a time to do this,
and motivation is not strong enough,
as patching bacon does work
- I picked rr over mocha and flexmock
- Then rr exceeded my pain threshold
- 32x times faster (750s vs 23s) than rr for running rib tests
- I hope I have time to finish the doc and release 1.0 soon
- Thanks for rails_admin for the motivation to make muack better
Extending ripl -- ripl-rc
- ripl extension collection
- ripl doesn't really fit my ambition
ripl redo -- rib
- Just like ripl but easier to extend for some plugins
- Namely
Rib.anchor
for nested shells
- We need a better readline on JRuby!
- rib tests for JRuby has a lot of readline issues
- Introduce
Readline.line_buffer=
- Has a small C extension interacting readline extension
- Used for autoindent for rib
- Works fine for Linux
- Works on older Mac
- Broken on newer Mac, no idea why?
- Do not work on Mac's editline
- Use rib on Heroku easily
- It's broken right now... use `
heroku run rib all auto
` instead
Pico web library -- jellyfish
- sinatra exceeded my pain threshold
- Keep it minimal, around 250 LoC
- Thus much faster than sinatra
- Much less magic than sinatra
- Not sure about cuba
Pico web framework, fishtank
- Integrate jellyfish, sequel, rack, rake, bacon, muack, etc
- Not yet have time to extract this from private source
Blog + Wiki -- logi
- Git based
- Static site generator
- Minimal dependencies, jekyll is out
- Should probably checkout zenweb, too
- Not yet done...