<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7695038917859429708</id><updated>2011-10-11T03:40:18.378-07:00</updated><category term='space'/><category term='future'/><category term='it'/><category term='grails'/><category term='java'/><category term='groovy'/><category term='cinema'/><category term='mult'/><category term='video'/><category term='windows'/><category term='link'/><category term='music'/><category term='cat'/><category term='football'/><category term='science'/><category term='humor'/><category term='life'/><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?max-results=100'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-3784804983126566398</id><published>2011-10-11T03:39:00.000-07:00</published><updated>2011-10-11T03:40:18.415-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Mockito vararg matcher</title><content type='html'>Matcher: &lt;pre&gt;&lt;br /&gt;public class Matchers {&lt;br /&gt;	public static &lt;T&gt; Matcher&lt;T&gt; vararg(T... expected) {&lt;br /&gt;		return new VarargMatcherImpl(expected);&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static class VarargMatcherImpl extends ArgumentMatcher implements VarargMatcher {&lt;br /&gt;		Object[] expected;&lt;br /&gt;&lt;br /&gt;		public VarargMatcherImpl(Object[] val) {&lt;br /&gt;			this.expected = val;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		@Override&lt;br /&gt;		public boolean matches(Object arg) {&lt;br /&gt;			boolean retval = false;&lt;br /&gt;			if(arg != null &amp;&amp; expected != null) {&lt;br /&gt;				if(arg instanceof Object[]) {&lt;br /&gt;					Object[] argArray = (Object[])arg;&lt;br /&gt;					retval = Arrays.equals(argArray, expected);&lt;br /&gt;				} else {&lt;br /&gt;					if(expected.length == 1) {&lt;br /&gt;						retval = expected[0].equals(arg);&lt;br /&gt;					}&lt;br /&gt;				}&lt;br /&gt;			} else {&lt;br /&gt;				retval = arg == null &amp;&amp; expected == null;&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			return retval;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		@Override&lt;br /&gt;		public void describeTo(Description description) {&lt;br /&gt;			description.appendText("[vararg should be : " + Arrays.toString(expected) + "]");&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Use:&lt;pre&gt;&lt;br /&gt;when(authorityGroupDao.findGroupsByRoles(argThat(vararg(roles)))).thenReturn(authorityGroupList);&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-3784804983126566398?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/3784804983126566398/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=3784804983126566398' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/3784804983126566398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/3784804983126566398'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2011/10/mockito-vararg-matcher.html' title='Mockito vararg matcher'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>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' alt='' /&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='http://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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-5156171154330208476</id><published>2008-03-26T04:29:00.000-07:00</published><updated>2008-03-26T06:19:26.335-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>groovy: маленькие фкусняшечки 1 / работа с датами</title><content type='html'>Сейчас я решаю задачу: необходимо составить возможное расписание некоторого события, протяжённого во времени, причём, естественно, необходимо знать дату начала и конца данного события. &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import groovy.time.*&lt;br /&gt;// groovy time!&lt;br /&gt;import org.codehaus.groovy.runtime.TimeCategory&lt;br /&gt;&lt;br /&gt;approxStartDate = new Date()&lt;br /&gt;// возможная дата начала&lt;br /&gt;approxEndDate = new Date() + 2&lt;br /&gt;// возможная дата конца (импользуем +!) &lt;br /&gt;startHour = 10&lt;br /&gt;//начальный час. число произвольное&lt;br /&gt;endHour = 20&lt;br /&gt;//конечный час. число произвольное&lt;br /&gt;stepsPerHour = 4&lt;br /&gt;//разбивка часа, т.е. событие длится 15 минут. число произвольное&lt;br /&gt;int duration = 7 * 15&lt;br /&gt;//длительность. число произвольное&lt;br /&gt;&lt;br /&gt;for(day in approxStartDate..approxEndDate) {&lt;br /&gt;    println " $day"&lt;br /&gt;    for(hour in startHour..&amp;lt;endHour) {&lt;br /&gt;        println " $hour"&lt;br /&gt;        for(step in 0..&amp;lt;stepsPerHour) {&lt;br /&gt;            use(TimeCategory) {&lt;br /&gt;                def dateTimeStart = new Date(&lt;br /&gt;                    year: day.year, &lt;br /&gt;                    month: day.month, &lt;br /&gt;                    hours: hour, &lt;br /&gt;                    minutes: step * 15, &lt;br /&gt;                    seconds: 0)&lt;br /&gt;&lt;br /&gt;                def dateTimeEnd = dateTimeStart + duration.minutes&lt;br /&gt;//прибавляем длительность чтобы получить конечную дату. просто и разумно.&lt;br /&gt;                println " $step : $dateTimeStart, $dateTimeEnd"&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Простой, понятный и короткий код. И это хорошо.&lt;br /&gt;Магия groovy работы с датами проявляется в 2-х местах.&lt;br /&gt;Первое:&lt;br /&gt;&lt;br /&gt;approxEndDate = new Date() + 2&lt;br /&gt;&lt;br /&gt;В груви для даты опеределна функция plus(), поэтому к дате можно спокойно добавить дни. Самое смешно, что функция minus() для даты не определена, так что вычитать из даты таким образом нельзя.&lt;br /&gt;&lt;br /&gt;Второе:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;            use(TimeCategory) {&lt;br /&gt;                def dateTimeStart = new Date(&lt;br /&gt;                    year: day.year, &lt;br /&gt;                    month: day.month, &lt;br /&gt;                    hours: hour, &lt;br /&gt;                    minutes: step * 15, &lt;br /&gt;                    seconds: 0)&lt;br /&gt;&lt;br /&gt;                def dateTimeEnd = dateTimeStart + duration.minutes&lt;br /&gt;//прибавляем длительность чтобы получить конечную дату. просто и разумно.&lt;br /&gt;                println " $step : $dateTimeStart, $dateTimeEnd"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Здесь используются классы TimeCategory и Duration. Первый позволяет записать Duration в виду duration.minutes, а Duration ползволяет прибавлять и вычитать из даты произвольные периоды времени.&lt;br /&gt;&lt;br /&gt;Кстати вместо duration.minutes можно было бы записать 15.minutes или 2.hours, таким образом в этом небольшом куске кода используется DSL для работы с единицами измерения времени.&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-5156171154330208476?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/5156171154330208476/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=5156171154330208476' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5156171154330208476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5156171154330208476'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/groovy-1.html' title='groovy: маленькие фкусняшечки 1 / работа с датами'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-5530399487511149916</id><published>2008-03-25T01:57:00.000-07:00</published><updated>2008-03-25T01:59:47.244-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='future'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>Биопринтер.</title><content type='html'>Помнится в 5 элементе Лилу восстанавливали такой хитрой машинкой, у неё ещё ручки так быстро тык-мык тык мык. Так вот, похоже сделали &lt;a href="http://www.membrana.ru/articles/health/2008/03/24/210900.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-5530399487511149916?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/5530399487511149916/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=5530399487511149916' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5530399487511149916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5530399487511149916'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/blog-post_25.html' title='Биопринтер.'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-1226406208318841518</id><published>2008-03-19T00:22:00.000-07:00</published><updated>2008-03-19T00:37:38.003-07: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-1226406208318841518?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/1226406208318841518/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=1226406208318841518' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1226406208318841518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1226406208318841518'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/blog-post_19.html' title=''/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-3408173257331285264</id><published>2008-03-17T00:30:00.000-07:00</published><updated>2008-03-19T00:40:33.892-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cat'/><title type='text'>Доброе утро.</title><content type='html'>Котег сегодня таки заинтересовался движущимися картинками в телеящике. Забавно было  то, как он трогал лапой эти самые картинки, и его задумчивый загривок, который как бы говорил мне "OMG! WTF?".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-3408173257331285264?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/3408173257331285264/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=3408173257331285264' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/3408173257331285264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/3408173257331285264'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/blog-post_17.html' title='Доброе утро.'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-6616555527922484521</id><published>2008-03-12T23:54:00.000-07:00</published><updated>2008-03-12T23:55:27.431-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 href="http://dogwelder.com/"&gt;сварка!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-6616555527922484521?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/6616555527922484521/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=6616555527922484521' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/6616555527922484521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/6616555527922484521'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/blog-post_12.html' title='просто ссылка.'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-2937063491985640176</id><published>2008-03-11T14:05:00.000-07:00</published><updated>2008-03-11T14:22:24.716-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>groovy: маленькие фкусняшечки 0</title><content type='html'>Допустим, у меня есть некоторый объект (foo), набор полей которого необходимо обработать единообразно.&lt;br /&gt;&lt;br /&gt;Java:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public void process(String field) {&lt;br /&gt;    System.out.println(field)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;process(foo.getBar());&lt;br /&gt;process(foo.getBaz());&lt;br /&gt;process(foo.getMaz());&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;groovy:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class Foo {&lt;br /&gt;    def bar&lt;br /&gt;    def baz&lt;br /&gt;    def maz&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;def foo = new Foo(bar : "barrr", baz : "bazzz", maz : "mazzz")&lt;br /&gt;['bar','baz','maz'].each { name -&gt;&lt;br /&gt;    println foo[name]&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Вариант на Java не полный - было лень приводить весь код. И не смотря на это, вариант на groovy на мой взгляд несомненно изящнее.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-2937063491985640176?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/2937063491985640176/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=2937063491985640176' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/2937063491985640176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/2937063491985640176'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/groovy-0.html' title='groovy: маленькие фкусняшечки 0'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-576195750776125921</id><published>2008-03-11T13:58:00.000-07:00</published><updated>2008-03-26T04:45:10.927-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'>Приступил к разборками с TagLib в grails. В документации обещают, что они будут перегружаться автоматом, как и почти все остальные артефакты проекта. &lt;br /&gt;Однако, как обычно, есть нюанс: если обращаться непосредственно к gsp странице минуя контроллер, то автоматическая перезагрузка не происходит.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-576195750776125921?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/576195750776125921/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=576195750776125921' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/576195750776125921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/576195750776125921'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/grails-mine-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:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-6972834841052202954</id><published>2008-03-11T13:29:00.000-07:00</published><updated>2008-03-11T13:34:15.755-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='space'/><category scheme='http://www.blogger.com/atom/ns#' term='future'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>rocket day.</title><content type='html'>Ракетные дни. Французы запустили, японцы запустили. Молодцы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-6972834841052202954?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/6972834841052202954/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=6972834841052202954' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/6972834841052202954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/6972834841052202954'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/rocket-day.html' title='rocket day.'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-6687184850600837749</id><published>2008-03-10T09:14:00.001-07:00</published><updated>2008-03-10T09:14:52.457-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><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/y8Kyi0WNg40"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/y8Kyi0WNg40" 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-6687184850600837749?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/6687184850600837749/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=6687184850600837749' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/6687184850600837749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/6687184850600837749'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/blog-post_10.html' title='Хомяк.'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-4891137697353390405</id><published>2008-03-10T07:51:00.000-07:00</published><updated>2008-03-10T08:07:22.348-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>JavaService</title><content type='html'>JavaService - продукт позволяющий использовать java приложения в качестве нативных сервисов (демонов под Unix). Сочетание же java 1.6 и JavaService под Windows даёт замечательный баг: сервис не стартует а в логах виндоуз появляются сообщения о том, что jvm.dll загрузить не было никакой возможности ("can't load jvm.dll").&lt;br /&gt;&lt;br /&gt;В результате гуглежа я выяснил, что этот баг не уникален для JavaService, но характерен для jdk 1.6, и что происходит он от того, что приложение пытается запустить java машину через jni, но чего то для этого не хватает. Подробно описано &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6509291"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Написал я это всё к тому, что я натыкась на эту пердь уже раз в 10-ый, каждый раз как разворачиваю приложение, и каждый раз уходит минут 10-15 поисков. &lt;br /&gt;Решил оставить себе заметку.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-4891137697353390405?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/4891137697353390405/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=4891137697353390405' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/4891137697353390405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/4891137697353390405'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/javaservice.html' title='JavaService'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-5193299357553348904</id><published>2008-03-07T04:20:00.000-08:00</published><updated>2008-03-07T04:21:35.574-08:00</updated><title type='text'>ПОра бухать.</title><content type='html'>Фсем чмоке. Особенно бабцам.&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-5193299357553348904?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/5193299357553348904/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=5193299357553348904' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5193299357553348904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/5193299357553348904'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/blog-post_07.html' title='ПОра бухать.'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-7307437697688583756</id><published>2008-03-07T00:38:00.000-08:00</published><updated>2008-03-26T04:45:46.565-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 0 / Web Flow</title><content type='html'>В Grails есть чудесная штука - называется Web Flow. Хотя, я неверно выразился, Web Flow есть в Spring, а в Grails его "воткнули", как и многое другое. У Web Flow Grails есть чудесная особенность - внутри кода описывающего Web FLow в контроллере нельзя применять Hibernate Criteria, потому как они работают в этом случае очень странно. &lt;br /&gt;&lt;br /&gt;Например вот такой код:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    def mainFlow = {&lt;br /&gt;...&lt;br /&gt;        search {&lt;br /&gt;            action {&lt;br /&gt;...&lt;br /&gt;                def listCriteria = Client.createCriteria()&lt;br /&gt;                def clientList = listCriteria {&lt;br /&gt;                    like("fname", fname)&lt;br /&gt;                    like("pname", pname)&lt;br /&gt;                    like("sname", sname)&lt;br /&gt;                    firstResult(params.offset)&lt;br /&gt;                    maxResults(params.max)&lt;br /&gt;                }&lt;br /&gt;...&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;даст на выходе запрос в котором отсутствуют всякие упоминания о firstResult и maxResults.&lt;br /&gt;&lt;br /&gt;Решение данной проблемы - перенос работы с Criteria в сервис и последующий инжект оного в контроллер.&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-7307437697688583756?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/7307437697688583756/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=7307437697688583756' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/7307437697688583756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/7307437697688583756'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/grails-mine-kampf-0.html' title='grails: mein kampf 0 / Web Flow'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-3909345445362573632</id><published>2008-03-07T00:04:00.000-08:00</published><updated>2008-03-07T00:30:45.862-08: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: маленькие фкусняшечки 0</title><content type='html'>А вот код, перетаскивающий параметры POST или GET запроса с именем формата flow.&lt;имя&gt; в контекст Web Flow. Ну напрмер из адресной строки формата http://some.domain/controller/flow?oppa=1&amp;amp;flow.q=obana в Web Flow пробрасывается q (flow.q == "obana").&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;params.flow?.each { entry -&gt;&lt;br /&gt; flow.'${entry.key}' = entry.value&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-3909345445362573632?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/3909345445362573632/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=3909345445362573632' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/3909345445362573632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/3909345445362573632'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/grails-0.html' title='grails: маленькие фкусняшечки 0'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-4508416994825437965</id><published>2008-03-06T23:53:00.000-08:00</published><updated>2008-03-07T00:10:31.103-08: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'>groovy &amp; grails</title><content type='html'>Два очень интересных и перспективных Java продукта, которые я буду использовать в 2008 году. Постараюсь делать некоторые заметки как о Groovy - в основном в контексте сравнения Java подхода и Groovy, так и о Grails.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-4508416994825437965?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/4508416994825437965/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=4508416994825437965' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/4508416994825437965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/4508416994825437965'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/groovy-grails.html' title='groovy &amp; grails'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7695038917859429708.post-1841971871964507220</id><published>2008-03-06T23:46:00.000-08:00</published><updated>2008-03-11T13:35:15.276-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='future'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>тук тук</title><content type='html'>Ридер принёс мне вот &lt;a href="http://www.membrana.ru/lenta/?8048"&gt;такую&lt;/a&gt; новость. Хорошая новость, я считаю - ещё один шаг к децентрализации, чистой энергии, отказу от сжигания нефти.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7695038917859429708-1841971871964507220?l=kill-me-santa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kill-me-santa.blogspot.com/feeds/1841971871964507220/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7695038917859429708&amp;postID=1841971871964507220' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1841971871964507220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7695038917859429708/posts/default/1841971871964507220'/><link rel='alternate' type='text/html' href='http://kill-me-santa.blogspot.com/2008/03/blog-post.html' title='тук тук'/><author><name>Michael Tkachev</name><uri>http://www.blogger.com/profile/08522881966297704199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
