<?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-5866514577340267046</id><updated>2011-12-22T21:40:29.414+02:00</updated><category term='disappointment'/><category term='KISS'/><category term='GWT'/><category term='SEO'/><category term='TRAC'/><category term='mysql'/><category term='minimalizm'/><category term='java'/><category term='python'/><category term='wicket'/><category term='software'/><category term='unix'/><category term='development'/><category term='.Net'/><category term='gimp'/><category term='project management'/><category term='fun'/><category term='maps'/><category term='time'/><title type='text'>Alexander Cherednichenko's blog</title><subtitle type='html'>thoughts on technology and software development</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lexaux.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>60</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-2677153105388051575</id><published>2011-12-22T15:18:00.005+02:00</published><updated>2011-12-22T21:40:29.424+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>MySQL failover talk</title><content type='html'>Hi! Today I had a talk at local IT user group regarding the MySQL fault-tolerance cluster. No original research neither anything specific - just a bit of experience which may help you setup the same easier ;).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The slides are in Russian: &lt;a href="https://docs.google.com/present/view?id=df6sccnc_72gkk5dmck"&gt;https://docs.google.com/present/view?id=df6sccnc_72gkk5dmck&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Alternatively you can look at them locally here:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;iframe src="https://docs.google.com/present/embed?id=df6sccnc_72gkk5dmck" frameborder="0" width="410" height="342"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-2677153105388051575?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=2677153105388051575' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2677153105388051575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2677153105388051575'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2011/12/mysql-failover-talk.html' title='MySQL failover talk'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-4460845696126858489</id><published>2011-12-22T07:37:00.003+02:00</published><updated>2011-12-22T08:00:22.127+02:00</updated><title type='text'>Wicket 1.4 modal window not hiding contents in hierarchy on close! :o</title><content type='html'>Looks like plenty of the posts are for myself not to forget about 'specific' issues found in the  frameworks during the development. Well, wicket 1.4.(18?) this time.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;The problem&lt;/b&gt;&lt;/div&gt;&lt;div&gt;So, we have a modal window. There is a form (call it form2) in this modal window. For the last, modal window itself is within a form (call it form1). Hierarchy looks like form1 &amp;lt;- modal window &amp;lt;- form2.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Both form1 and form2 have validators for their components, and both do have submitting components. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When the MW is shown and visible, everything works just fine according to the &lt;a href="http://www.google.com.ua/search?gcx=c&amp;amp;sourceid=chrome&amp;amp;client=ubuntu&amp;amp;channel=cs&amp;amp;ie=UTF-8&amp;amp;q=wicket+nested+forms"&gt;Nested form &lt;/a&gt;rules of the wicket. However, as you close the modal window by any means, the form2 will still be validated on the submit of form1! However, as it is _not_ visible on client (modal window is closed) we can not show to user what's wrong, they actually don't have access to the components failing. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Wicket modal windows do close by means of Ajax. E.g. when the actual DOM element is hidden by clicking cross, or outside modal window, or close button, wicket issues an ajax-call to server to notify it that window is no more visible. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This call is handled by &lt;i&gt;WindowClose &lt;/i&gt;behavior, the subclass of &lt;i&gt;AbstractAjaxDefaultBehavior.&lt;/i&gt;For greater detail you may take a look at it in the &lt;i&gt;ModalWindow&lt;/i&gt; class. What this behavior does in the original implementation: &lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Reset shown flag to &lt;i&gt;false&lt;/i&gt;, so window will be opened again when next time &lt;i&gt;show(target)&lt;/i&gt; is invoked.&lt;/li&gt;&lt;li&gt;In case of the modal window showing pages, not components, do cleanup of the pagemap.&lt;/li&gt;&lt;li&gt;Invoke &lt;i&gt;WindowCloseListener&lt;/i&gt; instance (if any has been set to this ModalWindow).&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;That's it. It means that &lt;b&gt;closing modal window&lt;/b&gt; &lt;b&gt;does not hide the components inside it &lt;/b&gt;from the wicket hierarchy, and they are treated as visible however they are not really! &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;The solution&lt;/b&gt;&lt;/div&gt;&lt;div&gt;General solution for me was to hide content on the modal window close action. &lt;/div&gt;&lt;div&gt;2 approaches:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Local.&lt;br /&gt;Just implement the windowClosedCallback, pass it to the instance of modal window, and in it, do hide your content on the close action.&lt;br /&gt;Bad things are that if you are developing a reusable component, you may want clients of this component to use windowClosedCallback for their own stuff.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;General.&lt;br /&gt;Subclass a ModalWindow. Say, &lt;i&gt;MyModalWindow extends ModalWindow&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;Override&lt;i&gt; newWindowClosedBehavior()&lt;/i&gt; of it&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In this method, create your own ajax behavior doing same thing as wicket does, plus hide component if it is there. Pass it on to the return. Voila, we are done. &lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Now the components will be really hidden, and you won't be getting nested forms edgecase validation issues (or whatever else hiding there - I don't really know). &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's the code snippet:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;//... inside our ModalWindow subclass, MyModalWindow&lt;/div&gt;&lt;div&gt; &lt;i&gt;   private class MyModalWindowClosedBehavior extends AbstractDefaultAjaxBehavior&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;            implements&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;            IWindowClosedBehavior {&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        private static final long serialVersionUID = 1L;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        @Override&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        protected void respond(AjaxRequestTarget target) {&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;            respondOnWindowClosed(target); // that'd be a call to the wicket's MW behavior.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;            if (getContent() != null) {&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                getContent().setVisible(false);&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;            }&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        }&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        @Override&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        public CharSequence getCallbackScript() {&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;            return super.getCallbackScript();&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        }&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;    }&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;    @Override&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;    protected IWindowClosedBehavior newWindowClosedBehavior() {&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        return new PoseidonWindowClosedBehavior();&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;    }&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-4460845696126858489?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=4460845696126858489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/4460845696126858489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/4460845696126858489'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2011/12/wicket-14-modal-window-not-hiding.html' title='Wicket 1.4 modal window not hiding contents in hierarchy on close! :o'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-1717946435061339724</id><published>2011-12-20T08:33:00.003+02:00</published><updated>2011-12-20T08:49:20.647+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><title type='text'>Inform user about Ajax failed (no network) in Wicket</title><content type='html'>&lt;b&gt;The problem&lt;/b&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;It is well known to the internet. If you have an Ajax application you have to somehow inform user in case Ajax fails. And in the modern world Ajax may fail very easily - WiFi switched off, bad smartphone connection et al. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also we have a Wicket which does hide all the Ajax work behind the scenes - you drop components to the page, they do communicate via Ajax.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;The (possible) solution&lt;/b&gt;&lt;/div&gt;&lt;div&gt;At least we employed the one for us.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1.&lt;/b&gt; Create the localized message key in the property file. We are using XML properties, so it'd look like &lt;i&gt;&lt;entry key="ajaxCommunicationFailedMessage"&gt;Ajax failed! Reload please&lt;/entry&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;entry key="ajaxCommunicationFailedMessage"&gt;&lt;br /&gt;&lt;/entry&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;2.&lt;/b&gt;&lt;i&gt; &lt;/i&gt;Create a function in one of the javascript files you always load. You may do it inline, but the function in the file makes it easier to change.  My guess it should survive absence of the Wicket too. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;AlertError here is the generic error function showing jQueryUI custom dialog.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;function tryRegisterWicketAjaxOnFailure(message) {&lt;br /&gt;   if (!Wicket || !Wicket.Ajax) {&lt;br /&gt;       return;&lt;br /&gt;   }&lt;br /&gt;   Wicket.Ajax.registerFailureHandler(function() {&lt;br /&gt;        alertError(message, 0, 'center', true);&lt;br /&gt;   });&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;3.&lt;/b&gt; As our tryRegister takes a &lt;i&gt;message &lt;/i&gt;parameter we need to pass it from the Wicket. So, in your &lt;i&gt;BasePage.java&lt;/i&gt; or whatever code just add &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre&gt;add(new HeaderContributor(new IHeaderContributor() {&lt;br /&gt;   public void renderHead(IHeaderResponse response) {&lt;br /&gt;       response.renderOnDomReadyJavascript(&lt;br /&gt;           String.format("tryRegisterWicketAjaxOnFailure('%s')",&lt;br /&gt;           getString("ajaxCommunicationFailedMessage")));&lt;br /&gt;   }&lt;br /&gt;}));&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;4.&lt;/b&gt; Just enjoy it. You may put 'refresh' button, or a spinner at this dialog which would constantly check if the network is back. It's up to your creativity and demand.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-1717946435061339724?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=1717946435061339724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1717946435061339724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1717946435061339724'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2011/12/inform-user-about-ajax-failed-no.html' title='Inform user about Ajax failed (no network) in Wicket'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-3879687610501809900</id><published>2011-12-17T13:57:00.002+02:00</published><updated>2011-12-17T14:03:32.466+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Passing messages in method names? Why not!</title><content type='html'>&lt;span class="Apple-style-span" &gt;Have been working with &lt;a href="http://code.google.com/p/mockito/"&gt;Mockito&lt;/a&gt; awesome mocking framework (i LOVE it). It also does use &lt;a href="http://code.google.com/p/hamcrest/"&gt;Hamcrest&lt;/a&gt; matcher as an option for matching its arguments. &lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;So, say you don't want users of your library to implement interface directly but rather'd like force them to use the Base implementation of this interface and extend it instead? Putting away the  reasons which led to this situation, here's how it may be accomplished:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;package org.hamcrest;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;public interface Matcher&lt;t&gt;  extends org.hamcrest.SelfDescribing {&lt;/t&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;    boolean matches(java.lang.Object o);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;    void &lt;b&gt;_dont_implement_Matcher___instead_extend_BaseMatcher_&lt;/b&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;Every time you'll try to create a direct implementation of this interface, you'll get this weird method which would tell you what to do. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;Good or bad? To me rather bad; something is wrong in design if you offer interface but don't allow users to use it. On the other side it may be good, as BaseMatcher gives some bells and whistles and you don't always know about good base subclass. Also, this may have been caused by some external reasons. &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-3879687610501809900?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=3879687610501809900' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3879687610501809900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3879687610501809900'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2011/12/passing-messages-in-method-names-why.html' title='Passing messages in method names? Why not!'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-3246541676081334481</id><published>2011-12-15T23:33:00.005+02:00</published><updated>2011-12-16T19:29:22.075+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><title type='text'>Wicket DownoadLink and AjaxDownload with non-ascii filenames</title><content type='html'>&lt;div&gt;&lt;b&gt;The problem - yet unsolved for me :(&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;You have an Apache Wicket application (in my case, this is wicket 1.4.x). You have a page which asks user to download some content and then lets download it. Content is dynamically generated (file?). It should have a name (default one) on client's machine. Name may have cyrillic (or Chinese) symbols.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Symptoms are well described here &lt;a href="http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http"&gt;http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Behavior and the way to overcome it are well described on &lt;a href="http://www.codeproject.com/KB/aspnet/NonUSASCII.aspx"&gt;http://www.codeproject.com/KB/aspnet/NonUSASCII.aspx&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solutions&lt;/b&gt;&lt;/div&gt;&lt;div&gt;First of all, I was unable to solve this completely :(&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Coming from StackOverflow post, the good way to do would be to form the URL ending with a filename (URL-encoded), and show no filename in Content-Disposition header. All other tricks and tips work not well under different browsers.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wicket usual approach is to use either &lt;a href="http://wicket.apache.org/apidocs/1.4/org/apache/wicket/markup/html/link/DownloadLink.html"&gt;DownloadLink&lt;/a&gt; or &lt;a href="https://cwiki.apache.org/WICKET/ajax-update-and-file-download-in-one-blow.html"&gt;AjaxDownload&lt;/a&gt; (thank you guys for such a good solution! Liked it much). First of them is using usual wicket URL coding strategy and second - pretty much the same, being a AjaxBehavior and thus IBehaviorListener. That far I could see no real way to change these URLs. The issue is that both of those don't allow for custom URLs, they are actually plugged into Wicket's infrastructure of page-component-iBehaviorListener-RequestCycle-RequestCodingStrategy chain, so we don't have direct control over it. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One solution proposed by Martin Grigorov on the wicket-users mailing list was to use &lt;/div&gt;&lt;div&gt;&lt;div&gt; &lt;a href="http://wicketinaction.com/2011/07/wicket-1-5-mounting-resources/"&gt;http://wicketinaction.com/2011/07/wicket-1-5-mounting-resources/&lt;/a&gt; for mounting, but that did not work out for me as I needed to use containing page's model to generate the actual data. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fail :( &lt;/div&gt;&lt;div&gt;Will up if any luck.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-3246541676081334481?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=3246541676081334481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3246541676081334481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3246541676081334481'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2011/12/wicket-downoadlink-and-ajaxdownload.html' title='Wicket DownoadLink and AjaxDownload with non-ascii filenames'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-8753688297388671704</id><published>2011-12-15T22:17:00.002+02:00</published><updated>2011-12-15T22:18:25.289+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wicket'/><title type='text'>Wicket this time</title><content type='html'>another incarnation, switching to wicket-related posting as we're doing wicket jobs at the moment. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hopefully experiences shared here would save someone's time -- that's a good enough reward.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-8753688297388671704?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=8753688297388671704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/8753688297388671704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/8753688297388671704'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2011/12/wicket-this-time.html' title='Wicket this time'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-1093866814580044411</id><published>2011-02-18T22:04:00.003+02:00</published><updated>2011-02-18T23:00:51.776+02:00</updated><title type='text'>Java SFTP server review - current state</title><content type='html'>The life goes on, the new tasks emerge and new research challenges appear. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This time we got the 'heritage' - strangely coupled old system with unclear signal paths &lt;span class="Apple-style-span" &gt;(write/poll filesystem instead of doing a local notification call)&lt;/span&gt;, weird predicates&lt;span class="Apple-style-span" &gt; (the file is considered uploaded as soon as 1 hour passes from the start of the upload) &lt;/span&gt;and really bad heterohenous design. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The target of the system is get some files uploaded via SFTP (SSH File Transfer Protocol) protocol and process them with some rules, producing output files and making them accessible via the same SFTP. As most of the system is written in Java, we decided to try find the Java SFTP Server to replace part of the existing system. Good things about such an rearchitecturing:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Making signals simple.&lt;/li&gt;&lt;li&gt;Having control over filesystem, clients and authentication.&lt;/li&gt;&lt;li&gt;Introduce uniform build and deploy procedures for the whole system.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;A little trouble is that one should distinguish between SFTP and FPTS (FTP over SSL) protocols, as they are completely different. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Having all that in mind, with the good mood we started our little research. Found out some libraries:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://mina.apache.org/sshd/"&gt;Apache Mina SSHD&lt;/a&gt;. Sister project of the &lt;a href="http://mina.apache.org/ftpserver/"&gt;Apache FtpServer&lt;/a&gt;, this one looks really good in terms of the object design and operation. Code is yet a little fresh, but object breakup is really awesome. We collected our server with the Spring beans and that was pretty easy - to replace the key provider, specify key storage, authenticator and more more other things.&lt;br /&gt;If you don't want to bother configuring it yourself, the factory gives you pretty good result as it is.&lt;br /&gt;Being a generic SSH server, Apache SSHD is capable of running SCP and SFTP. Unfortunately, SFTP support is now outdated, and supports only the protocol version 3 (current is 5 or 6). :( We could not use it for the project, as for us it is crucial to have WinSCP support in, and that does not work with protocol v3. After asking about new version guys on the mailing list told me that it'd be awesome if someone implemented that. Who knows if I have some free time, why not? :0&lt;br /&gt;License is strict &lt;b&gt;GPL&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/sshtools/"&gt;SshTools&lt;/a&gt; is another implementation of the same. Has declared support of the SFTP, SSH and lots of other stuff. Designed pretty good too, has also notion of virtual file system which is very useful if one needs to move storage to DB or process files on the fly. On the other hand, has few documentation and is also licensed under &lt;b&gt;GPL&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://javasecureftpd.sourceforge.net/"&gt;JavaSecureFTPd&lt;/a&gt; the project is dead as the stone is. &lt;b&gt;GPL&lt;/b&gt;, but no one cares :)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sshtools.com/en/j2ssh-maverick/"&gt;J2SSH Maverick&lt;/a&gt; commercial; we did not ever try it, but the rumor says it is pretty good. Has all necessary protocol support.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;So, for now situation looks following way - if you have a java app and need to embed SFTP server functionality to it, you either need to try SshTools, help Apache SSHD with the new protocol ;) or pay money for the commercial one. &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not yet sure what we stick to...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-1093866814580044411?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=1093866814580044411' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1093866814580044411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1093866814580044411'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2011/02/java-sftp-server-review-current-state.html' title='Java SFTP server review - current state'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-5194198220175921163</id><published>2011-02-04T11:27:00.002+02:00</published><updated>2011-02-04T11:29:11.565+02:00</updated><title type='text'>Reviving for the second time</title><content type='html'>Finally, the time has come.&lt;br /&gt;I'm about to change job.&lt;br /&gt;I'm about to change an occupation to something a little different.&lt;br /&gt;&lt;br /&gt;Got a new laptop to support my new activities while on the go :) got a new passion and new belief in all the good.&lt;br /&gt;&lt;br /&gt;Hopefully will finally establish this blog posting the way i wanted to originally -- one technical posting a week. Think i'll have pretty much of stuff to write on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-5194198220175921163?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=5194198220175921163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5194198220175921163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5194198220175921163'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2011/02/reviving-for-second-time.html' title='Reviving for the second time'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-3743414010284363481</id><published>2010-07-01T11:01:00.005+03:00</published><updated>2010-07-01T11:06:32.312+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='KISS'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Download all java older releases</title><content type='html'>Ok, i know that at least once in the life java programmer has to download jdk 1.3.0_u03 to reproduce the old, freaky and disturbing issue on the legacy system.&lt;br /&gt;&lt;br /&gt;Because we need to support this system.&lt;br /&gt;&lt;br /&gt;Searching for such a download main be a pain in the butt, unless we know the magic url - &lt;a href="http://java.sun.com/products/archive/"&gt;http://java.sun.com/products/archive/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Yes, I know that's no more Sun, but it anyway allows you to download specific versions of JDK, JRE and other stuff! Which is really useful for real-life experience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-3743414010284363481?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://java.sun.com/products/archive/' title='Download all java older releases'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=3743414010284363481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3743414010284363481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3743414010284363481'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2010/07/download-all-java-older-releases.html' title='Download all java older releases'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-1419054506006979692</id><published>2010-03-07T13:43:00.002+02:00</published><updated>2010-03-07T13:46:18.484+02:00</updated><title type='text'>New blog platform - does it worth it?</title><content type='html'>Hello again.&lt;br /&gt;&lt;br /&gt;I'm thinking of moving to the shared hosting with own domain name and Wordpress installed - seem to like more configuration.&lt;br /&gt;&lt;br /&gt;It is now up with the blogger imported.&lt;br /&gt;&lt;a href="http://lexaux.net.ua/wordpress"&gt;http://lexaux.net.ua/wordpress&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Try it - do you feel it comfortable? Like the styles? Any ideas on whether this change may be good or bad?&lt;br /&gt;&lt;br /&gt;Thank you!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-1419054506006979692?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=1419054506006979692' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1419054506006979692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1419054506006979692'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2010/03/new-blog-platform-does-it-worth-it.html' title='New blog platform - does it worth it?'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-2733452552729662571</id><published>2010-03-07T11:42:00.006+02:00</published><updated>2010-03-07T12:27:09.964+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KISS'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><title type='text'>Show effect - collecting ideas!</title><content type='html'>Hello, my dear fellows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Show effect - as is&lt;/span&gt;&lt;br /&gt;I have recently thought of the 'Show effect'. You know it  - when you are presenting your application, or the new iteration to the customer (or anyone external) - you frequently run into situation when the small action results in a large stack trace spanned for  the screen?&lt;br /&gt;&lt;br /&gt;Imagine the demo to your customer. You:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;show nice things - feature A is implemented&lt;br /&gt;&lt;/li&gt;&lt;li&gt;show great things - feature B which is very important for the business - is implemented! (applause on the background)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;show awesome things - the designs ARE there, even if they were provided 2 days ago!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;and then you are about to show little bit of functionality (notifying user about their registration), which is not that important (and thus not that verified) - you get an awful error statring with text  &lt;span style="font-family:courier new;"&gt;Unhandled exception java.lang.NullPointerException&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Then all your show becomes a bit compromised.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Minimize your risks with smaller efforts&lt;/span&gt;&lt;br /&gt;So, I kept thinking on this for a while - how does one minimize these 'show' risks?&lt;br /&gt;I have been feeling this myself - we had a demo each week for 5-6 weeks with a customer, and we had to demonstrate the progress.&lt;br /&gt;It is pretty hard to show significant feature progress within a week, isn't it? And we were on really tight schedule.&lt;br /&gt;So, these are several things I figured out - sure that I'm not the first who found them, but better would be if you the readers would get them from other's experience than from own:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Time and connection. Be sure that you don't make everyone wait too much and also that everyone is setup for the show. In the distributed teams it is common that dev team is located in different country, so that the technical solutions for presentations are being used (screensharing services and the voice calls usually)&lt;br /&gt;Make sure &lt;span style="font-weight: bold;"&gt;everyone knows where to get and how to setup the screensharing &lt;/span&gt;before you start the show. Provide your help if needed.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Always have a&lt;span style="font-weight: bold;"&gt; plan of presentation&lt;/span&gt;. Even if the things are simple, you need to have written plan before you so you don't waste time thinking on 'what should I click next?'. You should be presenting your work in such a way so &lt;span style="font-weight: bold;"&gt;your listeners feel that you are completely confident with what you are doing&lt;/span&gt;.&lt;br /&gt;Surely, there is always a place for unforseen changes - your customer may ask you to perform some action which does not fit to your plan. Be calm and confident :)&lt;/li&gt;&lt;li&gt;Rehearse the demo, at least 2 times, following the written steps you've done in item 2 of this list.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Try not to show too much - if some features are half-implemented you'd rather not show them than make the whole appearance of the project half-complete.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make sure no one could compromise your demo without knowing it. Good point here is that you ask no &lt;span style="font-weight: bold;"&gt;one to touch demo server during the show &lt;/span&gt;- by any means. 2 demo users logged in with the same accounts from different machines can lead to catastrophic results.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Don't forget about the user experience. If you are showing something to non-technical people (or even technical people but not of your organization) make sure that you have the unexpected exception page configured correctly - so that even if everything fails, user is still presented with the comfortable page with correct and unambigous steps of what to do next. Making custom pages for HTTP 500, 404 etc is also a nice thing.&lt;br /&gt;Another point here is that if the &lt;span style="font-weight: bold;"&gt;custom error page is not breaking the overall design feeling.  &lt;/span&gt;With this little trick subject of your demo would feel much more like a complete application (if it even is a prototype).&lt;/li&gt;&lt;li&gt;Put mocked things in. If you have designed sketches with very nice flash application you don't have yet (and your customer knows you don't) - put them as static pictures. And then as soon as the new feature is completed, replace that static pictures with the functioning parts.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Don't forget to say thanks once the demo is over - the people involved had to put off their ongoing work and tasks (which may be also important) to take participation in your show.&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;The question is still open&lt;/span&gt;&lt;br /&gt;It would be great if you could share some of your great experience - cases, practices, ideas - about the show effect.&lt;br /&gt;Thank you! And comment on, I'll add the wise thoughts to the list :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-2733452552729662571?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=2733452552729662571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2733452552729662571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2733452552729662571'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2010/03/show-effect-collecting-ideas.html' title='Show effect - collecting ideas!'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-6885584298919631797</id><published>2010-03-06T10:07:00.002+02:00</published><updated>2010-03-06T10:09:48.838+02:00</updated><title type='text'>Testing code hl</title><content type='html'>&lt;pre name="code" class="java"&gt;  &lt;br /&gt;public static void main() {&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Seems to be working now.&lt;br /&gt;&lt;br /&gt;Great thanks, dear Heisencoder! I've taken the steps at &lt;br /&gt;&lt;a href="http://heisencoder.net/2009/01/adding-syntax-highlighting-to-blogger.html"&gt;http://heisencoder.net/2009/01/adding-syntax-highlighting-to-blogger.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-6885584298919631797?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=6885584298919631797' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6885584298919631797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6885584298919631797'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2010/03/testing-code-hl.html' title='Testing code hl'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-6967901361669818721</id><published>2010-03-04T09:29:00.002+02:00</published><updated>2010-03-04T09:31:30.752+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maps'/><title type='text'>New York Homicide map</title><content type='html'>Here is a strange and terrible example of how maps can be used - &lt;a href="http://projects.nytimes.com/crime/homicides/map"&gt;http://projects.nytimes.com/crime/homicides/map&lt;/a&gt;&lt;br /&gt;The map shows in points the places where murders has happened in New York only, and how they were distributed. Looks like Central Park is the safest place&lt;br /&gt;&lt;br /&gt;Be Peaceful!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-6967901361669818721?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://projects.nytimes.com/crime/homicides/map' title='New York Homicide map'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=6967901361669818721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6967901361669818721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6967901361669818721'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2010/03/new-york-homicide-map.html' title='New York Homicide map'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-7374209429685449214</id><published>2010-02-28T11:22:00.003+02:00</published><updated>2010-02-28T11:27:48.698+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='time'/><title type='text'>Time Tracking</title><content type='html'>You might have asked yourself a question - what should be your own working day length in order to reach the best performance?&lt;br /&gt;There are different approaches for this.&lt;br /&gt;&lt;br /&gt;I always used to work more than intended/I'm paid for. E.g. for the last month or so I've been sitting in the office and performing my dues for 10-12 hrs a day :o)&lt;br /&gt;&lt;br /&gt;I started feeling this becoming a mo(:)bius strip - the longer you work the worse results are. I started feeling lack of patience, less creative insight and worse memory.&lt;br /&gt;&lt;br /&gt;So, the first experiment I've done is not to work on weekends :) at all.&lt;br /&gt;Next thing to try would be the 'kill' timer - I would start it as soon as I start working, and get off the work not depending on current status when it reaches 9 hours (9 is pretty a resaonable time, giving a hr for all the chit-chat, coffee breaks and lunch)&lt;br /&gt;&lt;br /&gt;Will see how it goes.&lt;br /&gt;&lt;br /&gt;I've already found a stopwatch for this - XNote Stopwatch - http://www.xnotestopwatch.com/ .&lt;br /&gt;Now need to try how it goes.&lt;br /&gt;&lt;br /&gt;Updates would follow soon - and have a good rest of the weekend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-7374209429685449214?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=7374209429685449214' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/7374209429685449214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/7374209429685449214'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2010/02/time-tracking.html' title='Time Tracking'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-6299535257948775788</id><published>2010-02-22T19:13:00.002+02:00</published><updated>2010-02-22T19:15:27.783+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maps'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Find a location by IP address</title><content type='html'>I was wondering how does one find a user's location (lat lng or city) by an IP address.&lt;br /&gt;Thankfully, found one free and (looks good).&lt;br /&gt;&lt;br /&gt;It offers APIs for different platforms (i'm happy with Javascript, yes).&lt;br /&gt;&lt;br /&gt;Here is the actual link - &lt;a href="http://www.maxmind.com"&gt;http://www.maxmind.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-6299535257948775788?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=6299535257948775788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6299535257948775788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6299535257948775788'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2010/02/find-location-by-ip-address.html' title='Find a location by IP address'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-6606656018321627290</id><published>2010-02-21T16:50:00.002+02:00</published><updated>2010-02-21T16:58:01.422+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>TDD - what should go first</title><content type='html'>Hi.&lt;br /&gt;&lt;br /&gt;Plenty of time has passed since the last time I opened The Blog.&lt;br /&gt;&lt;br /&gt;The topic of the day is 'how you write code good'. I don't remember times when I had enough time for the unittests. So, i'm trying to figure out several rules for myself to stay when working. Now the following sequence seems to be doing its job:&lt;br /&gt;&lt;br /&gt;How this happens now. I want to write a new business-logic method:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I create a method stub in a (bean). With the name only.&lt;/li&gt;&lt;li&gt;I think of what should this method get as input, and what should produce in output, in both normal and exceptional cases.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I modify method to the correct signature.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Then - i generate javadoc ;). In the javadoc I write down all the thoughts  I had when was doint 2. of this list.&lt;/li&gt;&lt;li&gt;I go to test. And create 1 test class for this method. In this class, I do write one-by-one all the cases (negative and positive) of how it's done.&lt;/li&gt;&lt;li&gt;Mocking - I'd use it, but yet we have a pretty well-done structure, so I can rely on live objects. Though, I'd try using mockito for the brand new things.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I run tests - they fail. That's good :)&lt;/li&gt;&lt;li&gt;I implement method - tetsts should start working. If one of them fails, I need to correct either the tests themselves or the method - depending on what's error.&lt;/li&gt;&lt;/ol&gt;/me knows that all the stuff above is well-known, wide-used and so on. The list should be treated as a reminder for myself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-6606656018321627290?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=6606656018321627290' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6606656018321627290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6606656018321627290'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2010/02/tdd-what-should-go-first.html' title='TDD - what should go first'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-5223599094224510441</id><published>2009-09-29T17:13:00.002+03:00</published><updated>2009-09-29T17:16:02.847+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Google Web Toolkit RPC serialization error and Collections.EMPTY_LIST (Collections.emptyList())</title><content type='html'>Well, heading made my day.&lt;br /&gt;Actually &lt;span style="font-family: courier new;"&gt;java.util.Collections.EMPTY_LIST&lt;/span&gt; and &lt;span style="font-family: courier new;"&gt;java.util.Collections.emptyList()&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;are not &lt;/span&gt;GWT-serializable and will cause SerializationException being thrown on attempt to transfer them across the wire.&lt;br /&gt;&lt;br /&gt;Beware!&lt;br /&gt;Use new &lt;span style="font-family: courier new;"&gt;ArrayList&lt;t&gt;()&lt;/span&gt; instead&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-5223599094224510441?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=5223599094224510441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5223599094224510441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5223599094224510441'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/09/google-web-toolkit-rpc-serialization.html' title='Google Web Toolkit RPC serialization error and Collections.EMPTY_LIST (Collections.emptyList())'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-7263406266724722362</id><published>2009-09-14T13:22:00.003+03:00</published><updated>2009-09-14T13:25:35.586+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>Integrating Google Analytics and GWT</title><content type='html'>Problem is that GWT apps are single-paged by their nature; they are applications. Though, having way to track user's action would be good. No one cancelled custom-written stuff, but mature analytics tools such as Google Analytics would give you much more functionality.&lt;br /&gt;&lt;br /&gt;Fast, and easy. Have not tried it yet - need to get rid of some pending work.&lt;br /&gt;here's link to google groups discussion - &lt;a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/61912b40a2ca7b2a/"&gt;http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/61912b40a2ca7b2a/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Shortly, you just load analytics script to your single-paged site as external script, and then manually call 'log' method from them to create records in analytics database. Pretty easy, huh?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-7263406266724722362?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=7263406266724722362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/7263406266724722362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/7263406266724722362'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/09/integrating-google-analytics-and-gwt.html' title='Integrating Google Analytics and GWT'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-5241441906188550535</id><published>2009-09-14T12:29:00.002+03:00</published><updated>2009-09-14T12:32:50.490+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'></title><content type='html'>Nice thread on GWT and SEO on GWT group.&lt;br /&gt;You might have seen Ian Bambury on the web, with his &lt;a href="http://examples.roughian.com/#Home"&gt;http://examples.roughian.com/#Home&lt;/a&gt; GWT example site.&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://groups.google.com/group/google-web-toolkit/browse_thread/thread/f8ddb306f25d39c4"&gt;this &lt;/a&gt;thread Ian describes way his application is indexed. Think this is cool, especially real-world experience in long-running gwt seo :)&lt;br /&gt;&lt;br /&gt;Thanks Ian.&lt;br /&gt;&lt;table id="top" class="h msg_meta" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr id="sep"&gt;&lt;td colspan="4" id="m" class="ctop" height="4"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td rowspan="2" id="r" class="ctr"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span class="fontsize2 author"&gt;&lt;span style="color: rgb(200, 137, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table id="top" class="h msg_meta" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr id="sep"&gt;&lt;td colspan="4" id="m" class="ctop" height="4"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td rowspan="2" id="r" class="ctr"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span class="fontsize2 author"&gt;&lt;span style="color: rgb(200, 137, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table id="top" class="h msg_meta" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr id="sep"&gt;&lt;/tr&gt;&lt;tr id="sep"&gt;&lt;td colspan="4" id="m" class="ctop" height="4"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td rowspan="2" id="r" class="ctr"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span class="fontsize2 author"&gt;&lt;span style="color: rgb(200, 137, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-5241441906188550535?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=5241441906188550535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5241441906188550535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5241441906188550535'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/09/nice-thread-on-gwt-and-seo-on-gwt-group.html' title=''/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-5358434922761468895</id><published>2009-09-04T21:46:00.002+03:00</published><updated>2009-09-04T21:49:48.302+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>Design anti-patterns</title><content type='html'>I have not had so much fun for some time.&lt;br /&gt;If you know what are design patterns - take some time to read through the document, I am sure you'll notice many wel-known real-life examples of this.&lt;br /&gt;&lt;br /&gt;That's where life meets theory:&lt;br /&gt;&lt;a href="http://brajeshwar.com/2005/resign-patterns-ailments-of-unsuitable-project-disoriented-software/"&gt;http://brajeshwar.com/2005/resign-patterns-ailments-of-unsuitable-project-disoriented-software/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-5358434922761468895?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=5358434922761468895' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5358434922761468895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5358434922761468895'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/09/design-anti-patterns.html' title='Design anti-patterns'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-754401511513647963</id><published>2009-08-18T21:04:00.003+03:00</published><updated>2009-08-18T21:56:29.898+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><title type='text'>Metrics - good or bad?</title><content type='html'>&lt;span style="font-size:180%;"&gt;Outside world example&lt;/span&gt;&lt;br /&gt;When participating in software projects, people like to speak about metrics.&lt;br /&gt;This is caused by the nature of the software projects. Program develipment oftenly turns to the &lt;span style="font-weight: bold;"&gt;research task&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;You can easily track progress for the bridge construction. It's very easy. You can do 2 things:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Get financial documents and reports and see how it's going.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Go to the construction place and see how it works.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ask constructors for report. Constructors would tell you, that 'Bridge is complete for 23.56%, first phase is done for 98%, seconds phase - for 33%'&lt;/li&gt;&lt;li&gt;Also - there are some numbers about quailty. For example, 4% of weldings need to be redone, 1.23% of surface paintings fails, etc...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Business people are happy. They have numbers. Using these numbers they can see progress, make plans and feel them pushing the thing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Metrics in software projects - good or bad?&lt;/span&gt;&lt;br /&gt;What about software projects?&lt;br /&gt;You can not go to the construction place. You can ask programmers about 'How it's going?', and you'll get the answer 'Doing ok.'&lt;br /&gt;&lt;br /&gt;You need numbers to show to business people. Business people will become upset very soon if you will tell them for a month that 'Progress is good!'&lt;br /&gt;&lt;br /&gt;Also, having numbers stimulates programmers.&lt;br /&gt;Here are several examples:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Code coverage. Percentage of code lines 'covered' with unit tests. Covered means here that when tests execute, this line is reached by execution.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Commit percentage. Mr. Alex is committing (putting code to repository) 3 more times than mr. Andrew. We need to punish Andrew!&lt;/li&gt;&lt;li&gt;Usually, work breakdown exists in form of tickets - bugs, feature requests, development tasks. People LOVE having metrics on these. For example - 299 work items done, 1020 left for work. Or - this milestone is completed for 50% - 144 of 288 tickets closed.&lt;/li&gt;&lt;li&gt;Easiest - count of the code lines produced by a developer. &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:180%;"&gt;The Main Thought&lt;/span&gt;&lt;br /&gt;Metrics can do both things - indicat process, or hide it. As a business person, you can get positive reports during 2 months, showing that codebase grows speeds up and speeds up. But after those 2 month you'll face real f**ck-up.&lt;br /&gt;&lt;br /&gt;Metric should be sane and wise.&lt;br /&gt;&lt;br /&gt;You would not decide hospital to go to basing on the average temperature among all patients, would you?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-754401511513647963?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=754401511513647963' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/754401511513647963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/754401511513647963'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/08/metrics-good-or-bad.html' title='Metrics - good or bad?'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-6684476355153114354</id><published>2009-08-13T19:00:00.005+03:00</published><updated>2009-08-13T23:26:14.707+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>GWT Canvas widget - drawing in a browser</title><content type='html'>&lt;span style="font-size:180%;"&gt;Story&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I believe many of you felt that some thing are hard to acquire with pure DOM objects and maniputllation. DOM puts you into hard fram. If you &lt;span style="font-weight: bold;"&gt;ever&lt;/span&gt; tried make something round-cornered, you know that count of the libraries doing this exceeds any reasonable task.&lt;br /&gt;&lt;br /&gt;Methods used there are different: some use colored graphic corners, but don't allow you for selecting any color you want. Some of them need JavaScript runing on a page. Some need some weird markup, and tricks with the HyperText controls for IE. Some simply don't work well.&lt;br /&gt;&lt;br /&gt;So, why not just to draw?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;So, (how) can I draw in browser?&lt;/span&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Canvas_%28HTML_element%29"&gt;HTML 5 Canvas&lt;/a&gt; elements allows some drawings. But, making a web-application today, I'd not use this as a production decision. Simply because some old bad browsers don't know it.&lt;br /&gt;&lt;br /&gt;And we don't want to make people feel lost because they are using IE6, do we? There's a solution, though. It's name is &lt;a href="http://www.w3.org/TR/NOTE-VML.html"&gt;VML&lt;/a&gt;. It's Micro$oft answer to the SVG. (by the way, SVG is not that a good standard itself, too). Internet E$plorer does support VML, but the API is quite different from Canvas.&lt;br /&gt;&lt;br /&gt;If we take 2 coverage areas - one of browsers already covered with Canvas tag (FireFox, all webkits, Opera) and VML (IE's) - we'll have plenty solid browser coverage.&lt;br /&gt;&lt;br /&gt;The problems yet to be resolved is a cost of development. In order to get something working, you'll have spent more than twice more time than for single Canvas or for VML only.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;So, (how) can I draw in browser?  &lt;/span&gt;&lt;span style="font-size:180%;"&gt;(GWT way)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When someone says about masking differences between the browsers, I always think of GWT. That's the best thing I love in it.&lt;br /&gt;&lt;br /&gt;And, I used to search for vector graphics library for Google Web Toolkit.&lt;br /&gt;&lt;br /&gt;I found one (just as a proof-of-concept) in the &lt;a href="http://gwt-widget.sourceforge.net/"&gt;GWT-Widgets&lt;/a&gt; library. (There's also an &lt;a href="http://gwt-widget.sourceforge.net/demo/drawing/index.html#rect"&gt;interactive demo for the Canvas widget&lt;/a&gt; - you can draw different shapes over image just in a webpage without any flash, java or any other hard stuff).&lt;br /&gt;&lt;br /&gt;Actually, I liked it.&lt;br /&gt;Also, after incorporating the GWT-Widgets Canvas to a project, I found another one. This is &lt;a href="http://home.arcor.de/terrorcrew/"&gt;demo &lt;/a&gt;for newer Canvas wrapper, and this is &lt;a href="http://code.google.com/p/gwt-canvas/"&gt;&lt;span style="text-decoration: underline;"&gt;gwt-canvas project&lt;/span&gt; home page &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The least I wanted to  show you is the sample of Canvas working in the real world. The following is a way to see it (it's in Cyrillic, so I'll do verbose notes :) )&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The site is about calculation of the metal-plastic windows cost basing on different selections from user.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Open up &lt;a href="http://osnova.ks.ua/"&gt;http://osnova.ks.ua &lt;/a&gt;&lt;br /&gt;It loads slowly, but wait until all the stuff is loaded. &lt;/li&gt;&lt;li&gt;In the top navigation menu, select 'Посчитай!' item. This means 'Calculate' in english. It is the fourth item from the left, and it has vivid red background.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You'll see a 'Выберите тип конструкции...' blue link underlined in the center of screen. Click on it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You'll see basic shape selector. The shapes themselves are drawn with canvas.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Select one - and you'll get it big. Big shape with all sizes is also drawn with the help of canvas widget.&lt;/li&gt;&lt;/ol&gt;That's all for this site.&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:180%;"&gt;What I found good and bad in drawing on the webpage with GWT and Canvas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It works&lt;/li&gt;&lt;li&gt;It works in different browsers&lt;/li&gt;&lt;li&gt;It works fast enought&lt;/li&gt;&lt;li&gt;Instrument palette is enough for many basic features&lt;/li&gt;&lt;/ul&gt;Cons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;As it is PoC, there are some issues. I've seen that sometimes wide lines disappeared in IE, leaving wireframe only.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You can NOT draw text. The text you see there - it is just images with letters. Actually, there's a solution for this - but it's weird. There's a pair of client and serverside script. Client sends request to the server with the phraze it wants to get. Serverside has the text with all the alphabet as an image, and then glues the phraze, thus creating image with the desired text, and then passes that by to client.&lt;br /&gt;That's too heavy for such a simple task&lt;/li&gt;&lt;li&gt;It can be done more easily with Flash, but this is a double-sided penny. You'll need your users to have Flash installed. From the statistics of people coming to this blog, 3 of 80 don't have flash installed. That's too bad for big amount of people. :)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Hope this stuff will be useful for you!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-6684476355153114354?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=6684476355153114354' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6684476355153114354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6684476355153114354'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/08/gwt-canvas-widget-drawing-in-browser.html' title='GWT Canvas widget - drawing in a browser'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-6125393357373578384</id><published>2009-07-24T15:56:00.002+03:00</published><updated>2009-07-24T16:06:22.834+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='minimalizm'/><title type='text'>How to deal with big GWT applications</title><content type='html'>Well, this is a bit of personal experience.&lt;br /&gt;Instead of making extra-large GWT app having all the functions at one place I would use 'mixed' approach.&lt;br /&gt;&lt;br /&gt;'Mixed' means that we install different app features on different pages (yes, user would need to change page from time to time) and exchange data through server session storage.&lt;br /&gt;&lt;br /&gt;This would give us several good points:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Page is (oftenly) refreshed, thus freeing memory :)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Not that much code to load/execute&lt;/li&gt;&lt;li&gt;Ability to make more clean code (not so much intermodule communications)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;More structured and less complex code (no 'overhead for common'). That's the main, I believe.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ease of content rendering.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Bad things:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It's not that sleek and smooth.&lt;/li&gt;&lt;li&gt;Lots of requests to server. Additional files loaded (.cache, .nocache, all dependenices all the time. it's cached, yes, but anyway...)&lt;/li&gt;&lt;li&gt;Weird compilation. Having 7 gwt compilations is even worthe than 1, I think. Though, can be well-automated with ant.&lt;/li&gt;&lt;li&gt;Can not use anymore stateless server (so, not that easy clustering/performance scaling)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;It's something that can be considered as 'good practice', and 'personal opinion'.&lt;br /&gt;If I were starting large GWT project now, I'd design it as described here.&lt;br /&gt;&lt;br /&gt;Btw, take a look at LinkedIn. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-6125393357373578384?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=6125393357373578384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6125393357373578384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6125393357373578384'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/07/how-to-deal-with-big-gwt-applications.html' title='How to deal with big GWT applications'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-6092981419759713429</id><published>2009-06-25T20:07:00.004+03:00</published><updated>2009-06-25T20:22:45.448+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Turn on English locale in psql PostgreSql client</title><content type='html'>&lt;span style="font-size:180%;"&gt;Problem with encoding (unicode PSQL and cp1251 terminal)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's kinda strange.&lt;br /&gt;When you run the psql - PostgreSQL RDBMS console client - it picks up your current language (the one set up in your system). That's really cool, but it works in unicode, and if your terminal is not unicode (for example, cmd.exe on windows), you'll see something weird.&lt;br /&gt;That's the example. (take a look at weird symbols after the 'count' results. I really think this is analog of 'row' in Russian)&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_FD9Pz4P5wMc/SkOxAtq0deI/AAAAAAAADzg/hCjnMWcZgS4/s1600-h/psql_wrong_encoding.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 382px; height: 79px;" src="http://4.bp.blogspot.com/_FD9Pz4P5wMc/SkOxAtq0deI/AAAAAAAADzg/hCjnMWcZgS4/s400/psql_wrong_encoding.PNG" alt="" id="BLOGGER_PHOTO_ID_5351315408063591906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;The easiest solution of psql/terminal encoding problem you'd think of ever&lt;/span&gt;&lt;br /&gt;Just type in&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family:courier new;"&gt;set LC_MESSAGES=en &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;in windows, or&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family:courier new;"&gt;export LC_MESSAGES=en &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;in UNIX, and you'll get it working. The cool thing is that it is written in psql documentation, but kinda not-that-easily-found. :)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_FD9Pz4P5wMc/SkOyQnJaxCI/AAAAAAAADzo/QHMJ30kFdpo/s1600-h/psql_ok.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 378px; height: 97px;" src="http://2.bp.blogspot.com/_FD9Pz4P5wMc/SkOyQnJaxCI/AAAAAAAADzo/QHMJ30kFdpo/s400/psql_ok.PNG" alt="" id="BLOGGER_PHOTO_ID_5351316780702417954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-6092981419759713429?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=6092981419759713429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6092981419759713429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6092981419759713429'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/06/turn-on-english-locale-in-psql.html' title='Turn on English locale in psql PostgreSql client'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_FD9Pz4P5wMc/SkOxAtq0deI/AAAAAAAADzg/hCjnMWcZgS4/s72-c/psql_wrong_encoding.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-3775498031413309068</id><published>2009-06-23T14:54:00.002+03:00</published><updated>2009-06-23T14:57:18.936+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>News from python struggle field</title><content type='html'>Decided not to use templating  yet, but generate the html imperatively with the custom module, based on the JAxml.&lt;br /&gt;Module should have simple notions of:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Atomic elements - paragraphs, links, text, &amp;amp;c&lt;/li&gt;&lt;li&gt;Grids (customizable and agile)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Automatic resolution of the attached pictures (through href="cid:picture1")&lt;/li&gt;&lt;/ul&gt;Don't have much time now really, hope to get on this after we release on the work :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-3775498031413309068?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=3775498031413309068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3775498031413309068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3775498031413309068'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/06/news-from-python-struggle-field.html' title='News from python struggle field'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-2428864174790160061</id><published>2009-06-19T20:31:00.002+03:00</published><updated>2009-06-19T20:33:32.136+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Searching for a good email/html....</title><content type='html'>Well. I'm searching for a good templating engine for python. For filling data (such as reports).&lt;br /&gt;May be not only html, but full reporting library/set of routines.&lt;br /&gt;&lt;br /&gt;If anyone knows - let me know.&lt;br /&gt;&lt;br /&gt;Once I find it - I'll post results here :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-2428864174790160061?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=2428864174790160061' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2428864174790160061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2428864174790160061'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/06/searching-for-good-emailhtml.html' title='Searching for a good email/html....'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-1449974195611037159</id><published>2009-06-19T11:11:00.002+03:00</published><updated>2009-06-19T11:18:50.571+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='minimalizm'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Learning python</title><content type='html'>I think I like Python very much...&lt;br /&gt;&lt;br /&gt;I spent several days reading book about 2hrs a day, and wrote small script which reads database, prepares report, generates html content and sends this content as an email message (both html and text version, for old/specific clients).&lt;br /&gt;&lt;br /&gt;The script is scheduled with the CRON and it just worked. So, i think this is really good result for the language you don't know.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;understand execution model&lt;/li&gt;&lt;li&gt;incorporate database querying support (with named parameters, yeah :)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;understand how to generate html (I'm using &lt;a href="http://www.librelogiciel.com/software/jaxml/action_Presentation"&gt;jaxml &lt;/a&gt;module, it's kinda cool.  &lt;span style="color: rgb(192, 192, 192);"&gt;creating html document just looks like doc.html().body(color="red").p(string, align="center")&lt;/span&gt; )&lt;/li&gt;&lt;li&gt;understand how to send e-mail message (yes, mime knowledge gives good help, but neretheless. I'm sending this through GMAIL - so, SSL support is also here)&lt;/li&gt;&lt;li&gt;understand how to work with dates (that's a bit ugly now, I'm sure there's better way of obtaining today timestamp than &lt;span style="font-family: courier new;"&gt;time.mktime(datetime.date.today().timetuple())&lt;/span&gt; )&lt;/li&gt;&lt;/ol&gt;All this, resulting in a working solution, took for me about 6-7 hrs from the start. Without language knowledge at all :) : )&lt;br /&gt;&lt;br /&gt;Learn python!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-1449974195611037159?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=1449974195611037159' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1449974195611037159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1449974195611037159'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/06/learning-python.html' title='Learning python'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-3522181421996000684</id><published>2009-06-16T14:25:00.001+03:00</published><updated>2009-06-16T14:26:59.379+03:00</updated><title type='text'>What's up with me</title><content type='html'>One may be interested in what's really going on...&lt;br /&gt;I'm working. Working really hard, and have no minute of free time to drop something to blog :(&lt;br /&gt;&lt;br /&gt;So, just as there is free second, I'll continue on this.&lt;br /&gt;&lt;br /&gt;Btw, this message should better go to Twitter. Maybe, need to create an account there...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-3522181421996000684?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=3522181421996000684' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3522181421996000684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3522181421996000684'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/06/whats-up-with-me.html' title='What&apos;s up with me'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-2095584090822095911</id><published>2009-05-27T18:50:00.002+03:00</published><updated>2009-05-27T19:18:38.382+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>CMD replacement with some nice features</title><content type='html'>Just found out how much I dislike the standard Windows XP command prompt (cmd.exe).&lt;br /&gt;&lt;br /&gt;So, found project named &lt;a href="http://sourceforge.net/projects/console"&gt;Console&lt;/a&gt;. Here's brief list of its features:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Support for tabs&lt;/li&gt;&lt;li&gt;Transparency (don't think anyone _needs_ this really, but, anyway - that's a feature)&lt;/li&gt;&lt;li&gt;Can make long lines unwrapped. But did not find a way to scroll to the right :)&lt;/li&gt;&lt;li&gt;Good fonts from the start :)&lt;/li&gt;&lt;li&gt;Lines selection model instead of box selection model in cmd.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;And that's really strange:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Yes, it supports resizing, but does not support maximization. I found this weird&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Generally speaking, this is useful, especially when used together with &lt;a href="http://unxutils.sourceforge.net/"&gt;UnixUtils&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-2095584090822095911?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://sourceforge.net/projects/console' title='CMD replacement with some nice features'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=2095584090822095911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2095584090822095911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2095584090822095911'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/05/cmd-replacement-with-some-nice-features.html' title='CMD replacement with some nice features'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-3102345581913404338</id><published>2009-05-26T14:40:00.002+03:00</published><updated>2009-05-26T14:45:30.094+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='disappointment'/><title type='text'>GWT FlexTable bug</title><content type='html'>Just faced a complex and really bad bug with GWT's FlexTable.&lt;br /&gt;&lt;br /&gt;It tends to forget about the cells removed! So, if I remove some cells, and then add some more, the old ones randomly appear.&lt;br /&gt;&lt;br /&gt;Problem is that I was developing really complex layout with dynamic cell manipulation and hard use of rowspan/colspan. And spent 4 hrs fixing algorithm :( :( :(..&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Technical details&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Methods FlexTable::clearRow() and FlexTable::clearCell() seem to be broken (at least in GWT 1.5). They  do their job, but sometimes deleted cells reappear in table. That's frustrating. &lt;/li&gt;&lt;li&gt;This is also stated on the Google code tracker : &lt;a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1766&amp;amp;q=flexTable&amp;amp;sort=type"&gt;Issue 1766&lt;/a&gt;&lt;/li&gt;&lt;li&gt;I avoided this problem by replacing calls to clearRow and clearCell to FlexTable::clear(). Yes, that's a heavy solution - but it did fit for me :)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-3102345581913404338?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/google-web-toolkit/issues/detail?id=1766&amp;q=flexTable&amp;sort=type' title='GWT FlexTable bug'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=3102345581913404338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3102345581913404338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3102345581913404338'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/05/gwt-flextable-bug.html' title='GWT FlexTable bug'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-1953155535332737038</id><published>2009-05-19T14:16:00.006+03:00</published><updated>2009-05-20T11:12:10.563+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Hibernate IN statement</title><content type='html'>&lt;span style="color: rgb(0, 0, 0);font-size:180%;" &gt;Problem with hibernate selections of ranged values (sets)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;update (2009-05-19):&lt;br /&gt;&lt;/span&gt;Thanks to Denis Tsyplakov, found &lt;a href="http://http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/#queryhql-expressions"&gt;HQL in expression&lt;/a&gt; :D. Problem comlpetely closed. So, one should better user HQL, not criteries. &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Disclaimer: there's nothing really new in this article. You might know everything which is written here. This posting is mostly for myself and people facing the same problem (with memory :)&lt;/span&gt;  &lt;span style="color: rgb(0, 0, 0);"&gt;I just forgot how this should be done. Thanks to colleagues returning me to the right way.&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;Here is the problem described:&lt;/span&gt; &lt;ol style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;We have a mapped Hibernate entity. &lt;/li&gt;&lt;li&gt;This entity has some field. :) For example. Let it be some enumeration (status?).&lt;/li&gt;&lt;li&gt;We need to select the entities with several statuses. &lt;/li&gt;&lt;/ol&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;Here's example of such entity:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;@Entity&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;@Table(name="entity")&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;public class Entity {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;    @Id&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;    @Column(name="entity_id")&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;    private long id;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;    @Column(name="entity_status")&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;    private Status entityStatus;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;     // Getters and setters. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;and example of the enumeration:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;public enum Status {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;    STARTED, COMPLETED, NOT_STARTED;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;&lt;span style="font-weight: bold;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:georgia;" &gt;We need, for example, select all STARTED and COMPLETED entities, not touching NOT_STARTING.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Solution&lt;/span&gt;&lt;br /&gt;There are 3 valid ways I see:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;&lt;span style="color: rgb(0, 0, 0);font-family:georgia;" &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;We make a query for STARTED entities, and then other query - for NOT_STARTED. After the results are gathered the result objects are mixed. &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Cons: you'll need to do N queries for N statuses. Quite bad, isn't it?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Pros: don't really know. Maybe, it's simple? ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;&lt;span style="color: rgb(0, 0, 0);font-family:georgia;" &gt;We construct a query, with OR statement in the middle. That how it should look like:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;select e from Entity e where e.status=1 or e.status=2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;I'm using the 1, 2 numbers and not the enum names especially to make statement less complicated.&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Cons: single query, but static. That means that if you need to form the list of statuses to load at runtime (set of checkboxes?), you'll need to glue HQL. And any query gluing smells very bad. &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;br /&gt;Pros: simple, and if you are sure the list of statuses to load would never change... if you are SURE.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;&lt;span style="color: rgb(0, 0, 0);font-family:georgia;" &gt;&lt;span style="color: rgb(153, 153, 153);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;And the least one I see. We may perform selection using the &lt;a href="https://www.hibernate.org/hib_docs/v3/api/org/hibernate/Criteria.html"&gt;Criterion Hibernate API&lt;/a&gt;, not the query language. The 'query' itself would look like the following code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 153, 153);font-family:courier new;" &gt;List&lt;status&gt; statusList = new ArrayList&lt;status&gt;();&lt;/status&gt;&lt;/status&gt;&lt;/span&gt; &lt;span style="font-weight: bold; color: rgb(153, 153, 153);font-family:courier new;" &gt;statusList.add(Status.STARTED); stausList.add(Status.COMPLETED);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;Criteria c = session.createCriteria(Entity.class).&lt;/span&gt; &lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;                add(Restriction.in("status", statusList));&lt;/span&gt; &lt;span style="color: rgb(153, 153, 153); font-weight: bold;font-family:courier new;" &gt;c.list(); // get the list of entities with corresponding status.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Cons:uses Criteria API, which really is a code. So, if  you plan to store HQL queries in a (properties) file, this way is not for you.&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;br /&gt;Pros: fast, simple and dynamic. That's what I left with. &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-1953155535332737038?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=1953155535332737038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1953155535332737038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1953155535332737038'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/05/hibernate-in-statement.html' title='Hibernate IN statement'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-3304365434258271752</id><published>2009-05-12T16:02:00.003+03:00</published><updated>2009-05-12T16:06:07.159+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>Splitting blogs</title><content type='html'>So, I decided to split the blog to two separate 'threads'.&lt;br /&gt;&lt;br /&gt;This leaves for technical things, as well as some interesting reports, everything related to work, IT, outsourcing, java and Unix. And the new one (&lt;a href="http://way-up-only.blogspot.com/"&gt;http://way-up-only.blogspot.com/&lt;/a&gt;) is designated for personal things.&lt;br /&gt;&lt;br /&gt;Yes, the new one is cyrillic. :)&lt;br /&gt;&lt;br /&gt;So - welcome!&lt;br /&gt;&lt;br /&gt;The first 'real' posting will be about our trip to Crimea mountains. Soon, really soon... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-3304365434258271752?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://way-up-only.blogspot.com/' title='Splitting blogs'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=3304365434258271752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3304365434258271752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3304365434258271752'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/05/splitting-blogs.html' title='Splitting blogs'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-2002391300907091772</id><published>2009-05-12T15:16:00.002+03:00</published><updated>2009-05-12T15:17:40.640+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>I'm back!</title><content type='html'>Just got back from the trip to Crimea mountains. That is really cool!&lt;br /&gt;Photos will be soon.&lt;br /&gt;&lt;br /&gt;Also, I'm feeling this blog became less technical. So, I think, I'll split it to two :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-2002391300907091772?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=2002391300907091772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2002391300907091772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2002391300907091772'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/05/im-back.html' title='I&apos;m back!'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-1351522015851270453</id><published>2009-05-06T14:14:00.005+03:00</published><updated>2009-05-06T16:28:49.313+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>PdfChm - find the freshest books for FREE</title><content type='html'>The PdfChm resource is a large collections of books on programming, science, maths, law, photography and lots more. There are even books on crime.&lt;br /&gt;&lt;br /&gt;So, enjoy. Registration is free, but you can download no more than 2-3 books per day.&lt;br /&gt;&lt;br /&gt;There are pdf, chm :) , ps, djvu, and other formats available.. Readable anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-1351522015851270453?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://pdfchm.com' title='PdfChm - find the freshest books for FREE'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=1351522015851270453' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1351522015851270453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1351522015851270453'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/05/pdfchm-find-freshest-books-for-free.html' title='PdfChm - find the freshest books for FREE'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-8995465110348572727</id><published>2009-04-27T14:47:00.004+03:00</published><updated>2009-04-27T15:09:38.994+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='minimalizm'/><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Good practices vs Bad practices</title><content type='html'>If you are software developer, or designer, or photographer, or engineer, &amp;amp;c, you may have heard following:&lt;br /&gt;&lt;blockquote&gt; &lt;span style="font-style: italic;"&gt;– there are good practices and bad practices, and you should always - i said ALWAYS - use good practices.&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;That's wrong. You should use good practices in 90% only. Not more. And also you should apply your head when deciding if to use that cool design pattern in this place.&lt;br /&gt;&lt;br /&gt;Have a look around, and you'll find tons of the examples.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You may have heard of database normalization. Basically, this is the way of developing DB schema powered by straight mathematic researches form relation theory. Idea is that if you follow that theory you'll never get data inconsistency. Opposed to this, there is denormalization, which is used 10 times more rarely than normalization, but brings beatiful performance shifts.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Rule of thirds in photography&lt;/span&gt; - split the frame into 9 common parts and situate the object in the crosses of the splitting lines. You'll concentrate viewers' attention on the object.&lt;br /&gt;- yes, that's true. And now go to any more or less interesting photo museum, and look how frames are organized. Basically, this is the second level of harmony ;)&lt;/li&gt;&lt;li&gt;You know - you should never use &lt;span style="font-weight: bold;"&gt;magic numbers&lt;/span&gt;. NEEEEVER! If i see something in your css code saying offsetWidth = (width - 16) + "px" I would not be happy with that.&lt;br /&gt;But nature owns all of us :) Following picture describes that very well.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_FD9Pz4P5wMc/SfWdWj6T1dI/AAAAAAAADnc/y4oNiM72bbo/s1600-h/gmail17margin.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 282px;" src="http://1.bp.blogspot.com/_FD9Pz4P5wMc/SfWdWj6T1dI/AAAAAAAADnc/y4oNiM72bbo/s320/gmail17margin.png" alt="" id="BLOGGER_PHOTO_ID_5329338744985343442" border="0" /&gt;&lt;/a&gt;Explanation:&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Google uses different stylesheets for different browsers. &lt;/li&gt;&lt;li&gt;Internet explorer handles 100% widths awfully. If you embed some element with paddings and margins into other element, it will take more than 100%, because IE does not use padding and margin values when calculating 100%&lt;/li&gt;&lt;li&gt;Width of the scrollbar in IE is 17px&lt;/li&gt;&lt;li&gt;There is a way of doing correct 100% width with IE. It utilizes IE css "expression" facility, and recalculates the width on each page event (even mouse move). This would be canonical way.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Although, Google decided to use -17px right margin just to stop loosing performance. It's easier, and better for both user and developer.&lt;/li&gt;&lt;/ul&gt;Don't you think it is beautiful?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;P.S. There's no attempt to reverse-engineer Google code - just attempt to learn how big guys work. No IP violated :) Google is a registered trademark of Google Inc.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-8995465110348572727?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=8995465110348572727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/8995465110348572727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/8995465110348572727'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/04/good-practices-vs-bad-practices.html' title='Good practices vs Bad practices'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_FD9Pz4P5wMc/SfWdWj6T1dI/AAAAAAAADnc/y4oNiM72bbo/s72-c/gmail17margin.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-1821279299055438346</id><published>2009-04-23T12:11:00.004+03:00</published><updated>2009-05-01T18:30:09.948+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='minimalizm'/><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Typetester - a little free service form choosing a font</title><content type='html'>So, you need to select a font for your&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Blog&lt;/li&gt;&lt;li&gt;Site&lt;/li&gt;&lt;li&gt;Publication&lt;/li&gt;&lt;li&gt;Page on the web&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;Or even worse - you have done that work partially, but now (after 2 month) you want to restore the work. And you just can't figure out what font you've used before :)&lt;br /&gt;&lt;br /&gt;If you are not professional in printing, I don't really think you'll be able to notice difference between Bitstream Vera Sans and Sans.&lt;br /&gt;&lt;br /&gt;So - typester is a &lt;a href="http://www.typetester.org/"&gt;solution for selecting correct font&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hope this will be useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-1821279299055438346?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.typetester.org/' title='Typetester - a little free service form choosing a font'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=1821279299055438346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1821279299055438346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1821279299055438346'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/04/typester-little-free-service-form.html' title='Typetester - a little free service form choosing a font'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-5662950302616808751</id><published>2009-04-21T11:32:00.005+03:00</published><updated>2009-04-21T11:42:30.903+03:00</updated><title type='text'>And finally - moved</title><content type='html'>All right, we've got where to live now.&lt;br /&gt;&lt;br /&gt;The only thing left is to buy something to sleep on. Currently we are sleeping on a half (upper:) of the bed, which lies on the wide piece of cardboard.&lt;br /&gt;&lt;br /&gt;By the way, do you know why beggars love cardboard that much? It is &lt;span style="font-weight: bold;"&gt;really warm&lt;/span&gt; :)&lt;br /&gt;&lt;br /&gt;And - some photos.&lt;br /&gt;&lt;br /&gt;1. View of the facade of our app (looking from the yard)&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_FD9Pz4P5wMc/Se2FRqWR33I/AAAAAAAADmk/SPcatoioQzY/s1600-h/facade.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 250px;" src="http://3.bp.blogspot.com/_FD9Pz4P5wMc/Se2FRqWR33I/AAAAAAAADmk/SPcatoioQzY/s320/facade.JPG" alt="" id="BLOGGER_PHOTO_ID_5327060472721170290" border="0" /&gt;&lt;/a&gt;2. Balcony:&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_FD9Pz4P5wMc/Se2Fb9kQweI/AAAAAAAADms/6cQzQUl4yLc/s1600-h/balcony.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 221px;" src="http://3.bp.blogspot.com/_FD9Pz4P5wMc/Se2Fb9kQweI/AAAAAAAADms/6cQzQUl4yLc/s320/balcony.JPG" alt="" id="BLOGGER_PHOTO_ID_5327060649678782946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;3. And, surely, we still need to make some order in the house: :)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_FD9Pz4P5wMc/Se2GSf4US4I/AAAAAAAADm0/Qu8lVtrl_Oc/s1600-h/order.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 226px;" src="http://1.bp.blogspot.com/_FD9Pz4P5wMc/Se2GSf4US4I/AAAAAAAADm0/Qu8lVtrl_Oc/s320/order.JPG" alt="" id="BLOGGER_PHOTO_ID_5327061586602642306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;4. Real owner of all the stuff:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_FD9Pz4P5wMc/Se2G2-kM4LI/AAAAAAAADm8/w5xiqTpCZQI/s1600-h/kukusia.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 250px;" src="http://3.bp.blogspot.com/_FD9Pz4P5wMc/Se2G2-kM4LI/AAAAAAAADm8/w5xiqTpCZQI/s320/kukusia.jpg" alt="" id="BLOGGER_PHOTO_ID_5327062213315059890" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-5662950302616808751?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=5662950302616808751' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5662950302616808751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5662950302616808751'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/04/and-finally-moved.html' title='And finally - moved'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_FD9Pz4P5wMc/Se2FRqWR33I/AAAAAAAADmk/SPcatoioQzY/s72-c/facade.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-2422816100020945199</id><published>2009-04-02T15:32:00.001+03:00</published><updated>2009-04-02T15:35:48.491+03:00</updated><title type='text'>Moving...</title><content type='html'>I'm moving to new apartment.&lt;br /&gt;&lt;br /&gt;This has huge impact on time I can spend in front of monitor, so indexable GWT site demo is delayed...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-2422816100020945199?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=2422816100020945199' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2422816100020945199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2422816100020945199'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/04/moving.html' title='Moving...'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-2147751181434994103</id><published>2009-03-25T16:43:00.000+02:00</published><updated>2009-03-25T16:52:26.174+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KISS'/><category scheme='http://www.blogger.com/atom/ns#' term='minimalizm'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Google Alerts: watch the web growing</title><content type='html'>&lt;span style="font-family: georgia;font-family:times new roman;font-size:100%;"  &gt;Google has very cool service, which is now that widely used as mail, or docs...&lt;br /&gt;It is &lt;a href="http://www.google.com/alerts"&gt;Google alerts&lt;/a&gt;. Basically, idea is very simple - you just get to their website and enter keywords you want to get notified about.&lt;br /&gt;&lt;br /&gt;Once Google bot indexes page, which may be relevant to the search query you've provided - you get an e-mail message about that. Some kind of 'Google bot news' :)&lt;br /&gt;&lt;br /&gt;You can tune the service to send you updates on each encounter of relevant page, or pack these pages to daily/weekly digest.&lt;br /&gt;&lt;br /&gt;This things becomes very useful, when you watch some activity on the web - for example, your partner's website.&lt;br /&gt;&lt;br /&gt;Google Alerts is an example of minimalistic interfaces (as for me), and that's why it has this tag granted :).&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-2147751181434994103?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.google.com/alerts' title='Google Alerts: watch the web growing'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=2147751181434994103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2147751181434994103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2147751181434994103'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/03/google-alerts-watch-web-growing.html' title='Google Alerts: watch the web growing'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-7055836627648644163</id><published>2009-03-24T18:12:00.000+02:00</published><updated>2009-03-24T18:23:54.619+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KISS'/><category scheme='http://www.blogger.com/atom/ns#' term='minimalizm'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='TRAC'/><title type='text'>Different TRAC workflow for individual ticket types</title><content type='html'>&lt;a href="http://trac.edgewall.org/"&gt;TRAC&lt;/a&gt; is a tracking software, used to store and work with different issues during software development process - let it be bugs, development tasks, requirements, or feature requests.&lt;br /&gt;It is free, flexible, has good SVN integration (as for me), and is quite minimalistic in its design.&lt;br /&gt;&lt;br /&gt;And - yes it heavily uses wiki markup everywhere, making all linkable to all.&lt;br /&gt;But - if you want to setup custom workflow, and you want it to be different for different ticket types, you'll hit a wall. This is currently not implemented in trac workflow.&lt;br /&gt;&lt;br /&gt;The good news are that TRAC is python-based, and thus its sources can be changed easily.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://trac.edgewall.org/ticket/6548"&gt;Different workflows for different ticket types in TRAC&lt;/a&gt; (TRAC ticket link:) ) describes how one can solve the problem, with minor application of patch command. Have not tried it yet, but will report soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-7055836627648644163?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=7055836627648644163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/7055836627648644163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/7055836627648644163'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/03/different-trac-workflow-for-individual.html' title='Different TRAC workflow for individual ticket types'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-5981536391449536940</id><published>2009-03-24T09:27:00.000+02:00</published><updated>2009-03-24T09:35:46.400+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Denyhosts for Unix</title><content type='html'>I've had a Linux box standing on the Internet (uptime~=180days). It just had Ubuntu server installed, Tomcat and SSHd.&lt;br /&gt;And I never looked at security logs...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Security logs (/var/log/auth.log) were full of invalid login attempt messages!&lt;/span&gt;&lt;br /&gt;I apparently got there to see who was accessing the machine during this time, and found that log is full of invalid login attempts through ssh - hjackers seem to try to brootforce the box.&lt;br /&gt;&lt;br /&gt;So, I just found &lt;a href="https://salamanteri.homelinux.net/wordpress/2009/01/protect-your-ssh-servers-ban-offending-hosts/"&gt;Protect your ssh-servers, ban offending hosts&lt;/a&gt; article about protection - great thanks to authors. And in two minutes all the offending hosts were in hosts.deny file (denyhosts figured them out, and banned), and auth.log stopped to grow because of invalid attempts.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;What I've learned from that. &lt;/span&gt;&lt;br /&gt;So basic idea is to setup little tool, which blocks connections from some hosts, and automatically adds hosts to deny list if they have stepped through the threshold of invalid attempts.&lt;br /&gt;&lt;br /&gt;And - never. Never open direct root access from the ssh. Ubuntu has deeper facility - AFAIK there's no possibility to perform direct interactive login as root (only sudo is ok), but nevertheless - close this down.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-5981536391449536940?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://salamanteri.homelinux.net/wordpress/2009/01/protect-your-ssh-servers-ban-offending-hosts/' title='Denyhosts for Unix'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=5981536391449536940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5981536391449536940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5981536391449536940'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/03/denyhosts-for-unix.html' title='Denyhosts for Unix'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-2424747710648320667</id><published>2009-03-23T14:39:00.001+02:00</published><updated>2009-03-24T17:16:21.304+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>Google Web Toolkit (GWT) Search Engine Optimization (SEO) demo will be soon</title><content type='html'>I'm going to create a little demo showing how one can make ajax-loaded content indexable by search bots.&lt;br /&gt;&lt;br /&gt;Basic idea is to create "secondary site" - static one - showing EXACTLY the same content as primary one. If bot gets to secondary site, it can index it well because of static nature.&lt;br /&gt;If user gets to the specific page crawled by bot, it just gets redirected to the dynamic version of the site, showing the same content.&lt;br /&gt;&lt;br /&gt;Here are some key tools I'm going to use:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.opensymphony.com/sitemesh/"&gt;OpenSymphony SiteMesh&lt;/a&gt; - good decorating filter. It would allow us to wrap the entire page into some kind of template. For example, we could put &lt;span style="font-weight: bold;"&gt;navigation header/footer for bots&lt;/span&gt; and old browsers and &lt;span style="font-weight: bold;"&gt;redirect statement for modern browsers,&lt;/span&gt; deciding on user-agent.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Some &lt;a href="http://java-source.net/open-source/content-managment-systems"&gt;Java-based CMS&lt;/a&gt; for generating/accessing content. Not decided yet. Even better is to use Wiki engine.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit,&lt;/a&gt; surely. &lt;/li&gt;&lt;li&gt;Tomcat as a servlet/jsp container.&lt;/li&gt;&lt;/ul&gt;Right now it seems to me that I don't need anything more.&lt;br /&gt;So, waiting for a demo. Hope I'll have several spare hours to get hands on this interesting stuff.&lt;br /&gt;&lt;br /&gt;By the way, there's one interesting problem I can see now: If I put static content inside HTML panel, this would cause problems with navigation and links. For wiki, especially. Any link displayed would lead us out of the dynamic application, which is not desired.&lt;br /&gt;&lt;br /&gt;Alternate solution is to put content to the IFRAME element. Don't think I really like it, but...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-2424747710648320667?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=2424747710648320667' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2424747710648320667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2424747710648320667'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/03/google-web-toolkit-gwt-search-engine.html' title='Google Web Toolkit (GWT) Search Engine Optimization (SEO) demo will be soon'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-8163146268503355659</id><published>2009-03-20T11:38:00.000+02:00</published><updated>2009-03-23T14:51:42.920+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>.NET 1.1 LDAP performance: System.DirectoryServices.DirectorySearcher lags!</title><content type='html'>This short posting describes performance problem with .Net 1.1 LDAP (in particular, System.DirectoryServices namespace). Problem was solved.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;VB.NET 1.1 &lt;/span&gt;&lt;span&gt;&lt;span style="font-size:130%;"&gt;performance problem&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt; with System.DirectoryServies.DirectorySearcher&lt;/span&gt;&lt;br /&gt;While working on one of my projects (VB/C# .Net 1.1), I've run into strange performance problems. Controls were loading slowly. After some research, I narrowed the problem - server made several requests to ActiveDirectory through LDAP protocol. Each of those requests took about 7-8 seconds to complete. Same program, written on Java, worked blazingly fast.&lt;br /&gt;Honestly saying, I spent several days fixing this problem.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Problem is caused by DirectorySearcher implementation&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Problem was actually caused by System.DirectoryServices library (really a COM wrapper) having some lags with memory allocation, or something like that. I'll add a link once find it in bookmarks.&lt;br /&gt;So, each time request is performed, it at first spends 7 seconds for authentication, or something like that.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;Possible solution (worked for me)&lt;/span&gt;&lt;br /&gt;Honestly: I did not manage to make this correct. What I've done, is just a plain caching. So, I just saved link to  &lt;span style="font-weight: bold;"&gt;System.DirectoryServices.DirectorySearcher&lt;/span&gt; in the static (even not instance, byt in Class variable!), and pinged it in some period.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Caching for DirectorySearcher gave expected results&lt;/span&gt;&lt;br /&gt;Yes. First query was awfully long. But subsequent calls were re-using the initialized object, and thus were working blazingly fast! As there are no side effects yet - application is web application, its uptime is more than 2 months.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Useful links on DirectorySearcher performance problem&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://bytes.com/groups/net-asp/323560-directorysearcher-first-access-speed"&gt;Discussion on Bytes - mostly advises to tune up ActiveDirectory.&lt;/a&gt; Was not very useful for me &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb332056.aspx"&gt;In .NET2 M$ intrdouced a System.DirectoryServices.Protocols namespace&lt;/a&gt;, which may have been used for fine-tuning the connection and protocol details (whether use or not encrypted connection). There were no such stuff in .NET 1.1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ayende.com/Blog/archive/2007/08/02/Validating-Users-in-Active-Directory-Gotcha.aspx"&gt;This is a problem with MembershipProvider&lt;/a&gt; which people ran into that far. Something like I had, but not similar.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Also, there are some&lt;a href="http://stanbiron.com/2008/05/21/MemoryLeakInSystemDirectoryServicesDirectorySearcher.aspx"&gt; memory leaks inside .Net DirectorySearcher.&lt;/a&gt; &lt;/li&gt;&lt;li&gt;And finally - how to make &lt;a href="http://blogs.dirteam.com/blogs/tomek/archive/2007/08/09/system-directoryservices-and-connection-pooling.aspx"&gt;DirectoryServices use connection pooling,&lt;/a&gt; which basically solves the problem.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-8163146268503355659?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=8163146268503355659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/8163146268503355659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/8163146268503355659'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/02/net-11-ldap-performance.html' title='.NET 1.1 LDAP performance: System.DirectoryServices.DirectorySearcher lags!'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-2687221827730360392</id><published>2009-03-18T19:43:00.000+02:00</published><updated>2009-03-18T20:05:48.653+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>Afraid of being banned by google for 'cloacking?'</title><content type='html'>&lt;a href="http://google.com/support/webmasters/bin/answer.py?answer=66355"&gt;Cloacking&lt;/a&gt;, basically, is idea of presenting different content to &lt;span style="font-weight: bold;"&gt;normal&lt;/span&gt; users and to bots. This malicious technique is used by bad people to increase their ranking at Google, and get traffic, while presenting to user content, which was not really requested by user. And there are some good news in the end of the article :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Example of Cloacking (do not do like this!)&lt;/span&gt;&lt;br /&gt;Here is just a rough example. Imagine, there's a page on the web with url &lt;span style="font-style: italic;"&gt;http://exampledomain.url&lt;br /&gt;&lt;/span&gt;If Google crawler gets to this page, it is presented with one version of page - clean, structured, full of text, headings, etc. This version of the page has lots of keywords, say 'free software download'. It is ranked &lt;span style="font-weight: bold;"&gt;good&lt;/span&gt; by Google bot.&lt;br /&gt;It is possible to understand, who is 'knocking on the door' - machine or real user.&lt;br /&gt;So, if an internet user comes to this page, he sees a face of some PR company showing up.&lt;br /&gt;&lt;br /&gt;This is considered to be cloacking, and site may be removed by Google personnel from Google indices once they discover such bad behavior.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Problems for good guys&lt;/span&gt;&lt;br /&gt;Ok, this anti-cloacking technology makes search indexes more clear, readable and reliable. But what if you have fully-dynamical site? Yes, site which is fully powered by javascript, or flash?&lt;br /&gt;If its navigation done with javascript - you have problems.&lt;br /&gt;If your application is build with the Single Page Interface - there's no correct way to make it indexable.  (&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc507641.aspx"&gt;this is how guys from Redmond understand SPI&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Good news (for good guys only)&lt;/span&gt;&lt;br /&gt;"The only hard and fast rule is to show Googlebot the exact same thing as your users."&lt;br /&gt;These is very good news (yes, for me it's news. I know that posting has been published @07).  This means, that your site will not go banned, if you show the same content for same URLs, but in different way.&lt;br /&gt;So, some links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Link&lt;a href="http://googlewebmastercentral.blogspot.com/2007/07/best-uses-of-flash.html"&gt; to official google webmaster tools posting.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Link &lt;a href="http://blog.venture-skills.co.uk/2007/07/06/cloaking-is-ok-says-google/"&gt;to VS blog, describing some css/js techniques that can be used for correct content substitution.&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Ok. Gone for now - will post something on this topic soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-2687221827730360392?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=2687221827730360392' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2687221827730360392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2687221827730360392'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/03/afraid-of-being-banned-by-google-for.html' title='Afraid of being banned by google for &apos;cloacking?&apos;'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-5838120603610664002</id><published>2009-03-18T18:35:00.000+02:00</published><updated>2009-03-18T18:46:55.515+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GWT'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>SEO and GWT</title><content type='html'>I'm going to research a bit what's going on the gwt and seo world now...&lt;br /&gt;If you understand you don't know any of those words, GWT stands for Google Web Toolkit - tooling for creating rich web applications, and SEO stands for Search Engine Optimization.&lt;br /&gt;&lt;br /&gt;So, getting hands on it...&lt;br /&gt;In this posting, just 2 links to the documents I'm going to work on at first:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/8fe6a3d2eaab80bb/da46930dd8decc02?lnk=gst&amp;amp;q=SEO#da46930dd8decc02"&gt;GWT Google Group posting about SEO and GWT&lt;/a&gt;. Quite an old thread, something may have changed from those times. People which are well-known to the GWT society are writing, such as &lt;span style="font-weight: bold;"&gt;Sanjiv Jivan&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Ian Bambury&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.scribd.com/doc/13650/DesigningRIAsForSearchEngineAccessibility"&gt;A whitepaper on GWT and SEO&lt;/a&gt; from &lt;a href="http://www.backbase.com"&gt;BackBase&lt;/a&gt;. I've only started reading it, so can not yet tell my opinion.&lt;/li&gt;&lt;/ol&gt;Hope that SEO is applicable for such complex and cool applications as ones built with GWT :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-5838120603610664002?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=5838120603610664002' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5838120603610664002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/5838120603610664002'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/03/seo-and-gwt.html' title='SEO and GWT'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-1934712716109739602</id><published>2009-03-17T09:28:00.000+02:00</published><updated>2009-03-17T09:56:14.307+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Spiral Universe school management system</title><content type='html'>I'm not interested in school software.&lt;br /&gt;&lt;br /&gt;But this startup -&lt;a href="http://spiraluniverseinc.com/"&gt; Spiral Universe School Management System&lt;/a&gt; - seems to be emerging fast and might be interesting.&lt;br /&gt;&lt;br /&gt;As usual, such systems tend to solve some specific tasks, like schedule management or class journal or medical log, but this system incorporates social network idea together with the school management tools.&lt;br /&gt;Business model seems to be agile enough - you can use this system for free, but for additional services/support you may pay some money. Also, additional user space for media can be bought.&lt;br /&gt;&lt;br /&gt;This startup seems to be fresh-technology-oriented. I found out GWT on &lt;a href="http://www.spiraluniverse.com/product/technology/"&gt;Spiral Technologies page&lt;/a&gt;, so - here it goes.&lt;br /&gt;&lt;br /&gt;Waiting for a live demo or a start to try this out :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-1934712716109739602?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://spiraluniverseinc.com/' title='Spiral Universe school management system'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=1934712716109739602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1934712716109739602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1934712716109739602'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/03/spiral-universe-school-management.html' title='Spiral Universe school management system'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-6255782426414100813</id><published>2009-03-16T17:28:00.001+02:00</published><updated>2009-03-16T17:31:46.701+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>Forests-Forever are CLOSING</title><content type='html'>There are only two weeks left to watch out the gratitude of the forest all over the world.&lt;br /&gt;I'm not promoting it - just give it a try.&lt;br /&gt;&lt;br /&gt;There are really beatuiful pictures of the forests from all over the world. I mostly liked the ones from Ural, Russia. They give you a little of the fresh air.&lt;br /&gt;&lt;br /&gt;While watching those photos I wanted to leave that job, get out of the city and just be there...&lt;br /&gt;&lt;br /&gt;So, only two weeks left for &lt;a href="http://www.forests-forever.com/"&gt;Forests Forever&lt;/a&gt;. Don't miss it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-6255782426414100813?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.forests-forever.com/' title='Forests-Forever are CLOSING'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=6255782426414100813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6255782426414100813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6255782426414100813'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/03/forests-forever-closing.html' title='Forests-Forever are CLOSING'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-8761501160028868111</id><published>2009-03-16T12:54:00.000+02:00</published><updated>2009-03-16T12:57:37.261+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Getting UNIX to work</title><content type='html'>I like the UNIX operating system family. I would not switch to window$ now, maybe I could live with Mac (it's BSD, :)).&lt;br /&gt;As you could hear before, UNIX can be hard to get working as you want it to work. It may require some ... actions from you :)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_FD9Pz4P5wMc/Sb4wbRuOmOI/AAAAAAAADks/XAqxZ8KblQk/s1600-h/unix_getting_to_work.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 304px;" src="http://4.bp.blogspot.com/_FD9Pz4P5wMc/Sb4wbRuOmOI/AAAAAAAADks/XAqxZ8KblQk/s320/unix_getting_to_work.jpg" alt="" id="BLOGGER_PHOTO_ID_5313737855515662562" border="0" /&gt;&lt;/a&gt;I got this picture from Kirill Scorp Malyshev ;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-8761501160028868111?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=8761501160028868111' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/8761501160028868111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/8761501160028868111'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/03/getting-unix-to-work.html' title='Getting UNIX to work'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_FD9Pz4P5wMc/Sb4wbRuOmOI/AAAAAAAADks/XAqxZ8KblQk/s72-c/unix_getting_to_work.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-3381360828413398904</id><published>2009-03-16T11:28:00.000+02:00</published><updated>2009-03-16T11:34:11.203+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KISS'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='minimalizm'/><title type='text'>Example of the job done with GWT</title><content type='html'>Just found out site I've been developing some time ago.&lt;br /&gt;It's done with pure gwt, when I was completing it, it seemed to me veery cool.&lt;br /&gt;&lt;br /&gt;For english-speaking guys: sorry for cyrillic :)&lt;br /&gt;&lt;br /&gt;So, here's link: &lt;a href="http://www.osnova.ks.ua"&gt;Металлопластиковые окна в Херсоне: ТМ Основа&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It is very easy. It incorporates usage of the GWT history support (try clicking back button) , and it has some heavy-duty stuff done with GWT and modified Canvas widget from GWT widget library.&lt;br /&gt;&lt;br /&gt;To see it, you can go to Посчитай!-&gt;Выбрать тип конструкции.&lt;br /&gt;&lt;br /&gt;The wireframe pictures of the window shapes are drawn here, on the client! For Opera/Safari/Mozilla &lt;canvas&gt; element is used, and for the IE6/7 - VML. Looks good, isn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-3381360828413398904?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.osnova.ks.ua' title='Example of the job done with GWT'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=3381360828413398904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3381360828413398904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3381360828413398904'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/03/example-of-job-done-with-gwt.html' title='Example of the job done with GWT'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-2678489961245655942</id><published>2009-02-20T09:09:00.000+02:00</published><updated>2009-02-20T09:12:13.464+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Exceptional recursion</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZ5Xg4_7uQI/AAAAAAAADkU/KWdZrdhWpZg/s1600-h/internal_error.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 131px;" src="http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZ5Xg4_7uQI/AAAAAAAADkU/KWdZrdhWpZg/s320/internal_error.png" alt="" id="BLOGGER_PHOTO_ID_5304773633656994050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://eclipse.org/"&gt;Eclipse.&lt;/a&gt;&lt;br /&gt;Error seems to be sometimes caused by not-enough-free-memory. Very valuable diagnostic information, don't you think?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-2678489961245655942?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=2678489961245655942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2678489961245655942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/2678489961245655942'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/02/exceptional-recursion.html' title='Exceptional recursion'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZ5Xg4_7uQI/AAAAAAAADkU/KWdZrdhWpZg/s72-c/internal_error.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-7568778881374342040</id><published>2009-02-18T17:32:00.000+02:00</published><updated>2009-02-19T10:55:44.560+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Liquid Rescale gimp plugin</title><content type='html'>Liquid rescale is "content-aware resizing". You can make your picture wider or narrower with cutting unnecessary picture element and resampling filling elements, so they keep looking good. This posting is just an example of practical use of the effect. All the mathematical grounding and much more samples can be found on official site of &lt;a href="http://liquidrescale.wikidot.com/"&gt;corresponding GIMP plugin &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Original &lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_FD9Pz4P5wMc/SZwugmGUA1I/AAAAAAAADj8/yDeEManKPZ8/s1600-h/original.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 218px;" src="http://1.bp.blogspot.com/_FD9Pz4P5wMc/SZwugmGUA1I/AAAAAAAADj8/yDeEManKPZ8/s320/original.JPG" alt="" id="BLOGGER_PHOTO_ID_5304165598653317970" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;picture&lt;br /&gt;&lt;/span&gt;Here you can see original picture, with three men walking out of sea. It was taken on the Black Sea coast. We want to remove central man, as his photo is fragmental and has no sense here. It is easily done with Clone Stamp - we just need to fill place taken by the man by water elements taken nearby. Doing so would consume lots of time, if we want picture look realistic. And, I think, there are not that much people who like spending hours stamping the picture. Also, I tried doing this with stamp - and failed :).&lt;br /&gt;There is another solution. We can make this task faster, much faster with Liquid resize. By its nature, LQR cuts off those parts of picture which are considered less valuable. More explanation on how LQR calculates value of a pixel path, can be found &lt;a href="http://habrahabr.ru/blogs/algorithm/48518/"&gt;here&lt;/a&gt; (Russian :) ).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Practical view&lt;/span&gt;&lt;br /&gt;Now &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZwvnW3DjlI/AAAAAAAADkE/F-pjuggF68w/s1600-h/gimp.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 254px;" src="http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZwvnW3DjlI/AAAAAAAADkE/F-pjuggF68w/s320/gimp.png" alt="" id="BLOGGER_PHOTO_ID_5304166814333505106" border="0" /&gt;&lt;/a&gt;we are going to enhance this picture with just single effect applied. I already have LQR plug-in installed. If you wish to install it for your Gimp, go &lt;a href="http://liquidrescale.wikidot.com/en:installation-instructions"&gt;here&lt;/a&gt;.&lt;br /&gt;Now, we start Liquid rescale plug-in from Layers menu, and create two layers. First layer will hold object masks to be saved during resizing, another one - to be deleted.&lt;br /&gt;I have painted in red in deletion layer, and in green in preservation, in order to see future picture composition easily.&lt;br /&gt;Now, starting the resize...&lt;br /&gt;It takes some time - calculations are not that lightweight.&lt;br /&gt;Also, before running plug-in you can decide to store all the path being cut in separate layer so you could see which pixels are cut.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Resulting image&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_FD9Pz4P5wMc/SZwwwg0ck9I/AAAAAAAADkM/RWDrYkKEffo/s1600-h/processed.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 230px;" src="http://1.bp.blogspot.com/_FD9Pz4P5wMc/SZwwwg0ck9I/AAAAAAAADkM/RWDrYkKEffo/s320/processed.JPG" alt="" id="BLOGGER_PHOTO_ID_5304168071137366994" border="0" /&gt;&lt;/a&gt;And this is the image after effect application. Just after single action, without sitting for hours and clone-stamping picture. Et voila.&lt;br /&gt;Better examples can be found on the official &lt;a href="http://liquidrescale.wikidot.com/en:examples"&gt;plugin example page&lt;/a&gt; (even with video).&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Here is my useage pattern - if you have some photo with elements that you don't like, and the picture itself is not that valuable to spend a day or two on enhancing it, you can use LQR for quick fixes.&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/5866514577340267046-7568778881374342040?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://liquidrescale.wikidot.com/' title='Liquid Rescale gimp plugin'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=7568778881374342040' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/7568778881374342040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/7568778881374342040'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/02/liquid-rescale-gimp-plugin.html' title='Liquid Rescale gimp plugin'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_FD9Pz4P5wMc/SZwugmGUA1I/AAAAAAAADj8/yDeEManKPZ8/s72-c/original.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-9069939977505521320</id><published>2009-02-18T12:08:00.000+02:00</published><updated>2009-02-18T12:11:35.024+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Blog purpose</title><content type='html'>For anyone reading this - I am going to use the weblog for storing some interesting and non-straightforward technical solutions - mostly not to forget about them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-9069939977505521320?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=9069939977505521320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/9069939977505521320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/9069939977505521320'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/02/blog-purpose.html' title='Blog purpose'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-8196012794783018207</id><published>2009-02-08T14:34:00.000+02:00</published><updated>2009-02-18T12:19:59.276+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='minimalizm'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Awesome</title><content type='html'>&lt;span style="font-weight: bold;font-size:100%;" &gt;Awesome&lt;/span&gt;&lt;br /&gt;Awesome is not just an exclamation - it is a name for perfect window manager utilizing tiling windows concept. It can be used for X windows systems on the *nix and BSD systems. I'm using it now, and I would like to share awesome experience.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Background &lt;/span&gt;&lt;br /&gt;The idea of multiple windows shown at the same time on the single screen is known for times. &lt;a href="http://en.wikipedia.org/wiki/Curses_%28programming_library%29"&gt;Curses&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Turbo_Vision"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;TurboVision&lt;/span&gt;&lt;/a&gt; creates interfaces capable of showing pseudo-windows with ASCII characters. Bunch of software called terminal multiplexers (see &lt;a href="http://en.wikipedia.org/wiki/Category:Terminal_multiplexers"&gt;Terminal Multiplexers on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Wikipedia&lt;/span&gt;&lt;/a&gt;) is used for showing several text program outputs on the same text terminal. The best use case I can see is &lt;a href="http://en.wikipedia.org/wiki/Tail_%28Unix%29"&gt;tailing&lt;/a&gt; several log files to monitor distributed activity in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;runtime&lt;/span&gt;. Or I can run some commands in the active console, and watch their output (which goes to file :) ) on other virtual terminal.&lt;br /&gt;&lt;br /&gt;Nowadays people mostly use graphical user interface. In the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;Unixes&lt;/span&gt; &lt;a href="http://en.wikipedia.org/wiki/X_window"&gt;X Window system&lt;/a&gt; makes all the low-level work on rendering data and basic manipulating windows. In the &lt;a href="http://micorosoft.com/"&gt;Redmond&lt;/a&gt;-like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;GUIs&lt;/span&gt; we got used to window decoration, overlapping windows, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;task bar&lt;/span&gt; showing tasks being executed, ability to drag and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;resize&lt;/span&gt; windows with mouse. All this stuff in the Unix world is done &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;by&lt;/span&gt; Window Manager (WM). There are &lt;a href="http://en.wikipedia.org/wiki/Window_manager"&gt;different&lt;/a&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;WM's&lt;/span&gt; doing their job in different way.&lt;br /&gt;&lt;br /&gt;You might have noticed monitor aspect ratio change trend. Monitors are going wider. Resolution goes higher. Have you ever tried maximizing any file manager on the 1920x1200 resolution? One may feel &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;uncomfortable&lt;/span&gt; and lost in such a wide space with lots of icons. There is not that much tasks that really require that much information shown on-screen &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_10"&gt;simultaneously&lt;/span&gt;. On the other side, if you open lots of windows to utilize informational space, you can run into problems with finding appropriate one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Tiling window managers&lt;/span&gt;&lt;br /&gt;The descendants of the terminal &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;multiplexers&lt;/span&gt; are &lt;a href="http://en.wikipedia.org/wiki/Tiling_window_managers"&gt;tiling window managers&lt;/a&gt;. General idea is to split the screen into non-overlapping areas, and put each window into appropriate area. With this concept, you can see all the information at the same time. And you don't need press Alt+Tab all the time :).&lt;br /&gt;Tiling concept is extended with &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;various&lt;/span&gt; features, such as different focus models, static or dynamic window arrangement, virtual desktops/tags, tabs to arrange windows in the single slot, and much, much more.&lt;br /&gt;I am using &lt;a href="http://awesome.naquadah.org/"&gt;Awesome window manager&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Awesome features&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Dynamic layout model.&lt;/span&gt; When new window gets opened you do not need to position it somewhere manually. Awesome decides where to put it based on the windows role, current &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;configuration&lt;/span&gt; and layout.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Full keyboard control&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.&lt;/span&gt; You can do everything with keyboard. Move focus forward/backward, switch layouts, rearrange windows, change cell size, etc...&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Full mouse control.&lt;/span&gt; In addition to keyboard, you can do all the stuff mentioned above with your mouse. It is very handy when working with graphic editors, for example.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Tags.&lt;/span&gt; You might have heard of&lt;a href="http://en.wikipedia.org/wiki/Virtual_desktop"&gt; virtual desktops&lt;/a&gt; - concept, used heavily in &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_14"&gt;Unix&lt;/span&gt; desktop environments. Tags are different. Instead of setting &lt;span&gt;single&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;virtual desktop for window you can assign several tags to it, and window will be shown in each of these tags. This feature allows you to show some important windows on all the tags (so they are visible all the time)&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Layout models.&lt;/span&gt; Awesome allows to assign different layouts for tags. Windows can be arranged vertically, horizontally, full-screen, maximized, centered (active window is in center of screen, all other are in background tiled vertically), spiral, flying. The least one is the layout all of us got used to - overlapping windows. Yes, for some tasks it is very handy.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Performance.&lt;/span&gt; Awesome does no windows decoration. No borders, no headers. Awesome uses &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;XCB&lt;/span&gt; - the fastest way of talking to X server by now. Size of the program is 8 MB. Even when I do full compilation of my project, and both kernels are fully loaded, I can manage windows normally.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Programmability&lt;/span&gt;.&lt;/span&gt; Awesome itself is written in C, but all less important features (menu, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_17"&gt;key bindings&lt;/span&gt;, tag switcher, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_18"&gt;task bar&lt;/span&gt;, tray icon, clock, etc...) are written in &lt;a href="http://en.wikipedia.org/wiki/Lua_%28programming_language%29"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Lua&lt;/span&gt;&lt;/a&gt; - scripting language. You can easily change anything you want. This does not even require recompilation. &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Screenshots&lt;/span&gt;&lt;br /&gt;Here are some screenshots made on my workstation.&lt;br /&gt;1. Vertical layout. Red border across top window (&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_20"&gt;FireFox&lt;/span&gt;) indicates focus. Top line is the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_21"&gt;task bar&lt;/span&gt;. Small icon is the menu icon, 1-9 are tags. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;Taskbar&lt;/span&gt; is long, and spans across all free space. Clock is the widget i wrote myself in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;Lua&lt;/span&gt;. The lease element is the system tray having &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;Skype&lt;/span&gt; and Pidgin icon.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqO02fbDSI/AAAAAAAADjA/0AUQOBeIoOY/s1600-h/shot1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqO02fbDSI/AAAAAAAADjA/0AUQOBeIoOY/s320/shot1.png" alt="" id="BLOGGER_PHOTO_ID_5303708549813832994" border="0" /&gt;&lt;/a&gt;2. Dual-monitor setup. The left screen has several &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;IM&lt;/span&gt; windows with horizontal tag layout, the right part has &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;Thunderbird&lt;/span&gt; and terminal opened. Two monitors are my laptop primary screen (15" 1680x1050) and external Dell monitor (24" 1680x1050). The Awesome setup shown here is outdated for me.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_FD9Pz4P5wMc/SZqQnv_qL1I/AAAAAAAADjI/kgQ-DixjdRM/s1600-h/workplace.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 100px;" src="http://1.bp.blogspot.com/_FD9Pz4P5wMc/SZqQnv_qL1I/AAAAAAAADjI/kgQ-DixjdRM/s320/workplace.png" alt="" id="BLOGGER_PHOTO_ID_5303710523754950482" border="0" /&gt;&lt;/a&gt;3. Current layout in centered mode. One window is in center, but allows seeing other. Yellow border is a mark border. You can perform single operation to several marked windows. So, window group operations are supported in Awesome, too.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_FD9Pz4P5wMc/SZqRVX2v1mI/AAAAAAAADjQ/zrFDfRS9FYg/s1600-h/shot2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 254px;" src="http://1.bp.blogspot.com/_FD9Pz4P5wMc/SZqRVX2v1mI/AAAAAAAADjQ/zrFDfRS9FYg/s320/shot2.png" alt="" id="BLOGGER_PHOTO_ID_5303711307549103714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hope this posting may help someone find own way :) at least in computer interfaces.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-8196012794783018207?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://awesome.naquadah.org/' title='Awesome'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=8196012794783018207' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/8196012794783018207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/8196012794783018207'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/02/awesome.html' title='Awesome'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqO02fbDSI/AAAAAAAADjA/0AUQOBeIoOY/s72-c/shot1.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-169734454519112064</id><published>2009-02-04T20:13:00.000+02:00</published><updated>2009-02-18T12:16:15.268+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Developer hell</title><content type='html'>The one who knows would understand me veeery well.&lt;br /&gt;&lt;br /&gt;I'm now working on the project which looks in the following way. It started to be developed 8 years ago. There were about 4 teams of long-term hired outsourcers and a couple of consultants sustaining that sh%t-code for these 8 years.&lt;br /&gt;&lt;br /&gt;And now - just listen - the code looks the following way.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;.Net 1.1 windows application, which has a tree on the left, and different panels showing up on the right, depending on the node selected in the tree.&lt;/li&gt;&lt;li&gt;Sometimes on the right .Net winforms components are shown. Sometimes, ASP.NET 1.1 pages within hosted browser (IE ActiveX) are shown.&lt;/li&gt;&lt;li&gt;There is a couple of situations, when inside that ASP.NET 1.1 pages shown within IE Activex shown within Windows Forms application, Visual Basic 6 ActiveX control gets up.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Haven't you lost the story thread yet?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;And - the best one. Where do you think does that custom VB6 ActiveX take data? You'll never believe. From the ASP.NET 2.0 Web service, which is published on the same server where the ASP.NET 1.1 pages containing that VB6 ActiveX are published.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Have you ever thought this is possible.&lt;br /&gt;And - the last.&lt;br /&gt;&lt;br /&gt;Users of this system were completely satisfied with this state for almost 2 years, and only after that lifetime system started to slow down...&lt;br /&gt;&lt;br /&gt;Would you like such a job? :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-169734454519112064?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=169734454519112064' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/169734454519112064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/169734454519112064'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/02/developer-hell.html' title='Developer hell'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-4080095607229788558</id><published>2009-01-26T12:28:00.000+02:00</published><updated>2009-02-18T12:13:51.859+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KISS'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Google Docs</title><content type='html'>This is not an advertisement.&lt;br /&gt;It's just a short story of how today's services can be used in order to perform some daily tasks for free.&lt;br /&gt;&lt;br /&gt;So, here's an example.&lt;br /&gt;We have:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Document in M$ Word format, created elsewhere&lt;/li&gt;&lt;li&gt;Laptop with Linux installed on it&lt;/li&gt;&lt;li&gt;OpenOffice on linux which does not open correctly the M$ Word document (styles are shifted and paragraphs are misplaced with text&lt;/li&gt;&lt;li&gt;Need to port this document to PDF in order to e-mail as CV.&lt;/li&gt;&lt;/ul&gt;Instead of installing Word application on the virtualized XP, we can do much simpler thing:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Just forward an e-mail with document attached to the specific email address which is found in the Google Docs setup page, on Upload tab.&lt;/li&gt;&lt;li&gt;Log into Google Docs.&lt;/li&gt;&lt;li&gt;Open the document  (it is already imported - Google has imported all the attachments as separate pages.)&lt;/li&gt;&lt;li&gt;And from menu select Save-As PDF File&lt;/li&gt;&lt;li&gt;That's all - you can now dl it!&lt;/li&gt;&lt;/ul&gt;So, economy is completely understood. How much does Microsoft Word license cost?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-4080095607229788558?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=4080095607229788558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/4080095607229788558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/4080095607229788558'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2009/01/google-docs.html' title='Google Docs'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-1595431016708388529</id><published>2008-12-10T18:02:00.000+02:00</published><updated>2009-02-18T12:20:09.343+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KISS'/><category scheme='http://www.blogger.com/atom/ns#' term='minimalizm'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='TRAC'/><title type='text'>MInimalizm</title><content type='html'>First of all, sorry for showing plain thoughts, without specific technical background.&lt;br /&gt;I have found, that I like minimal things. I like:&lt;br /&gt;&lt;br /&gt;1. Ipod shuffle 2nd generation - it does not have screen. It has only the blinking led. It has only one hole through which it gets charged, filled with data and into which your favourite headphones fit flawlessly.&lt;br /&gt;2. TRAC. Yes, this is an abbreviation. http://trac.edgewall.org/ This is a tracking software (for bugs, change requests, some planning, for vivd documentation and for having all this stuff interlinked well. THis really works hard.&lt;br /&gt;3. Awesome window manager. http://awesome.naquadah.org/ THis drives me crazy. Perfect thing for professional works with computer. It is tiling window manager, it does not have nor window headers neither borders, windows don't get overlapped normally, all is powered with keyboard. Result: you don't spend time on working with windows - dragging, resizing, etc.. You just spend time on working.&lt;br /&gt;&lt;br /&gt;I hope to explain more of this stuff in the future posts, but tendency is prominent.&lt;br /&gt;Things take your time. You need some things. So, you need things which take minimal amount of your time - &lt;span style="font-weight: bold;"&gt;MINIMAL&lt;/span&gt; ones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-1595431016708388529?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=1595431016708388529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1595431016708388529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1595431016708388529'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2008/12/minimalizm.html' title='MInimalizm'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-6868406186540691601</id><published>2008-12-07T11:46:00.000+02:00</published><updated>2009-02-18T12:13:13.227+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Audio feeds</title><content type='html'>Never used podcasts before. Tried JavaPOSSE.&lt;br /&gt;They seem to be rocking, but again - for me it is too lightweight style.&lt;br /&gt;&lt;br /&gt;I'd like to see them more strict and technical.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-6868406186540691601?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=6868406186540691601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6868406186540691601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/6868406186540691601'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2008/12/audio-feeds.html' title='Audio feeds'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-3724057509511905210</id><published>2008-08-19T15:34:00.000+03:00</published><updated>2009-02-18T12:12:55.810+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KISS'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='disappointment'/><title type='text'>Time, endless short time</title><content type='html'>KISS.&lt;br /&gt;We have all heard of this principle, we try to use whenever we can.&lt;br /&gt;There are tons of books about programming that use this principle - XP KISS system design, KISS code, which is easy-readable.&lt;br /&gt;&lt;br /&gt;I have spent about 3 hours fighting with Ubuntu sound systems. I have discovered that there are several different sound servers/systems/modules that do use sound devices on different level of abstraction and HAVE NO COMMON INTERFACES.&lt;br /&gt;&lt;br /&gt;Know what? My sound disappeared: I could not call with skype, I could not listen to music; no sound at all. I tried to revert to the original configuration, back and force - no sound at all.&lt;br /&gt;&lt;br /&gt;And know what the problem was? My pcm device was muted in the mixer. I spent  few minutes checking and fixing that. And three hours finding out what the hell is going on.&lt;br /&gt;&lt;br /&gt;So, KISS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-3724057509511905210?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=3724057509511905210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3724057509511905210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/3724057509511905210'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2008/08/time-endless-short-time.html' title='Time, endless short time'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-1247142448771748056</id><published>2008-03-30T14:04:00.001+03:00</published><updated>2008-03-30T14:04:39.434+03:00</updated><title type='text'>Getting to work e-mail posts</title><content type='html'>&lt;div&gt;This is a sample post, trying to check how formatting (code formatting) works within blogger when sending the post from the Gmail. Hope this would be OK.&lt;/div&gt; &lt;div&gt;&amp;nbsp;&lt;/div&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt; &lt;div&gt;&lt;font face="courier new,monospace"&gt;This is a sample code&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;&lt;font face="Courier New" color="#663366"&gt;&lt;strong&gt;p&lt;/strong&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;&lt;font color="#663366"&gt;ublic void &lt;/font&gt;&lt;/strong&gt;a() {&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt; &lt;div dir="ltr"&gt;&lt;font face=""&gt;And this is a sample comment, that how differernt &lt;em&gt;formatting would&lt;/em&gt; &lt;u&gt;be&lt;/u&gt; &lt;strong&gt;seen&lt;/strong&gt;...&lt;/font&gt;&lt;/div&gt;&lt;font face="Courier New"&gt;&lt;/font&gt; &lt;div dir="ltr"&gt;&lt;br clear="all"&gt;&lt;br&gt;-- &lt;br&gt;Alexander Cherednichenko,&lt;br&gt;Software Engineer at DataArt&lt;br&gt;&lt;br&gt;[ the only way out is the way up ] &lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-1247142448771748056?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=1247142448771748056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1247142448771748056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/1247142448771748056'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2008/03/getting-to-work-e-mail-posts.html' title='Getting to work e-mail posts'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5866514577340267046.post-4723824107282886007</id><published>2008-03-30T13:44:00.000+03:00</published><updated>2009-02-18T12:18:16.367+02:00</updated><title type='text'>So what - starting...</title><content type='html'>So, I decided to try one more time, and start blogging. Hope, this would bring some good things definitely to me, and possibly to ones who would get here.&lt;br /&gt;&lt;br /&gt;I am going to post here nopt only technical notes, but also some interesting links, ideas, solutions...&lt;br /&gt;&lt;br /&gt;Hope, I'll get a GWT presentation here soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5866514577340267046-4723824107282886007?l=lexaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5866514577340267046&amp;postID=4723824107282886007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/4723824107282886007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5866514577340267046/posts/default/4723824107282886007'/><link rel='alternate' type='text/html' href='http://lexaux.blogspot.com/2008/03/so-what-starting.html' title='So what - starting...'/><author><name>Alexander</name><uri>http://www.blogger.com/profile/10093762646999402082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_FD9Pz4P5wMc/SZqVPCJqHnI/AAAAAAAADjk/FuomTMXHk-M/S220/avatar.png'/></author><thr:total>0</thr:total></entry></feed>
