<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<meta http-equiv="content-script-type" content="text/javascript">
<meta http-equiv="content-style-type" content="text/css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>ProGuard Feedback</title>
<script type="text/javascript" language="JavaScript">
<!--
if (window.self==window.top)
  window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
else {
  var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
  if (window.top.location.hash!=hash)
    window.top.location.hash=hash;
}
//-->
</script>
</head>
<body>

<h2>Feedback</h2>

By now, I've invested a fair amount of time in <b>ProGuard</b>. You can help
by providing feedback! If you have problems, bugs, bug fixes, ideas,
encouragements, etc., please get in touch:
<p>
<ul class="spacious">
<li>Through
    <a href="http://www.saikoa.com/proguard/support" target="_top">Saikoa</a>,
    we provide professional support for ProGuard. If you find ProGuard useful
    and you would like to have some professional backing, this is the place to
    go.</li>

<li>The <a href="https://sourceforge.net/projects/proguard/forums/forum/182456"
    target="other">help forum</a> (at SourceForge) is the right place to ask
    questions about any problems you might have configuring and running
    ProGuard. At this time, I can generally only assist other open source
    projects though. If you're working on commercial software, please consider
    our professional support above.</li>

<li>The <a href="https://sourceforge.net/projects/proguard/forums/forum/182455"
    target="other">open discussion forum</a> (at SourceForge) offers a place
    to share your thoughts and discuss new ideas.</li>

<li>The <a
    href="http://sourceforge.net/tracker/?atid=474704&group_id=54750&func=browse"
    target="other">bug tracking page</a> (at SourceForge) allows you to submit
    and consult bug reports. Please make sure the reports are complete and
    concise. If I can't reproduce the problem, I most likely can't fix it
    either.</li>

<li>The <a

    href="http://sourceforge.net/tracker/?atid=474707&group_id=54750&func=browse"
    target="other">feature request page</a> (at SourceForge) allows you to
    submit and consult feature requests. I generally have my own road map in
    mind, but this is the place express your interest in new and existing
    ideas.</li>

<li>The <a href="https://sourceforge.net/projects/proguard/files/"
    target="other">download section</a> at SourceForge and the <a
    href="http://software.freshmeat.net/projects/proguard/"
    target="other">project page</a> at FreshMeat offer the possibility to
    subscribe to the announcements of new releases. They are the most
    efficient way to stay abreast of the latest developments.</li>

<li>For anything that doesn't fall in the above categories, you can mail me
    directly at

<script type="text/javascript" language="JavaScript">
<!--
document.write("<a href=\"ma");
document.write("ilto:");
document.write("lafortune");
document.write("&#64;");
document.write("users.sourceforge.net\">");
document.write("lafortune");
document.write("&#64;");
document.write("users.sourceforge.net");
document.write("</a>");
document.write(" <em>or</em> at ");
document.write("<a href=\"ma");
document.write("ilto:");
document.write("eric");
document.write("&#64;");
document.write("graphics.cornell.edu\">");
document.write("eric");
document.write("&#64;");
document.write("graphics.cornell.edu");
document.write("</a>");
//-->
</script>
<noscript>
&lt;&nbsp;lafortune&nbsp;&#64;&nbsp;users&nbsp;.&nbsp;sourceforge&nbsp;.&nbsp;net&nbsp;&gt;
<em>or</em> at
&lt;&nbsp;eric&nbsp;&#64;&nbsp;graphics&nbsp;.&nbsp;cornell&nbsp;.&nbsp;edu&nbsp;&gt; (please remove the spaces)
</noscript>
.</li>
</ul>
<p>
I can't promise a swift answer, or any answer at all, for that matter, but I
like seeing any constructive comments.
<p>

<b>ProGuard</b> isn't a typical open source project, in the sense that I am
<em>not</em> looking for code contributions. Developing on my own allows me to
do things my way, without the overhead and compromises associated with larger
projects.

<hr />
<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
<address>
Copyright &copy; 2002-2011
<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
</address>

</body>
</html>
