<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-7695038917859429708</id><updated>2009-10-13T01:56:37.459-07:00</updated><title type='text'>капсулированный модуль с поплавком</title><subtitle type='html'>ебрилом жепь сердца людей</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default?start-index=26&amp;max-results=25'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>40</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-5563984783575389586</id><published>2009-03-10T11:28:00.000-07:00</published><updated>2009-03-10T11:31:39.755-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='it'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><title type='text'>Grails 1.1 Released</title><content type='html'>Ну вот и &lt;a href="http://blog.springsource.com/2009/03/10/grails-11-released/"&gt;вышел Grails 1.1&lt;/a&gt;. Очень вовремя. Скоро 'переезд'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-5563984783575389586?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/5563984783575389586/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=5563984783575389586' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5563984783575389586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5563984783575389586'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2009/03/grails-11-released.html' title='Grails 1.1 Released'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-5537959262988663624</id><published>2009-02-11T10:37:00.000-08:00</published><updated>2009-02-11T10:39:28.466-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>О бирже.</title><content type='html'>Кризис кризисом, но в тоже время вчера и сегодня биржа поставила рекорд по количеству сделок - именно количеству, не объёму. Забавно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-5537959262988663624?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/5537959262988663624/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=5537959262988663624' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5537959262988663624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5537959262988663624'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2009/02/blog-post.html' title='О бирже.'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-1780306323631355793</id><published>2009-02-11T03:00:00.000-08:00</published><updated>2009-02-11T03:02:26.115-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><title type='text'></title><content type='html'>Надо будет попробовать DataGrid command object в grails 1.1 используя вот &lt;a href="http://stateyourbizness.blogspot.com/2009/02/binding-to-collection-fields-on-command.html"&gt;этот&lt;/a&gt; трюк.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-1780306323631355793?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/1780306323631355793/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=1780306323631355793' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1780306323631355793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1780306323631355793'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2009/02/datagrid-command-object-grails-1.html' title=''/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-6204877800391216405</id><published>2009-02-02T23:14:00.000-08:00</published><updated>2009-02-02T23:16:25.490-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='it'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>groovy &amp; concurrency</title><content type='html'>&lt;a href="http://www.jroller.com/vaclav/entry/groovy_actors_in_gparallelizer_concurrency"&gt;Actors in Groovy&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;и&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jroller.com/vaclav/entry/asynchronous_methods_in_groovy"&gt;Asynchronous methods in Groovy&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Очень мощно, я щитаю.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-6204877800391216405?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/6204877800391216405/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=6204877800391216405' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/6204877800391216405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/6204877800391216405'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2009/02/groovy-concurrency.html' title='groovy &amp; concurrency'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-4153035275047134322</id><published>2009-01-12T23:40:00.000-08:00</published><updated>2009-01-13T00:01:30.147-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='it'/><title type='text'>Почитал тут статью</title><content type='html'>В последнее время складывается впечатление, что русское коммунити .NET(кратко - шарпоёбы) отличается каким-то запредельным уровнем неадеквата. Примерно схожим по уровню с php коммунити. Судя по статье &lt;a href="http://rsdn.ru//article/dotnet/LinqAsStapToFp.xml"&gt;LINQ как шаг к функциональному программированию&lt;br /&gt;&lt;/a&gt; так оно и есть. А может быть и нет. Но статья всё равно не очень. Приведу цитату из статьи с моими комментарими:&lt;br /&gt;&lt;br /&gt;В ФЯ список обычно представляется с помощью структуры данных, известной императивным программистам как однонаправленный связанный список (далее просто список). Особенностью этой структуры данных является то, что она позволяет создавать неизменяемые списки &lt;span style="font-weight:bold;font-style:italic;"&gt;ЩИТО?&lt;/span&gt; (об этом речь пойдет ниже). При этом список имеет ряд ограничений:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Он допускает добавление элементов только в начало списка. &lt;span style="font-weight:bold;font-style:italic;"&gt;ЩИТО?&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Удаление элементов невозможно (но, как и любой другой объект в .NET, элементы освобождаются автоматически, если на них нет других ссылок). &lt;span style="font-weight:bold;font-style:italic;"&gt;ЩИТО? как так удаление невозможно? зачем здесь о GC?&lt;/span&gt; &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Для хранения каждого элемента создается отдельный объект. &lt;span style="font-weight:bold;font-style:italic;"&gt;ЩИТО?&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Доступ по индексу элемента возможен только перебором (т.е. имеет сложность O(n), в отличие, например, от O(1) в случае массива).&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Дальше приведённого куска я читать не стал. &lt;br /&gt;&lt;br /&gt;p.s. Против самой .NET я в целом ничего не имею.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-4153035275047134322?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/4153035275047134322/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=4153035275047134322' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/4153035275047134322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/4153035275047134322'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2009/01/blog-post_12.html' title='Почитал тут статью'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-6042152141562035447</id><published>2009-01-12T12:12:00.000-08:00</published><updated>2009-01-12T12:14:42.057-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mult'/><title type='text'></title><content type='html'>В аниме чем больше сиськи - тем круче тёлка. Круче - в смысле круче нрав.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-6042152141562035447?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/6042152141562035447/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=6042152141562035447' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/6042152141562035447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/6042152141562035447'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2009/01/blog-post.html' title=''/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-1173299028553613667</id><published>2008-12-30T07:18:00.000-08:00</published><updated>2008-12-30T07:23:48.711-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>PowerBall</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_0IhxrahxY18/SVo8Y9J3sbI/AAAAAAAAADk/K1p5Csd2HXA/s1600-h/powerball_neon_green_work.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://3.bp.blogspot.com/_0IhxrahxY18/SVo8Y9J3sbI/AAAAAAAAADk/K1p5Csd2HXA/s320/powerball_neon_green_work.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5285603512103186866" /&gt;&lt;/a&gt; Отличная штука. Кручу верчу - остановиться не могу.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-1173299028553613667?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/1173299028553613667/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=1173299028553613667' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1173299028553613667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1173299028553613667'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/12/powerball.html' title='PowerBall'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_0IhxrahxY18/SVo8Y9J3sbI/AAAAAAAAADk/K1p5Csd2HXA/s72-c/powerball_neon_green_work.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-4996680874986511301</id><published>2008-12-24T10:39:00.000-08:00</published><updated>2008-12-24T11:06:19.009-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Нравица!</title><content type='html'>Little Boots нравица!&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/N6tLRCDqJ2c&amp;hl=ru&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/N6tLRCDqJ2c&amp;hl=ru&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Zcc8gE54Md8&amp;hl=ru&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Zcc8gE54Md8&amp;hl=ru&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Хотет полноценный альбом этой исполнительницы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-4996680874986511301?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/4996680874986511301/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=4996680874986511301' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/4996680874986511301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/4996680874986511301'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/12/blog-post.html' title='Нравица!'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-4648660590658476047</id><published>2008-06-18T14:09:00.000-07:00</published><updated>2008-06-18T14:10:56.601-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='football'/><title type='text'>оле!!!</title><content type='html'>Сборная - молодцы. Ещё бы моменты так не растрачивали, были бы совсем красавцы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-4648660590658476047?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/4648660590658476047/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=4648660590658476047' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/4648660590658476047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/4648660590658476047'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/06/blog-post.html' title='оле!!!'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-2016919238034366435</id><published>2008-06-07T02:23:00.000-07:00</published><updated>2008-06-07T02:26:39.610-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><title type='text'>grails 1.0.3</title><content type='html'>Вышел grails 1.0.3. При попытке заапгрейдтить проект с 1.0.2 до 1.0.3 наткнулся на то, что предыдущий конфиг не совместим с новыми скриптом Package и некоторыми другими.&lt;br /&gt;&lt;br /&gt;Заборол конечно. Но осадок остался.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-2016919238034366435?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/2016919238034366435/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=2016919238034366435' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/2016919238034366435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/2016919238034366435'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/06/grails-103.html' title='grails 1.0.3'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-2236949209005367154</id><published>2008-06-04T23:03:00.000-07:00</published><updated>2008-06-04T23:05:00.428-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cinema'/><title type='text'>speedy racer</title><content type='html'>Посмотрел Спиди гоншика. Шёл на этот фильм с опаской, но мои опасения были развеяны за первые 15 минут фильма.&lt;br /&gt;&lt;br /&gt;Очень хорошее кино.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-2236949209005367154?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/2236949209005367154/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=2236949209005367154' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/2236949209005367154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/2236949209005367154'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/06/speedy-racer.html' title='speedy racer'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-2677184501950329335</id><published>2008-06-04T03:04:00.000-07:00</published><updated>2008-06-04T03:46:28.215-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>grails: работа с шаблонами</title><content type='html'>Вот &lt;a href="http://docs.codehaus.org/display/GRAILS/Sending+SMTP+Authenticated+Email,+Html+content+with+GroovyTemplates+and+Spring+integration"&gt;здесь&lt;/a&gt; описан способ отправки почтовых сообщений с html форматированием. Всё бы хорошо, но использование groovy шаблонов вместо обычных gsp для задания отображения почтового сообщени я считаю неверным. &lt;br /&gt;&lt;br /&gt;Поэтому я чуть-чуть покапался во внутренностях grails и вот результат:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine&lt;br /&gt;import org.codehaus.groovy.grails.web.pages.GroovyPageTemplate&lt;br /&gt;import grails.util.GrailsWebUtil&lt;br /&gt;import org.springframework.web.context.request.RequestContextHolder&lt;br /&gt;&lt;br /&gt;class TemplateService {&lt;br /&gt;    GroovyPagesTemplateEngine groovyPagesTemplateEngine&lt;br /&gt;    &lt;br /&gt;    def createHtml(String templateName, Map model) {&lt;br /&gt;        if(!RequestContextHolder.getRequestAttributes())&lt;br /&gt;            GrailsWebUtil.bindMockWebRequest()&lt;br /&gt;        &lt;br /&gt;        GroovyPageTemplate tpl = groovyPagesTemplateEngine.createTemplate(templateName)&lt;br /&gt;        StringWriter out = new StringWriter() &lt;br /&gt;        tpl.make(model).writeTo(out)&lt;br /&gt;        &lt;br /&gt;        return out.toString()&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Хочу отметить, что очень большой недостаток доступной документации по grails заключается в отсутствии описания контекстных бинов, которые grails инициализирует и использует. В данном случае такой бин - groovyPagesTemplateEngine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-2677184501950329335?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/2677184501950329335/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=2677184501950329335' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/2677184501950329335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/2677184501950329335'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/06/grails.html' title='grails: работа с шаблонами'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-7401383660618070345</id><published>2008-05-20T23:56:00.000-07:00</published><updated>2008-05-20T23:57:08.006-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>физики шутят</title><content type='html'>АНГЕЛ: Господи, они синтезировали еще один трансурановый элемент. Как будем реагировать?&lt;br /&gt;БОГ: Добавим еще один нелинейный член в Истинное Уравнение Единого Поля.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-7401383660618070345?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/7401383660618070345/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=7401383660618070345' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/7401383660618070345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/7401383660618070345'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/05/blog-post_20.html' title='физики шутят'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-6074382150662152760</id><published>2008-05-15T12:38:00.000-07:00</published><updated>2008-05-15T12:40:01.687-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>немного магии</title><content type='html'>&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CdTIQ6BVlvw&amp;hl=en"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/CdTIQ6BVlvw&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-6074382150662152760?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/6074382150662152760/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=6074382150662152760' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/6074382150662152760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/6074382150662152760'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/05/blog-post_948.html' title='немного магии'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-5862677773362157999</id><published>2008-05-15T05:05:00.000-07:00</published><updated>2008-05-15T05:08:15.160-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>потс радости</title><content type='html'>ЗЕНИТ - ЧЕМПИОН!!!111&lt;br /&gt;&lt;br /&gt;p.s. ох и накидался я вчера, ОЯЕБУ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-5862677773362157999?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/5862677773362157999/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=5862677773362157999' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5862677773362157999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5862677773362157999'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/05/blog-post_15.html' title='потс радости'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-1443003634737288353</id><published>2008-05-04T13:27:00.001-07:00</published><updated>2008-05-04T13:45:21.969-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>зайцы. зайцы - мозгоразрывайцы.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.usavich.tv/s1_1.html"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_0IhxrahxY18/SB4fu7UzwMI/AAAAAAAAACA/JMX8GnqWSsI/s320/3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5196625911091544258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.usavich.tv/s1_1.html"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_0IhxrahxY18/SB4fgbUzwLI/AAAAAAAAAB4/0TNVEtIowUw/s320/2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5196625661983441074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Картинке кликабле.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-1443003634737288353?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/1443003634737288353/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=1443003634737288353' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1443003634737288353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1443003634737288353'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/05/blog-post_04.html' title='зайцы. зайцы - мозгоразрывайцы.'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_0IhxrahxY18/SB4fu7UzwMI/AAAAAAAAACA/JMX8GnqWSsI/s72-c/3.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-2453558567990294235</id><published>2008-05-04T04:02:00.001-07:00</published><updated>2008-05-04T04:16:45.360-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>grails: gorm &amp; query by criteria</title><content type='html'>Есть такая симпатичная штука в hibernate, а как следствие, и в grails. Штука очень хорошая для составления динмаических запросов, в зависимости от того, допустим, по какому набору полей надо искать. И есть в hibernate criteria api такая штука как alias'ы - метод формулировать условия для ассоциаций. &lt;br /&gt;&lt;br /&gt;Я очень удивился, когда не нашёл в документации grails ничего об алиасах, ну и полез в гугл - куда ж ещё. Всё оказалось, как обычно, просто. Допустим есть сущность Foo с ассоциацей bar, у которой условие необходимо наложить на поле baz. Пишется это так:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def c = Foo.createCriteria()&lt;br /&gt;def someList = c{&lt;br /&gt;    bar {&lt;br /&gt;        eq("baz", "some value")&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Вот примерно так. bar {...} и является той самой ассоциацией. Вложенность таких вызовов с клозуром может быть какая угодно.&lt;br /&gt;&lt;br /&gt;Кстате, пока писал, подумал, как команда grails собирается реализовать gorm на базе JPA текущей (а это планируется в grails 1.1)? В JPA ведь нет никакого criteria api, это чисто hibernate заморочка. Интересно будет посмотреть.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-2453558567990294235?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/2453558567990294235/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=2453558567990294235' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/2453558567990294235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/2453558567990294235'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/05/grails-by-criteria.html' title='grails: gorm &amp; query by criteria'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-3732539135747119402</id><published>2008-05-03T22:48:00.000-07:00</published><updated>2008-05-03T22:52:09.492-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>А пока были праздники</title><content type='html'>произошла пара интересных событий:&lt;br /&gt;1. groovy 1.6 beta - заявлено о нехилом росте производительности.&lt;br /&gt;2. SpringSource Application Platform beta - очень интересная штука должна быть, кроме того, &lt;a href="http://graemerocher.blogspot.com/2008/05/spring-application-platform-and-grails.html"&gt;grails приложения на неё деплоятся без проблем&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Всех с прошедшими праздниками.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-3732539135747119402?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/3732539135747119402/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=3732539135747119402' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/3732539135747119402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/3732539135747119402'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/05/blog-post.html' title='А пока были праздники'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-5366761165391831669</id><published>2008-04-29T03:35:00.000-07:00</published><updated>2008-04-29T03:39:22.238-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>grails: testing &amp; dbunit</title><content type='html'>DBUnit plugin для Grails оказался не без изъяна. Две вещи раздражают : &lt;br /&gt;1. Только plain данные можно описать в датасетах. Это очень плохо. Возможно я просто не нашёл как по другому.&lt;br /&gt;2. Почему-то каждый раз при запуске теста происходит полная перекомпиляция, а это очень долго.&lt;br /&gt;&lt;br /&gt;Возможно, не стоит использовать DBUnit, потому что, учитывая синатксис Groovy, создание данных для тестиварония простая задача.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-5366761165391831669?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/5366761165391831669/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=5366761165391831669' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5366761165391831669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5366761165391831669'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/04/grails-testing-dbunit.html' title='grails: testing &amp; dbunit'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-1807977585867159885</id><published>2008-04-23T23:56:00.000-07:00</published><updated>2008-04-23T23:57:28.431-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Чудное</title><content type='html'>http://community.livejournal.com/ru_java/638585.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-1807977585867159885?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/1807977585867159885/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=1807977585867159885' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1807977585867159885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1807977585867159885'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/04/blog-post_23.html' title='Чудное'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-2135139812184948706</id><published>2008-04-11T02:04:00.000-07:00</published><updated>2008-04-11T02:17:44.036-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>grails: unit testing</title><content type='html'>Пришлов время пописать юнит тесты. Юнит тестировал я один из методов сервиса, который проверяет может ли пользователь видеть урл или нет.&lt;br /&gt;Метод вот такой:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class SecurityService {&lt;br /&gt;    static digestAlgo = "MD5"&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    boolean checkAccess(def acc, def controller, def action) {&lt;br /&gt;        def attachedAcc = Account.get(acc.id)&lt;br /&gt;        def checkingUrl = controller + "/" + action&lt;br /&gt;        def realRes = false&lt;br /&gt;        &lt;br /&gt;        log.debug "let's check it"&lt;br /&gt;        log.debug "attachedAcc : ${attachedAcc}"&lt;br /&gt;        log.debug "checkingUrl : ${checkingUrl}"&lt;br /&gt;        &lt;br /&gt;        if(attachedAcc) {&lt;br /&gt;            attachedAcc.roles.urls*.find { requestmap -&gt;&lt;br /&gt;                if(checkingUrl =~ requestmap.url) {&lt;br /&gt;                    realRes = true&lt;br /&gt;                    return true&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        return realRes&lt;br /&gt;    }&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Так как я захотел создать именно юнит тест, то все инжекты из grails необходимо было проэмулировать. А это следующее:&lt;br /&gt;Account.get&lt;br /&gt;объект log&lt;br /&gt;attachedAcc.roles.urls - т.е. свойства roles и urls.&lt;br /&gt;И здесь на выручку приходит динамеческая природа groovy, которая позволяет всё необходимое добавить к классам прямо в run-time.&lt;br /&gt;И так:&lt;br /&gt;1. создаём список аккаунтов, назначем аккаунтам роли, ролям паттерны доступных урлов&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        def adminRole = new Role()&lt;br /&gt;        adminRole['urls'] = [&lt;br /&gt;            [url: ".*"],&lt;br /&gt;        ]&lt;br /&gt;        def adminAccount = new Account(username : 'admin')&lt;br /&gt;        adminAccount['roles'] = [adminRole]&lt;br /&gt;&lt;br /&gt;        def oneControllerAllRole = new Role()&lt;br /&gt;        oneControllerAllRole['urls'] = [&lt;br /&gt;            [url: "one/.*"],&lt;br /&gt;        ]&lt;br /&gt;&lt;br /&gt;        def restrictedRole = new Role()&lt;br /&gt;        restrictedRole['urls'] = [&lt;br /&gt;            [url: "two/three"],&lt;br /&gt;            [url: "four/five"]&lt;br /&gt;        ]&lt;br /&gt;        &lt;br /&gt;        def account1 = new Account(username : 'oneAll')&lt;br /&gt;        account1['roles'] = [oneControllerAllRole]&lt;br /&gt;        def account2 = new Account(username : 'restricted')&lt;br /&gt;        account2['roles'] = [restrictedRole]&lt;br /&gt;        def account3 = new Account(username : 'oneAllAndRestricted')&lt;br /&gt;        account3['roles'] = [oneControllerAllRole, restrictedRole]&lt;br /&gt;        &lt;br /&gt;        def accounts = [&lt;br /&gt;            (new Long(1)) : adminAccount,&lt;br /&gt;            (new Long(2)) : account1,&lt;br /&gt;            (new Long(3)) : account2,&lt;br /&gt;            (new Long(4)) : account3&lt;br /&gt;        ]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2. Добавляем к Account метод get()&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        Account.metaClass.static.get = { Long id -&gt;&lt;br /&gt;            return accounts[(id)]&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3. Добавляем к сервису объект log. Ну и конечно же надо создать сам сервис.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        def sol = new SOL()&lt;br /&gt;        SecurityService.metaClass.getLog = { -&gt;&lt;br /&gt;            return sol&lt;br /&gt;        }&lt;br /&gt;        securityService = new SecurityService()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;здесь SOL - простейщий класс реализующий метод debug()&lt;br /&gt;&lt;br /&gt;Собственно всё, среда готова, можно тестировать.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-2135139812184948706?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/2135139812184948706/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=2135139812184948706' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/2135139812184948706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/2135139812184948706'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/04/grails-unit-testing.html' title='grails: unit testing'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-4646181256497252463</id><published>2008-04-04T00:23:00.001-07:00</published><updated>2008-04-04T00:23:47.007-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.membrana.ru/articles/business/2008/04/03/230400.html"&gt;Бар педальный&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-4646181256497252463?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/4646181256497252463/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=4646181256497252463' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/4646181256497252463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/4646181256497252463'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/04/blog-post_04.html' title=''/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-7091057785391710187</id><published>2008-04-02T23:20:00.000-07:00</published><updated>2008-04-02T23:24:53.293-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>Бу-ра-ти-но!!!</title><content type='html'>&lt;a href="http://www.vz.ru/news/2008/4/2/156813.html"&gt;Отсюда&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;Петр Кузнецов, лидер пензенских сектантов, пытался в среду совершить самоубийство. Об этом по телефону из села Никольское Бековского района сообщил вице-губернатор области Олег Мельниченко. &lt;br /&gt;&lt;br /&gt;В ходе следствия выяснилось, что открытую черепно-мозговую травму Кузнецов получил не в результате нападения со стороны сектантов, как сообщалось ранее, а «это была попытка суицида». &lt;br /&gt;&lt;br /&gt;«&lt;span style="font-weight:bold;"&gt;Кузнецов положил голову на деревянный чурбан и наносил себе удары другим деревянным чурбаном. В результате он получил открытую черепно-мозговую травму.&lt;/span&gt; Кузнецов был доставлен в Бековскую ЦРБ и экстренно прооперирован. В настоящее время он отправлен в больницу в Пензу для дальнейшего хирургического обследования специалистами», - рассказал Мельниченко.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-7091057785391710187?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/7091057785391710187/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=7091057785391710187' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/7091057785391710187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/7091057785391710187'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/04/blog-post.html' title='Бу-ра-ти-но!!!'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-1340359343633056249</id><published>2008-03-27T00:28:00.000-07:00</published><updated>2008-03-27T00:31:17.489-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>язычники.</title><content type='html'>По поводу вот &lt;a href="http://orei.livejournal.com/131984.html"&gt;этого&lt;/a&gt; почему то вспомнилось:&lt;br /&gt;Я его в химках видел. Он там деревянными членами торгует. (с)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-1340359343633056249?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/1340359343633056249/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=1340359343633056249' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1340359343633056249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1340359343633056249'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/blog-post_27.html' title='язычники.'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-7089405173413872481</id><published>2008-03-26T06:29:00.000-07:00</published><updated>2008-03-26T06:33:12.749-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>grails: mein kampf 1 / опять TagLib</title><content type='html'>Во время разбирательств с Web Flow я обнаружил, что входящий в поставку тег sortableColumn не поддерживает этот самый Web Flow. Ну что-ж, пора сделать свой тег - сказал я себе. Сказано, сделано. Вот тегова либа.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class ExtTagLib {&lt;br /&gt;    static namespace = "ext"&lt;br /&gt;    &lt;br /&gt;    def sortableColumn = {attrs -&gt;&lt;br /&gt;        ['sort', 'order'].each { name -&gt;&lt;br /&gt;            if(attrs[name] &amp;&amp; attrs[name] != '') {&lt;br /&gt;                params[name] = attrs[name]&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        if(attrs.event) {&lt;br /&gt;            if(!attrs.params) attrs.params = [:]&lt;br /&gt;            attrs.params['_eventId'] = attrs.event &lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        out &lt;&lt; g.sortableColumn(attrs)&lt;br /&gt;        ['sort', 'order'].each { name -&gt;&lt;br /&gt;            params.remove(name)&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Несколько кривовато, конечно, но работает. А это, в конце концов самое важное.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-7089405173413872481?l=kill-me-santa.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/7089405173413872481/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=7089405173413872481' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/7089405173413872481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/7089405173413872481'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/grails-mein-kampf-1-taglib.html' title='grails: mein kampf 1 / опять TagLib'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13060414124381467357'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>