File not found: transaction …, path …. SVN mysteries behind an Apache Reverse Proxy

December 6th, 2009 by Bogdan Nitulescu in General, Tools

We have an SVN server somewhere on our intranet, but since outside people want to access it, I put it behind an Apache reverse proxy. It was fairly straightforward. Here’s an excellent tutorial if you want to know how to do it: http://silmor.de/49 .

Basically, you have the intranet apache that’s configured to serve SVN, and you have an outside apache in your firewall’s DMZ that proxies the request:

ProxyPass /svn/ http://intranet.example.com/svn/
ProxyPassReverse
/svn/ http://intranet.example.com/svn/

It was all fine when people checked out their sources, but there were strange errors during commits. 7 files commits worked ok. When you tried 8 files or more, you got something like…

File not found: transaction ‘431-12’, path ‘/parser/XMLparser/XMLparser.sln’

It took a lot of sweat to find out why 8 was the magic number – and after a lot of packet dumps and tracing, I found out that one of the servers used HTTP keepalives, and the other one rejected them.

So here’s a couple of rules not to be broken when proxying SVN requests:

Keep the same paths. Do not try something like ProxyPass /svn/ http://intranet.example.com/my_svn/ . It will fail with a cryptic error message at the worst of time.

Keep the same configuration.  Check your /etc/httpd/conf/httpd.conf on both servers for differences in your configuration. In my case, I had “KeepAlives On” in one server and “KeepAlives Off” in the other. When I put them both to On, it worked just fine.


Google Talk in Yahoo Messenger

September 23rd, 2008 by Marius Hanganu in General, Javascript, Tools

Some time ago, when I first saw the Google Talk gadget is being released, I got this crazy idea of embedding the gadget in Yahoo Messenger as a plugin.

Once logged in, the gadget was displayed just fine as a plugin, but if the user was not logged in, he’d be taken to the google login page. So I started hacking and chopping and after half hour I finally got this version working. Click here to download the plugin.

After downloading it, unzip it into the C:\Program Files\Yahoo!\Messenger\Plugin\Test\ContentTab\ folder. UPDATE: after unzipping, rename the folder to test.plugin (thanks Tudor) The final path should look like: C:\Program Files\Yahoo!\Messenger\Plugin\Test\ContentTab\test.yplugin\.

Restart Yahoo Messenger, log-in and select Actions -> Load Test Plug-in, and the Google login page will show up in the plug-ins area. You can select the “remember me” box, so that after restart you will be automatically logged in.

The plugin is quite simple: it contains one simple HTML file with some Google styles, and the HTML code for the login page. On page load – a request is made to http://www.google.com/ig to check if the user is already logged in. This is achieved by parsing the response and checking for “Sign out” string – which means the user is logged in.

Surprisingly, from all the Google pages, the http://www.google.com/ig page was the only one (after 4 or 5 unsuccessful attempts) that could give me an indicator on whether the user is logged in or not.

In case user is logged in, the page is redirected to the URL containing the embeddable flash gadget for Google Talk: http://talkgadget.google.com/talkgadget/popout.

Unfortunately, the administrators of Yahoo Messenger plug-ins at http://gallery.yahoo.com/messenger have rejected the application so far, so in order to use it, every time you start Yahoo Messenger, you need to select “Load Test Plug-in” to load this plugin.

Here are some images with the plugin:
Google Talk in Yahoo Messenger

Google Talk in Yahoo Messenger
And here’s the code for the plugin:

    <!--
<!–
        body,td,div,p,a,font,span {font-family: arial,sans-serif;}
        body {margin-top:2}.c {width:4; height: 4}
        body { background-color:#E8EEFA; }
        A:link {color:#0000cc; }
        A:visited { color:#551a8b; }
        A:active { color:#ff0000; }
        .form-noindent {background-color: #ffffff; border: #C3D9FF 1px solid}
        .gaia.le.lbl { font-family: Arial, Helvetica, sans-serif; font-size: smaller; }
        .gaia.le.fpwd { font-family: Arial, Helvetica, sans-serif; font-size: 70%; }
        .gaia.le.chusr { font-family: Arial, Helvetica, sans-serif; font-size: 70%; }
        .gaia.le.val { font-family: Arial, Helvetica, sans-serif; font-size: smaller; }
        .gaia.le.button { font-family: Arial, Helvetica, sans-serif; font-size: smaller; }
        .gaia.le.rem { font-family: Arial, Helvetica, sans-serif; font-size: smaller; }
        .gaia.captchahtml.desc { font-family: arial, sans-serif; font-size: smaller; }
        .gaia.captchahtml.cmt { font-family: arial, sans-serif; font-size: smaller; font-style: italic; }
        .body { margin-left: 3em;margin-right: 5em;font-family: arial,sans-serif; }
        div.errorbox-good {}
        div.errorbox-bad {}
        div.errormsg { color: red; font-size: smaller; font-family: arial,sans-serif;}
        font.errormsg { color: red; font-size: smaller; font-family: arial,sans-serif;}
        hr {border: 0;background-color:#DDDDDD;height: 1px;width: 100%;text-align: left;margin: 5px;}
         div.errormsg { color: red; font-size: smaller; font-family:arial,sans-serif; }
         font.errormsg { color: red; font-size: smaller; font-family:arial,sans-serif; }
        .gaia.le.lbl { font-family: Arial, Helvetica, sans-serif; font-size: smaller; }
        .gaia.le.fpwd { font-family: Arial, Helvetica, sans-serif; font-size: 70%; }
        .gaia.le.chusr { font-family: Arial, Helvetica, sans-serif; font-size: 70%; }
        .gaia.le.val { font-family: Arial, Helvetica, sans-serif; font-size: smaller; }
        .gaia.le.button { font-family: Arial, Helvetica, sans-serif; font-size: smaller; }
        .gaia.le.rem { font-family: Arial, Helvetica, sans-serif; font-size: smaller; }
        .gaia.captchahtml.desc { font-family: arial, sans-serif; font-size: smaller; }
        .gaia.captchahtml.cmt { font-family: arial, sans-serif; font-size: smaller; font-style: italic; }
    –>
-->
    <script type="text/javascript"><!--mce:0--></script>
<form id="gaia_loginform" action="https://www.google.com/accounts/ServiceLoginAuth" method="post">
<div class="loginBox">
<table id="gaia_table" style="display:none" border="0" cellspacing="0" align="center">
<tbody>
<tr>
<td colspan="2">
                        <span>
                                    <img src="https://www.google.com/accounts/google_transparent.gif" alt="Google" />
                                </span></td>
<td valign="middle">
                                    <span>
                    </span></td>
</tr>
<tr>
<td>
<div>
                            <span class="gaia le lbl">Email:</span></div></td>
<td>
<input id="continue" name="continue" type="hidden" value="http://talkgadget.google.com/talkgadget/popout" />
<input id="service" name="service" type="hidden" value="talk" />
<input id="skipvpage" name="skipvpage" type="hidden" value="true" />
<input name="GALX" type="hidden" value="aa3Jml3aMHk" />
<input id="Email" class="’gaia" name="Email" size="18" type="text" /></td>
</tr>
<tr>
<td></td>
<td align="left"></td>
</tr>
<tr>
<td align="right">
                        <span class="gaia le lbl"> Password: </span></td>
<td>
<input id="Passwd" name="Passwd" size="18" type="password" /></td>
</tr>
<tr>
<td></td>
<td align="left"></td>
</tr>
<tr>
<td align="right" valign="top">
<input id="PersistentCookie" checked="’checked’/" name="PersistentCookie" type="checkbox" value="yes" />
<input name="’rmShown’" type="hidden" value="1?/&gt;
                    &lt;/td&gt;
&lt;td&gt;
                        &lt;span class=" />Remember me on this computer.</td>
</tr>
<tr>
<td></td>
<td align="left">
<input class="gaia le button" name="signIn" type="submit" value="Sign in" /></td>
</tr>
</tbody></table>
</div>
</form>

DynDNS blocks updates – from updatedd older than 2.4

September 27th, 2006 by Bogdan Nitulescu in General, Tools

If your home router has a Dynamic DNS feature and it suddenly does not work anymore with DynDNS… don’t despair. The guys at DynDNS have decided to discontinue service to older clients. You can read the small print here.

The bad part is you don’t get any notification. Their server simply returns a “Successful update” error code. You might smell something is fishy, because it also reports that your new IP is 127.0.0.1. But your real IP in the database remains unchanged.

The good news, though, is that your account is not blocked, too. You can update the DNS manually or from a desktop client. Check the router vendor site for a firmware upgrade. If there is no such upgrade, there’s not too much to do, except to use the desktop client, choose a different dynamic dns or router provider.


Intellij Idea versus Eclipse – part II

August 14th, 2006 by Marius Hanganu in Java, General, Tools

>> 10 reasons why Eclipse is better

Most of the following are not checked in Idea 6.0 which is anyways in beta. They refer to 4.x and 5.x Idea versions.

1. The visual editor – one feature that Idea sucks at is the visual editor. While the best at this category is still Netbeans IMO, Eclipse’s Visual Editor, although buggy and slow, is still better than the Idea’s designer based on forms, which needs some Idea internal classes for your swing class to run.

2. Synchronize perspective – excellent idea from Eclipse team to have a perspective showing all diferences between working copy and the one from repository.

3. Automatic mark classes that don’t compile – Eclipse always had the nice feature of showing you in the project tree which classes don’t compile, by coloring with red the class icon and the package icon up to the top-most package. Idea seems to have learn this lesson in 6.0 (still in beta). God knows I missed this feature when using Idea 4.x and 5.x.

4. Large variety of plugins – while this is also a major drawback, overall it’s obviously a good thing. You have plugins for almost anything. Idea doesn’t. Although it’s obviously an advantage, I have to say a few things about how it may turn into a disadvantage: you simply don’t have time to review all existing plugins and choose the best. You have tons of code editing helper plugins and you have no Idea which you should install. Now really, who has the time to try all those. I remember a few years ago searching for the best XML editing plugin. I had no clue which one I should choose. It’s still the same: I read descriptions for 5 plugins doing the same thing and I usually choose the one that’s best advertised and sounds better. For example I have to choose between DBEdit, SQLExplorer, SQLDeveloper, easySQL, DB Studio, and the list can go on (I just picked 5 from the first page on http://eclipse-plugins.2y.net/eclipse/plugins.jsp?category=Database&sort=rating).

5. Javascript – I was amazed by the JS editor from Idea when it first came out. Very powerful. JSEclipse is still the best though, offering amongst others, support for libraries such as dojo, prototype, scriptaculous and others.

6. Context assist for regular expressions – excellent feature. Robert pointed me to it. It really simplifies your life when doing searches using regular expressions. I’m usually avoiding regular expressions when searching, unless there’s no alternative. That’s because editing the right regular expressions (at least for me) takes several tries and sometimes consulting the regex documentation for the text editor I’m using. Well now, Eclipse simplifies your regular expression searches with the context assist. I guess Idea could learn from that too.

7. Automatic selection of same word occurences within the file – when selecting a variable name – Eclipse does highlight that variable in the entire java file. This is useful. Too bad Idea doesn’t do this automatically (see Alexandra’s comment on this)

8. Switching between projects during project loading/resource refreshing – when multiple projects are opened in Idea, sometimes you have to wait for one project to load or finish refreshing resources, since you can’t swith to other Idea windows. It is a reality that a developer may have multiple instances of the same IDE at the same time. This is especially true for Idea which doesn’t support multiple projects in the same window (as opposed to Eclipse which can have multiple projects in one workspace). So why doesn’t Idea support this? I wish I knew the answer.

9. SWT – Eclipse brings SWT (kind of). Don’t know how others feel, but I still see SWT as the one technology that could save Java for desktop. Try build an application like Azureus in Swing. There are examples of good apps built with swing (like Intellij Idea), but SWT is simply looking better. Add to that the entire RCP architecture, the ability to generate native apps for different platforms, build a plugin that can be deployed either as a plugin within the IDE or with relative small effort can be packaged into a new application and you’ll get a very good architecture.

10. Money for IDEA, Eclipse for free – well this would probably be the biggest feature of ’em all :-) While I would still pay money for Idea out of respect for the quality of the tool and the fact that it set higher standards for productivity, Eclipse is no longer trying to reach Idea in terms of features and options and customizations, but it even brings on new concepts and ideas. And although Eclipse has won the IDE wars for some time now, I think we need Idea for a healthy market.


Intellij Idea versus Eclipse – part I

August 10th, 2006 by Marius Hanganu in Java, General, Tools

>> 10 reasons why Idea is better

In this part I’m focusing on advantages of Idea over Eclipse. I plan for a 2nd part to check out the other side – advantages when using Eclipse over Idea.

This is not a major feature comparison, but more of a mix of small experiences intended to ease your life as a developer. I’ve spent a lot of time developing server side applications with both IDEs, so I can’t really speak for differences when it comes to J2ME support or other features. I’ve also had my share of experiences with quite a few Eclipse plugins, but I haven’t tried them all (who did?).

I have to mention I’m talking here about Idea 5.x vs Eclipse 3.1. I played only a bit with Idea 6.0 and barely tried Eclipse 3.2.

1. Navigation – Idea is king when it comes to navigating through hierarchies in Java classes. The ability to go to implementation it’s fun and easy to use. Eclipse may have some plugins that do this, but still not as smooth as Idea.

2. Intentions – when adding methods to your interfaces, Idea automatically suggests you to implement that method in all implementing classes. With Eclipse’s default configuration you can’t do that. Not even sure there are plugins offering this feature. This tremendous feature really improves productivity when you build APIs and continually add methods to your interfaces.

3. One package to rule them all – a lot of functionality packed into one single installer: Idea has almost everything you want packed in one single package. The fact that for Eclipse you have to customize your own distribution is a pain in the a**. There are MyEclipse (not free) which may take Eclipse very close to Idea, or EasyEclipse, which is a distribution packed with almost everything you want.

4. Keyboard shortcuts for ant tasks – Idea allows you to assign keyboard shortcuts for ant tasks which increases productivity. For typical web applications I usually have two shortcuts: one for deploying web resources and one for compiling and deploying java classes. Eclipse didn’t pay too much attention to this feature. I know you can assign one shortcut (don’t ask me how – somebody showed me once and it was so complicated I didn’t bother remembering how to do it). And overall, changing keyboard shortcuts in Eclipse is somehow painful than in Idea. I guess this happens because Idea presents that tree (Settings/Keymap) containing Main Menu and Ant tasks amongst others. Eclipse has two tabs: View & Modify. View shows a long list and Modify shows two combo boxes. Guess the tree control is more suitable here.

5. Exclude folders – Idea has made it so simple to specify which resources you want to exclude from your project: like typical build, dist directories. This is useful for many situations. I’ll just name two:

a) you don’t want to see Idea’s “Updating modified files” loading bar every time you do build or dist your project

b) when opening resources such as XML files, you don’t wanna see two or three XML files with the same name and having to carefully choose which one you edit. In Eclipse it would’ve been so much simpler if they would have use the same Idea of excluded directories. I think I managed to do this once, to avoid the problem from point b), but now I can’t even remember how to do it.

6. Autosave – Idea autosaves each file. Don’t bother manually saving, confirming or discarding file changes. At first, I haven’t appreciated much the Idea. I thought: what happens if I don’t want to save what I modified? If all the text editors and IDEs out there need CTRL+S, why change it? I even found myself pressing CTRL+S out of habit. However, in time I got to appreciate this feature, since 1. it doesn’t bother you with all kind of popups asking whether to save your file or not before running the ant task and 2. it turns out I don’t usually need the option of not saving what has been modified. While it’s not a major feature, it does ease your life and save you from more unwanted mouse clicks.

7. Pinning/unpinning tools windows – Unpinning project window, console window, ant console window or ant window in Idea is a great feature. I usually unpin all my windows and have this way all the screen for editing my java files. And since I customized my keyboard shortcuts, I can easily bring up project window in the left side (I use ALT+~), ant window in the right side (I use ALT+\) and any of the lower windows (debug, run, ant console, etc – Idea’s defaults are ALT+0,1,2…). UPDATE: this can be actually configured also in Eclipse by using fast views on utility windows along with shortcuts for displaying/hiding them. When displaying them, they do however show up over the editor and always on the left side. Almost close to how Idea handles it.

8. Find usages vs References in workspace – Idea finds your usages, automatically selects the first usage, nothing wrong. Eclipse can look for references in workspace, find them, but sometimes forgets to select the first usage. If you have a hierarchy of 5-7 packages, then you’ll understand how painful is to have to open each package to get to the first occurence. I admit with latest versions, Eclipse does its job well almost everytime: searches and focuses automatically on the first reference, but I have no Idea why sometimes (rarely) it just doesn’t do it. It’s so frustrating when it happens.

9. Refactoring in non java resources – when I first discovered you can refactor names in an ant build file I was blown away by how natural this feature seemed. AFAIK in Eclipse you can’t do it (perhaps you know how to do it).

10. Export / import preferences – Idea saves every option you may customize – I still haven’t found some customization that Idea did not saved. As for Eclipse, it has a nice Import/Export preferences feature, but somehow they forgot to save code templates. Since I’m used to templates like “sout” (automatically transformed to “System.out.println” by Idea), I usually customize Eclipse adding a new template, which unfortunately doesn’t get saved when exporting your preferences. I like “sout” better than “sysout” since it’s … shorter.

Part 2 will contain 10 reasons for Eclipse.


The package jedit needs to be reinstalled, but I can’t find an archive for it

August 10th, 2006 by Marius Hanganu in Tools

I tried installing the .deb package for jedit. Big mistake :-). Not only that Ubuntu refused installing it, but it also brought my synaptic into an incosistent state: every time I started synaptic I was getting this error:

The package jedit needs to be reinstalled, but I can't find an archive for it

and then no package was displayed. One of the reasons I like Linux (Ubuntu) over Windows is apt and the synaptic interface. Imagine my desolation.

I tried various “apt-get remove jedit”, clean, autoclean options. No luck. Neither the guys on Ubuntu mailing list could help me out here. Tried removing it using dpkg and I got

dpkg: error processing jedit (--purge):

Package is in a very bad inconsistent state - you should reinstall it before

attempting a removal.

Errors were encountered while processing: jedit

But I finally got it working. This command forced the removal of my incosistent jedit package:

dpkg --remove --force-remove-reinstreq jedit

 

Update: after I managed to fix it and post this entry, I was finally pointed on ubuntu users mailing list to http://ubuntuforums.org/showthread.php?t=232849&highlight=jedit. Phew! lots of replies before the author figured the answer for himself.


Perforce Windows shell integration

August 10th, 2006 by Ioan Cocan in Java, General, Tools

I’m happy again. Perforce shell integration used to make my machine hang on every file browse operation. As we are working with a remote Perforce server we’ve set up a Perforce proxy so we do not hit the remote US machine for the same files.

If the proxy was up and remove server communication was down Windows could not load even items on desktop. Even with all connections in place, right clicking or browsing became a nightmare. Fed up with all this I decided to take the final drastic measure: uninstall the Windows client and somehow work with command line tools. Then it hit me: the Uninstaller has a remove Explorer integration option. Back to work.


Think twice before loving Apple

August 7th, 2006 by Marius Hanganu in Tools

Some time ago I switched my development environment to MacOS. This means I used it intensively and tried to discover all those nice usability things Mac is well known for and if no trick available, try to emulate the little things that made my life easier on Windows.

But I found Cedric Otaku’s entry about MacOS-Windows comparison as being an excellent confession of all the problems MacOS has. And since everyone embraces Apple and all its products with unconditionate love, I welcome Cedric’s pragmatism. Apple lovers need to open their eyes a little bit.

I loved MacOS for its design. The UI of MacOS looks better than Windows: you have all kind of interesting concepts like the finder or very useful things like sticky notes, calendar, calculator, available on one shortcut and so on. However, when you start using it more seriously and try to move your development environment entirely you’ll soon see the gripes of MacOS.

Here are some quotes from Cedric’s entry:
– “I can only resize from one corner and the cursor doesn’t change. Windows has let me resize windows from all four corners and even from all four edges of windows since the early 90’s. What’s taking Apple so long?”
– “Mixing up the quicklaunch bar and the taskbar is a mistake. The little arrow under the icons to indicate which ones are open are confusing, and I find Windows’ solution (two separate and distinct-looking bars) much more intuitive and more practical.”
– “There is no right mouse button on the laptop. Are you kidding me? Yes, I know that you can plug in a mouse and the right button will work right away, but I never use a laptop with a mouse, so I find myself doing the insane Control-click all the time. This is preposterous. And coupled with the absence of a Delete key (see below), I am finding myself doing finger aerobics much more often than I should.”

And there are more… These 3 were some of my biggest frustrations in using MacOS. And looking at the replies, you can find some “solutions” for some problems, but noone talks about the first two. I bet the Apple fans wish inside their hearts they would have those problems fixed. It’s just that they should let it out :-).

Some Apple fans say that: “Hey, Apple invented this and we should be grateful and full of respect, while Microsoft copied it”. Well, we are respectful, but sometimes inovation comes from copying an existing idea and taking it few little steps forward. Being stubborn and maintaining one style won’t help Apple too much. Everyone is going to take their good ideas and improve them.

One other argument is that for users moving from Windows environment to MacOS, you will be frustrated at first, but once the true power of MacOS will be revealed you will never go back to Windows.

What is that? Some sort of a masonic organization – the Holy Grail of computing and user interface usability is hidden in using MacOS for some time? I don’t know how he pulled it, but Steve Jobs has definitely managed to create a network of Apple fanatics. I bet if he’d start a war he would imediately gather all Apple users, while on the other side, Windows would have too few soldiers since they are not fanatics or interested in such a war.

I see MacOS as an illustrious figure in IT history. Although brilliant and well respected, it’s sometime like a dinosaur who refuses to see the inovation, keeping some things “the old way”. This is not healthy for them and it’s too bad, since a company such as Apple could really make a difference and maintain a higher standard of usability.


Develop with pleasure – IntelliJ Idea 6.0 Beta

August 6th, 2006 by Ioan Cocan in Tools

IntelliJ’s Idea 6.0 Beta is out and available free for evaluation. Most expected features were GWT support, TeamCity integration, UI designer enhancements and productivity/editing features. I have not tried (yet) UI and team integration but here are some things that cought my eye.

Built-in Code coverage support – Programmers love improving their code and what better way to do this than seeing coverage percentages of your tests right within the IDE. If you are using unit testing a lot, this gives you good insights about where to focus your tests.

Project-wide error-highlighting – This is something that Eclipse had for a long time, gives you good understanding of where you should go for errors without having to recompile.

There is one missing feature that Eclipse has: selecting a variable should highlight all usages in current block.


HTML visual editor

August 1st, 2006 by Ioan Cocan in Tools

I’ve been looking around for a freeware, not so sofisticated HTML visual editor. Tried out a few popular Tucows downloads and found everything I needed in PageBreeze. Free for non-commercial use, it has drag-and-drop form design with easy preview within the application.