<!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 an enormous amount of time in <b>ProGuard</b>. You can
help by providing feedback! If you have problems, bugs, bug fixes, ideas,
encouragements, etc., please let me know:
<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)
    and <a href="http://stackoverflow.com/questions/tagged/proguard"
    target="other">Stack Overflow</a> are common places 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/p/proguard/bugs/" 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/p/proguard/feature-requests/"
    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.freecode.com/projects/proguard"
    target="other">project page</a> at Freecode (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 it's
always great to see 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-2013
<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
</address>

</body>
</html>
