<property name="project.output" value="WEB-INF/classes"/>
<!-- reload the current webapp to refresh the classes that we just changed -->
<get
src="http://localhost:8080/manager/reload?path=/your-web-app"
username="admin-user"
password="admin-pass"
dest="${project.output}/log/reload.log"
/>
<concat><fileset dir="${project.output}/log" includes="reload.log"/></concat>
Wednesday, September 26, 2007
Reload webapp from ant script
A co-worker asked me how he can reload a web-application from an ant script. GDS was very helpfull finding the line in an old ant script I used to use. In the example below you might want to define $project.output
Monday, September 24, 2007
RequestDispatcher.forward() and filters
If you have read this post then you probably know that if you use RequestDispatcher.forward() (or RequestDispatcher.include()) the filter chain does not get re-called for the forwarded servlet/jsp. However, if you read more closely you see that Craig was talking about the 2.3 servlet spec. Since we are using tomcat 5.5 which conforms to the 2.4 spec, you should know that there's a new <dispatcher> element in the deployment descriptor with possible values REQUEST, FORWARD, INCLUDE, and ERROR. You can add any number of entries to a <filter-mapping> tag and individually decide which filter gets called when. An Example:
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
Simpler GUI for Jad, The Java Decompiler from As I Learn
This is definitely the most useful two-liner I've seen in a while:
Simpler GUI for Jad, The Java Decompiler.
Changed extension to java so that textpad does syntax highlighting; added -lnc so that jad outputs the original line numbers as comments and I can trace the exceptions I get
(after a few questions from people i'm editing this post:)
You will need to download jad and extract the exeutable to somewhere on your path, say C:\windows (or c:\winnt). Then create a new .cmd file, paste the above into the .cmd file, and put it somewhere. Then rightclick any .class file you can find, choose "Open With..."->"Choose Program"->"Browse..." and find the cmd file you created (don't forget to check the "Always use this program"). This way, any .class you'll double-click will decompile and open in textpad.
Simpler GUI for Jad, The Java Decompiler.
I naturally customized it to:
jad -o -s java -lnc -d%TEMP% %1
"C:\Program Files\TextPad 5\TextPad.exe" %TEMP%.\%~n1.java
Changed extension to java so that textpad does syntax highlighting; added -lnc so that jad outputs the original line numbers as comments and I can trace the exceptions I get
(after a few questions from people i'm editing this post:)
You will need to download jad and extract the exeutable to somewhere on your path, say C:\windows (or c:\winnt). Then create a new .cmd file, paste the above into the .cmd file, and put it somewhere. Then rightclick any .class file you can find, choose "Open With..."->"Choose Program"->"Browse..." and find the cmd file you created (don't forget to check the "Always use this program"). This way, any .class you'll double-click will decompile and open in textpad.
Monday, September 17, 2007
Using java regular expressions to match groups
It's been demonstrated over and over again, but I always seem to forget the "simple example". So here it is:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
...
/*
*Going to match a URL that looks like this
* /url/prefix/--sitename--/menu.--menuid--/?param=--itemid--
* and change it into
* /url/prefix/--sitename--/--menuname--/--itemname--
*/
String expr="(/url/prefix/[a-zA-Z0-9_-]+)/menu\\.([a-zA-Z0-9_-]+)/\\?param=([a-zA-Z0-9_-]+)";
Pattern p = Pattern.compile(expr);
Matcher m = p.matcher(uri);
if ( m.matches() ) {
prefix= m.group(1);
menuitem = m.group(2);
guid = m.group(3);
if ( guid != null && prefix != null && menuitem != null ) {
uribuilder.append(prefix);
uribuilder.append("/");
uribuilder.append(getMenuName(menuitem));
uribuilder.append("/");
uribuilder.append(getItemName(guid));
uri=uribuilder.toString();
}
}
Thursday, September 6, 2007
Does GDS slows my hard disk?
I've a encountred a strange problems that when Google Desktop Search is running on my PC (which it almost always is), my hard disk's read speed is about 1/6th of the normal speed. I'll contact google to see if this is a known issue. I'm using several HD benchmark tools to test the speed, most notably Simpli Software's Hd Tach.
Here are screenshots of my disk's speed with and without GDS running.

Here are screenshots of my disk's speed with and without GDS running.

Avoding browser history when changing iframe src
We ran into a problem where we needed to have an iframe who's source needed to be changed dynamically by a javascript based on some user data. The issue was that Internet Explorer saved the iframe's old url in the history. The simple solution is to dynamically write the iframe with it's real src instead of having an iframe on the page and then changing it's src.
You do it like this:
Elementry, my dear Watson.
You do it like this:
var iframeHeaderCell = document.getElementById('wheretoputheiframe');
var dynamicURL = 'http://...' //your url
var iframeHeader = document.createElement('IFRAME');
iframeHeader.id = 'iframeHeader';
iframeHeader.src = dynamicURL ;
iframeHeader.width = ...;
iframeHeader.height = ...;
iframeHeader.scrolling = 'no';
iframeHeader.frameBorder = 0;
iframeHeader.align = 'center';
iframeHeader.valign='top'
iframeHeader.marginwidth = 0;
iframeHeader.marginheight = 0;
iframeHeader.hspace = 0;
iframeHeader.vspace = 0;
iframeHeaderCell.appendChild(iframeHeader);
Elementry, my dear Watson.
Monday, August 13, 2007
Updateing your docroot from subversion
We need to update our integration environment from svn every once in a while. At the moment a manual process is required since our svn gets commited into even if not everything is really stable and we only want to update the integration env when we feel the system is stable. We could do it manually by ssh-ing into the machine, but i hate people logging into my box to do stuff that should have a web interface, and we will probably want to extend that interface in the future.
Here is what I did:
First, manually do an svn checkout in the docroot:
Second, you will want a small PHP script to do all the work for you, so you will not have to ssh to machine all the time:
The thing is that since apache does not change it's user properly, svn cannot be properly run as apache, so will need the sudo there.
Third, in order for all of this to work, you will need to setup /etc/sudoers properly so go ahead and add this to it:
This will of course grow into something much more elaborate, that allows you to select projects, update on schedule, etc.
---
EDIT
---
note that if you do what i specified above, then every update from subversion will reset the owner for the files under the docroot to root. This is generally not a good idea, so i suggest you put the svn update line in a shell script and add a "chown -R apache:apache projectname" to that script. then you can just sudo yourscript.sh from the php file.
Here is what I did:
First, manually do an svn checkout in the docroot:
su -
cd /var/www/html
svn co --username myusername svn://mysvnhost/svn/repositories/repository-name/projectname projectname
chown -R apache:apache projectname
Second, you will want a small PHP script to do all the work for you, so you will not have to ssh to machine all the time:
<?php
$docroot="/var/www/html";
$project="projectname";
$username="username";
$password="password";
$log = "ACTION LOG\n---------------\n\n";
$log .= shell_exec("sudo svn up --username $username --password $password $docroot/$project");
echo "<pre>$log</pre>";
?>
The thing is that since apache does not change it's user properly, svn cannot be properly run as apache, so will need the sudo there.
Third, in order for all of this to work, you will need to setup /etc/sudoers properly so go ahead and add this to it:
apache ALL=NOPASSWD:/usr/bin/svn
This will of course grow into something much more elaborate, that allows you to select projects, update on schedule, etc.
---
EDIT
---
note that if you do what i specified above, then every update from subversion will reset the owner for the files under the docroot to root. This is generally not a good idea, so i suggest you put the svn update line in a shell script and add a "chown -R apache:apache projectname" to that script. then you can just sudo yourscript.sh from the php file.
Tuesday, July 31, 2007
mysqltop.sh
If you need to monitor mysql proccesslist, dump the following to a shell script and chmod 755. (ofcourse you will need to add passwords etc. if you have any;)
(Control+C will let you out)
#!/bin/sh
watch 'mysql<<EOF
show processlist;
EOF
'
(Control+C will let you out)
Two webapps using shared jar - ClassLoader problem
Yeah, yeah, I know it's obvious, but i thought i might be smarter. I am not:
See:
Charles R Caldarale Writes:
“[When using Tomcat,] classes from different webapps cannot access each other - no ifs, ands, or buts. Anything that is to be accessed from more than one webapp must be put in a common location [such as tomcat/shared].”
See:
Monday, June 18, 2007
Internet Explorer CSS Limit
We just came across a bug that makes IE choke when it needs to handle over 30 <style> objects. If you thought of using a single style object and then @import the other files, it won't work either.
You might want to ask why we need over 30 style objects. Well, since each drupal module tends to add it's own CSS (using drupal_add_css) we very quickly got to 22 CSS's being included. From there the road to 30-32 was quite trivial. Guess we'll have to use Drupal's CSS/JS aggragator to solve this.
You might want to ask why we need over 30 style objects. Well, since each drupal module tends to add it's own CSS (using drupal_add_css) we very quickly got to 22 CSS's being included. From there the road to 30-32 was quite trivial. Guess we'll have to use Drupal's CSS/JS aggragator to solve this.
Sunday, June 10, 2007
Calcualting Average in UNIX Shell Script
I grabbed a piece of code to calculate an average for data in shell. It didn't work so I had to modify it. This is the result.
#!/bin/sh
n=0
sum=0
while read x
do
sum=`echo $sum + $x | bc`
if [ "$?" -eq "0" ]; then
n=`expr $n + 1`
fi
done
echo "scale=2;$sum/$n"| bc
Thursday, June 7, 2007
Server Header in Apache Tomcat
Altough you cannot disable the header, you can change it to anything you like by adding a "server" attribute to the connector tag in server.xml
e.g.
e.g.
<connector
port="80" address="localhost"
...
server="Undefined"
>
RoundToNearest in Microsoft Excel
This will round the given cells to the nearest number given, pretty neat if you want to produce a repost that is rounded, e.g. to the 0.25.
=IF(C50>0,CEILING(C50,0.25),-CEILING(C50,0.25))
Thursday, May 31, 2007
MySQL Cluster
I did some research on MySQL cluster so i can recommend one of our customers whether to use it or not. It turns out that the MySQL cluster is very different from other DBMS clustering solutions in that it distributes the data across the nodes (synchronously) and then stores it on the disk (asynchronously). This is all very nice, but at the moment all data is stored in memory, so if I have a 120GB database I would need around 150GB memory on each node, which is silly.
The Wikipedia Page on MySQL Cluster gives more details.
Waiting for MySQL to get better...
UPDATE: It seems that this is no longer the case for the 5.1 version of mysql. See here.
The Wikipedia Page on MySQL Cluster gives more details.
Waiting for MySQL to get better...
UPDATE: It seems that this is no longer the case for the 5.1 version of mysql. See here.
Welcome - eureka
Why this blog?
Post random thoughts about random technology issues. Basically acts as an online(public) notepad, so i can keep track of things i found and do not wish to forget.
Why eureka?
Post random thoughts about random technology issues. Basically acts as an online(public) notepad, so i can keep track of things i found and do not wish to forget.
Why eureka?
eureka is the greek word for 'I have found (it)', supposedly exclaimed
by Archimedes upon discovering how to measure the volume of an irregular solid
and thereby determine the purity of a gold object. source: http://www.answers.com/eureka&r=67
Subscribe to:
Posts (Atom)