Your SlideShare is downloading. ×
0
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
TT
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

TT

250

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
250
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
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. Template Toolkit – зло?! Анатолий Шарифулин
  • 2. Специальнодля РИТ++ 2010 вышел Perl 5.12!
  • 3. Каждый годна «May Perl»
  • 4. Я рассказываю про «зло» :)
  • 5. CGI «CGI.pm – зло?!», May Perl 2008
  • 6. LWP«Модули Net::*, использующие LWP::UserAgent – зло?!», May Perl 2009
  • 7. POE Такого блица не было, но это так :)
  • 8. PHP
  • 9. ой :)
  • 10. TT «Template Toolkit – зло?!», May Perl 2010
  • 11. – зло?!
  • 12. – зло?!
  • 13. Есть два типа шаблонизаторов:простые и удобные :)
  • 14. Есть два типашаблонизаторов: простые
  • 15. Есть два типа шаблонизаторов:простые и удобные :)
  • 16. Удобные: позволяют писать быстро, но заставляют писать не оптимально
  • 17. И из-за этого сложнотестировать логику – всё в шаблонах
  • 18. Да-да, но...
  • 19. Template Toolkit• Cамый популярный шаблонизатор для Perl• Простой, гибкий и многофункциональный• Большое количество плагинов (Filter, Dumper, CGI и даже DBI)• Верстальщик-френдли синтаксис и возможность use Perl :)• Хорошая и полная документация• Портирован на Python – Template-Python
  • 20. Template Toolkit• Cамый популярный шаблонизатор для Perl• Простой, гибкий и многофункциональный• Большое количество плагинов (Filter, Dumper, CGI и даже DBI)• Верстальщик-френдли синтаксис и возможность use Perl :)• Хорошая и полная документация• Портирован на Python – Template-Python
  • 21. Template Toolkit• Cамый популярный шаблонизатор для Perl• Простой, гибкий и многофункциональный• Большое количество плагинов (Filter, Dumper, CGI и даже DBI)• Верстальщик-френдли синтаксис и возможность use Perl :)• Хорошая и полная документация• Портирован на Python – Template-Python
  • 22. Template Toolkit• Cамый популярный шаблонизатор для Perl• Простой, гибкий и многофункциональный• Большое количество плагинов (Filter, Dumper, CGI и даже DBI)• Верстальщик-френдли синтаксис и возможность use Perl :)• Хорошая и полная документация• Портирован на Python – Template-Python
  • 23. Template Toolkit• Cамый популярный шаблонизатор для Perl• Простой, гибкий и многофункциональный• Большое количество плагинов (Filter, Dumper, CGI и даже DBI)• Верстальщик-френдли синтаксис и возможность use Perl :)• Хорошая и полная документация• Портирован на Python – Template-Python
  • 24. Template Toolkit• Cамый популярный шаблонизатор для Perl• Простой, гибкий и многофункциональный• Большое количество плагинов (Filter, Dumper, CGI и даже DBI)• Верстальщик-френдли синтаксис и возможность use Perl :)• Хорошая и полная документация• Портирован на Python – Template-Python
  • 25. [% PROCESS _design/header.tt %]<ul>[% FOREACH item = list %] <li>[% item.title %]</li>[% END %]</ul>[% PROCESS _design/footer.tt %]
  • 26. Недостатки TT• Очень медленный (на сайте написано «The TT is a fast» :)
  • 27. Недостатки TT• Очень медленный (на сайте написано «The TT is a fast» :)• Тормозят фильтры
  • 28. Недостатки TT• Очень медленный (на сайте написано «The TT is a fast» :)• Тормозят фильтры• Макро-язык TT– зло, еще и капс :)
  • 29. Недостатки TT• Очень медленный (на сайте написано «The TT is a fast» :)• Тормозят фильтры• Макро-язык TT– зло, еще и капс :)• ОО синтаксис вызова методов – not like Perl
  • 30. Недостатки TT• Очень медленный (на сайте написано «The TT is a fast» :)• Тормозят фильтры• Макро-язык TT– зло, еще и капс :)• ОО синтаксис вызова методов – not like Perl• Нет разницы между вызовом метода и ключом хеша
  • 31. Недостатки TT• Очень медленный (на сайте написано «The TT is a fast» :)• Тормозят фильтры• Макро-язык TT– зло, еще и капс :)• ОО синтаксис вызова методов – not like Perl• Нет разницы между вызовом метода и ключом хеша• Сортировка – это пипец, нет map и grep – ааааа
  • 32. Недостатки TT• Нет разницы между строкой и массивом, проверять .size >0
  • 33. Недостатки TT• Нет разницы между строкой и массивом, проверять .size >0• Нет возможности создавать анонимные структуры, нужно всё именовать
  • 34. Недостатки TT• Нет разницы между строкой и массивом, проверять .size >0• Нет возможности создавать анонимные структуры, нужно всё именовать• В циклах нет переменной по умолчанию (верните $_)
  • 35. Недостатки TT• Нет разницы между строкой и массивом, проверять .size >0• Нет возможности создавать анонимные структуры, нужно всё именовать• В циклах нет переменной по умолчанию (верните $_)• Можно использовать $var, $var vs. jQuery – аааааа
  • 36. Недостатки TT• Нет разницы между строкой и массивом, проверять .size >0• Нет возможности создавать анонимные структуры, нужно всё именовать• В циклах нет переменной по умолчанию (верните $_)• Можно использовать $var, $var vs. jQuery – аааааа• Странное TTL кеширование шаблонов (почему 1 секунда?)
  • 37. Template::Toolkit::Simple A Simple Interface to Template Toolkit
  • 38. Многие вещи неделаются, т.к. иногда леньили долго писать сложный синтаксис
  • 39. Мы привыклик удобному и красивому Perl :)
  • 40. Существует ли идеальный шаблонизатор?
  • 41. HTML::ChainParser Автор Павел Кудинов Чисто ростовский непередаваемый юмор :)
  • 42. ~~>[ <ul> ~~>list~@@~[ <li>~~>title~</li> ]~ </ul>]~[ <design> ~~> </design>]~
  • 43. Mojo::Template EpRenderer Mojolicious. Веб в коробке!
  • 44. % layout design;<ul>% for (@$list) { <li><%= $_->{title} %></li>%}</ul>
  • 45. Сравнение
  • 46. Template::Toolkit Сравнение
  • 47. [% PROCESS _design/header.tt %]<ul>[% FOREACH item = list.nsort(id) %] <li>[% item.title %]</li>[% END %]</ul>[% PROCESS _design/footer.tt %]
  • 48. [% PROCESS _design/header.tt %]<ul>[% FOREACH item = list.mnsort(hash.id) %] <li>[% item.title %]</li>[% END %]</ul>[% PROCESS _design/footer.tt %]
  • 49. $Template::Stash::LIST_OPS->{mnsort} = sub { ... }; Нужно дописывать функции для сортировок like PHP
  • 50. [% PROCESS _design/header.tt %]<ul>[% FOREACH item = list %] <li>[% item.title %] [% my_round(item.count) %]</li>[% END %]</ul>[% PROCESS _design/footer.tt %]
  • 51. [% MACRO my_round(count) PERL %] print sprintf "%.0f", $stash->get(count);[% END %]<ul>[% FOREACH item = list %] <li>[% item.title %] [% my_round(item.count) %]</li>[% END %]</ul>
  • 52. [% USE Util %]<ul>[% FOREACH item = list %] <li>[% item.title %] [% Util.my_round(item.count) %]</li>[% END %]</ul>
  • 53. Иногда получается очень жесткий код на TT :)
  • 54. [% FOREACH l=region.locations %] [% NEXT IF region.metro.location_id==l.location_id %] [% NEXT IF l.room_type == prison %] [% NEXT UNLESS map.show_on_this_dusk_level( l.location_id,person) %] [% IF cut_name.${l.name} %][% cname = cut_name.${l.name} %] [% ELSE %][% cname = l.name %] [% END %] [% IF region.center.location_id == l.location_id %][% macro.0 = {...} %] [% ELSE %] [% macro.$i = {name=>l.name, id=>l.location_id}; i = i+1 %] [% END %][% END %][% IF region.metro && region.metro.size > 0 &&location.location_id==region.center.location_id && person.dusk_level == 0 %] [% IF cut_name.${region.metro.name} %][% cname = cut_name.${region.metro.name} %]
  • 55. HTML::ChainParser Сравнение
  • 56. ~~>[ <ul> ~~>list~@sort~<D>(id)~@@~[ <li>~~>title~</li> ]~ </ul>]~[ <design> ~~> </design>]~
  • 57. ~~>[ <ul> ~~>list~@sort~<D>(hash~id)~@@~[ <li>~~>title~</li> ]~ </ul>]~[ <design> ~~> </design>]~
  • 58. ~~>[ <ul> ~~>list~@@~[ <li>~~>title~ ~~>count~&~(PMath~Round)~</li> ]~ </ul>]~[ <design> ~~> </design>]~
  • 59. push @ExParser,Round;sub MyRound { sprintf("%.0f", ${RSPR $_[0]});};
  • 60. Иногда получается очень жесткий код :)
  • 61. ~~>#~[:/.design/.lang.iphone]~[~~>&~(Public~Video~Main)~main.new~video~[~~>%~( ~title~ ~(content~$~(::~LANG)~title~&~(PT~Escape))~ ~content~ ~#[info]~ ~back~ ~(%~( ~title~ ~(..~menu~back)~ ~url~ ~[javascript: history.back();]~ ))~ ~menu~ ~(..~(::~COOKIE~menu~#~[../.menu]))~)~#~[../.main]~]~]~
  • 62. Mojo::Template EpRenderer Сравнение
  • 63. % layout design;<ul>% for (sort { $a->{id} <=> $b->{id} } @$list) { <li><%= $_->{title} %></li>%}</ul>
  • 64. % layout design;<ul>% for (@$list) { <li> <%= $_->{title} %> <%= sprintf "%.0f", $_->{count} %> </li>%}</ul>
  • 65. Жесткость кода зависит от упоротости разработчика :)
  • 66. Мои шаблоны на Mojolicious оченьпростые и красивые! :)
  • 67. Template Toolkit
  • 68. Template Toolkit – зло!
  • 69. Template Toolkit – зло!?
  • 70. use Perl or die;
  • 71. JFDI
  • 72. Спасибо за внимание! Анатолий Шарифулин http://twitter.com/sharifulin

×