Your SlideShare is downloading. ×
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Catalyst - refactor large apps with it and have fun!

4,898

Published on

Catalyst - refactor applications with Catalyst, yapc2007

Catalyst - refactor applications with Catalyst, yapc2007

Published in: Business, Technology
1 Comment
4 Likes
Statistics
Notes
  • It is a presentation about Catalyst features and power and not at all about refactoring.
    Why did you call it by 'refactor'? It is a complete different area to cover.

    If you have any document about refactoring project by Catalyst please let me know.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
4,898
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
116
Comments
1
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Catalyst - refactor & have fun – refactor large apps with tE@M (of individuals) and have fun! Adam Bartosik, krakow.pm
  • 2. What we had? 24 Existing datawarehouse with CGI web interface  365 working (mostly) 24h*365  build by many people  Perl supports individuality  Large projects HATE this 
  • 3. What we had? Codebase: different styles of programming /  how perl was growing in-line script / eval { main() } / procedural  split into packages  3 approaches to html templates  3 database wrappers  own date-time counting libs  hacks, hacks, hacks.../ bugs, bugs, bugs... 
  • 4. What we had / we want perl is not too formal a language. Great for  things you need to change, develop the way you've never thought before /what we mostly do/. The bigger a perl project is,  the more rules you need to obey. warnings, strict, perl-critic are just about code  quality, not about design practices XP, test-approach, test-suits - hard to start but  make work easier, safer and faster (changes are welcome!)
  • 5. What we want? make it the best possible way  make it easier  maintainable  learn something new, have fun :) 
  • 6. Choosing new platform hours of talking, advocating  use CPAN instead of self-made libs (opposit to  company politic?) they have better doc  better tested  are still being developed  eg. DateTime is slower than simple $date, but  checks ranges SQL::Abstract can quote everything  TT can move view-logic to templates 
  • 7. web framework needed! we don't like to deal with sessions, url handling,  redirecting (handling simple redirect in cgi is NOT simple) CGI::App is like glue, but we need fundaments  it should be popular enough to have some  support level /work must be done/ so the winner is... 
  • 8. Catalyst ++ Catalyst – similar to Rails  MVC – code / layout / data source  MUST (/should) be split :) directory layout  can start web app in a minute  most of web tasks (sessions, url mapping,  redirects) are one-liners self server to test changes (quick start for  developers)
  • 9. Catalyst -- hard to find good doc (but going better)  too flexible, TIMTOWTDI  what to use for O/R mapping?  which templates?  type of config file?  session storage?  view type?  Rails, Django are easier to start with, have  better doc, marketing, hype, ”proper way to do it”
  • 10. Learning curve ? start-up: first 2-3 weeks are the worst  tutos, docs, advent calendars, Handel, different  approaches, different results logical or a crap we wasting time on? 
  • 11. Learning curve Template Toolkit make life easier:  pass complex data [ {name=>bar}, {name=>baz} ]  to templates, iterations are done in tpl <ul> [% FOREACH row IN rows %]  <li>[% row.name %] [% END %] </ul> easy Ajax integration  can switch totally different layouts (we needed it 3  months later – nice to be possible do this without big hacks) Don't forget Mason => no another lang in tpl 
  • 12. Learning curve DBIx::Class – rapid ORM interface  use when it is worth to use  it is not trivial to rewrite complex SQL queries to  dbix, does not simplify complicated joins (we have datawarehouse, a little more than blog – SQL can be simpler) dbix is powerfull for data updating  $post = $c->model('app::comment')->create({  nick => $c->req->{'nick'}, value => $c->req->{'value'} }); $post->update;
  • 13. Learning curve Easy ”hard CGI things”  dynamic redirect (after save, redirect user to eg.  main page) sub save : Local { my ($self, $c) = @_; # save # redirect $c->res->redirect($c->uri_for('/')); }
  • 14. Learning curve Global ”catch-flag”, eg:  change language  choose output format  app/Controller/Root.pm sub pdf : Regex('.?pdf$') { my ($self, $c) = @_; my $redir = $c->req->path; $redir =~ s/.pdf$//; $c->stash->{output_pdf} = 1; $redirect =~ s{/$}{/index}; $c->forward($redirect); }
  • 15. Learning curve Preserve link layout (when SEO matters)  URL: /news/what-about-perl6.html sub news : LocalRegex('^/(.+).html$') { my ($self, $c) = @_; my $title = $c->req->captures->[0]; # find this article by $title... }
  • 16. Learning curve Still no best answer to all  form/multiform/validation tasks. HTML::Widget  Form::Builder  everything is possible, but typically breaks mvc  MVC: Forms design should be in templates  (view, css, layout), not in controllers, validation rules for input data should be placed in models (see Rails approach)
  • 17. Learning curve Web-services – SOAP, XML-RPC, REST – to  share data with other systems/projects just output xml/yaml/anything  sub xml : Local { $c->res->body(XMLout($data)); # kiss/works } build simple controller with pure TT and xml  template (fast when you must pass defined output, DTD/Schema) many plugins/controllers in CPAN, eg.  C::P::Flavour, see also Catalyst Cookbook / simply ask what kind of abstraction for WS you need
  • 18. Catalyst is social! easy to work together – code is split /by design/  into many parts no global switches/routing rules => less  conflicts in code repository the team can scale: start with 2, growth to 5 or  more
  • 19. Catalyst is social! We must obey some rules & conventions – what,  where, how – work in team need some rules => they make life easier why develop own libs when there are so many  good on CPAN? We can fix bugs, extend them, contribute to open source less own codebase => lower costs  more developers => better approaches  other features => can need them in 2 or 3 months 
  • 20. Benefits after time Months of active developemt but codebase is  still fresh (and it is perl, true!) Clear design  Only ”business application” code  Less to type  We can make deep changes:  multi-level caches for balanced nodes  with pre-caching change layout as often as is needed by marketing :) 
  • 21. Benefits after time Catalyst works like a web-processing  meta-language It is not that (dirty) perl, it is a Catalyst 
  • 22. see in Krakow! Thanks - krakow perl mongers

×