SourceForge logo
SourceForge logo
Menu

matplotlib-devel — matplotlib developers

You can subscribe to this list here.

2003 Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
(1)
Nov
(33)
Dec
(20)
2004 Jan
(7)
Feb
(44)
Mar
(51)
Apr
(43)
May
(43)
Jun
(36)
Jul
(61)
Aug
(44)
Sep
(25)
Oct
(82)
Nov
(97)
Dec
(47)
2005 Jan
(77)
Feb
(143)
Mar
(42)
Apr
(31)
May
(93)
Jun
(93)
Jul
(35)
Aug
(78)
Sep
(56)
Oct
(44)
Nov
(72)
Dec
(75)
2006 Jan
(116)
Feb
(99)
Mar
(181)
Apr
(171)
May
(112)
Jun
(86)
Jul
(91)
Aug
(111)
Sep
(77)
Oct
(72)
Nov
(57)
Dec
(51)
2007 Jan
(64)
Feb
(116)
Mar
(70)
Apr
(74)
May
(53)
Jun
(40)
Jul
(519)
Aug
(151)
Sep
(132)
Oct
(74)
Nov
(282)
Dec
(190)
2008 Jan
(141)
Feb
(67)
Mar
(69)
Apr
(96)
May
(227)
Jun
(404)
Jul
(399)
Aug
(96)
Sep
(120)
Oct
(205)
Nov
(126)
Dec
(261)
2009 Jan
(136)
Feb
(136)
Mar
(119)
Apr
(124)
May
(155)
Jun
(98)
Jul
(136)
Aug
(292)
Sep
(174)
Oct
(126)
Nov
(126)
Dec
(79)
2010 Jan
(109)
Feb
(83)
Mar
(139)
Apr
(91)
May
(79)
Jun
(164)
Jul
(184)
Aug
(146)
Sep
(163)
Oct
(128)
Nov
(70)
Dec
(73)
2011 Jan
(235)
Feb
(165)
Mar
(147)
Apr
(86)
May
(74)
Jun
(118)
Jul
(65)
Aug
(75)
Sep
(162)
Oct
(94)
Nov
(48)
Dec
(44)
2012 Jan
(49)
Feb
(40)
Mar
(88)
Apr
(35)
May
(52)
Jun
(69)
Jul
(90)
Aug
(123)
Sep
(112)
Oct
(120)
Nov
(105)
Dec
(116)
2013 Jan
(76)
Feb
(26)
Mar
(78)
Apr
(43)
May
(61)
Jun
(53)
Jul
(147)
Aug
(85)
Sep
(83)
Oct
(122)
Nov
(18)
Dec
(27)
2014 Jan
(58)
Feb
(25)
Mar
(49)
Apr
(17)
May
(29)
Jun
(39)
Jul
(53)
Aug
(52)
Sep
(35)
Oct
(47)
Nov
(110)
Dec
(27)
2015 Jan
(50)
Feb
(93)
Mar
(96)
Apr
(30)
May
(55)
Jun
(83)
Jul
(44)
Aug
(8)
Sep
(5)
Oct
Nov
(1)
Dec
(1)
2016 Jan
Feb
Mar
(1)
Apr
May
Jun
(2)
Jul
Aug
(3)
Sep
(1)
Oct
(3)
Nov
Dec
2017 Jan
Feb
(5)
Mar
Apr
May
Jun
Jul
(3)
Aug
Sep
(7)
Oct
Nov
Dec
2018 Jan
Feb
Mar
Apr
May
Jun
Jul
(2)
Aug
Sep
Oct
Nov
Dec
S M T W T F S





1
(9)
2
(2)
3
(2)
4
(1)
5
(14)
6
(3)
7
(1)
8
(3)
9
10
(7)
11
(4)
12
13
(11)
14
(1)
15
(2)
16
17
18
19
(3)
20
(2)
21
22
23
(1)
24
25
26
(1)
27
28
29

Showing 14 results of 14

From: Gael V. <gae...@no...> - 2008年02月05日 23:50:57
On Tue, Feb 05, 2008 at 06:46:19PM -0500, Paul Kienzle wrote:
> In my applications I select multiple points from a particular line,
> highlighting the point that will be selected as the mouse cursor moves. 
> I put a text message on the plot explaining what to do which disappears 
> when the selection is complete.
The idea of the text message is pretty cool in term of usability.
All in all the features that you describe are relly nice. I am sure that
if you find a way to make them toolkit-agnostic they would be a great
addition to MPL.
> Some other useful cases are selecting an x-range, a y-range or a box,
> with the appropriate shading for the selected region.
Same thing here, this is quite nice too. I think this behavior can now be
created using ginput, but it would be cool to have it out of the box.
Sorry, I can't work on it know.
Gaël
From: Paul K. <pki...@ni...> - 2008年02月05日 23:46:31
On Tue, Feb 05, 2008 at 11:23:14PM +0100, Gael Varoquaux wrote:
> On Tue, Feb 05, 2008 at 04:11:59PM -0600, John Hunter wrote:
> > Also, my version of GaelInput has seemed to stop evolving. This
> > version has the option to draw lines between clicks, which I use a
> > lot. Also, the default timeout is 0 now, since you can always
> > right-click to abort.
> 
> You can still use this behavoir, using a timeout of zero, n = 0, and the
> middle click to end (I use right_click to cancel points). I am not sure
> what the default timeout should be. If you have strong opinions about it
> being 0, that's fine with me.
> 
> As far as n = 0 being the default, I think this is a bad idea. First of
> all, it break matlab-compatibility for no good reasons, second in most
> cases, IMHO, the naive programmer only wants one point, and puts some
> logics afterwards. He will not read the doc, and wont understand why his
> function is not returning after one click (so many people don't even know
> how to read docstring, I am not kidding).
> 
> As for the lines, having lines implies that there is a connection order
> in your points, which is not always the case. I suggest thus adding a
> optional (oof by default) keyword argument for this behavior.
In my applications I select multiple points from a particular line,
highlighting the point that will be selected as the mouse cursor moves. 
I put a text message on the plot explaining what to do which disappears 
when the selection is complete.
Some other useful cases are selecting an x-range, a y-range or a box,
with the appropriate shading for the selected region.
This is still in Tcl/Tk+BLT; I haven't moved it over to Python yet.
- Paul
From: Gael V. <gae...@no...> - 2008年02月05日 23:38:42
On Tue, Feb 05, 2008 at 06:30:53PM -0500, Paul Kienzle wrote:
> This failed for me in wx.
> I posted a patch r4943 which moves flush_events from Figure to Canvas,
> and removes the Yield in gui_repaint which caused an exception in wx.
> The showfig callback in FigureManagerWx had an unreferenced global
> variable figwin which I removed. It wasn't obvious to me why this 
> was broken, or how long it has been broken, but the ginput example
> works for me now.
Yes, I had noticed this problem (did I signal it to the list, or did I
forget ?) I wasn't too sure what to do about it, as I don't really know
the MPL codebase. As a result I tested the principle under Wx in an older
version of MPL, which did not have this problem, but also did not have
Yield in gui_repaint. But you sorted out this problem, thanks a lot!
> Setting the timeout to 0.01s for the busy loop in ginput seems excessive.
> Since it is waiting for human interaction, generally 0.1 seconds is good
> enough.
I had gone for that originally, but it looked quite ugly when moving the
window around. This busy waiting is quite ugly, but I have found a way of
avoid it. IMHO it should be done in the toolkit's event loop, but it
seems that trying to do it this would add gobbles of code for little
gain.
Cheers,
Gaël
From: Paul K. <pki...@ni...> - 2008年02月05日 23:32:08
On Tue, Feb 05, 2008 at 01:05:55PM -1000, Eric Firing wrote:
> Paul Kienzle wrote:
> > Hi,
> > 
> > I have a patch to post the results of examples/backend_driver.py to
> > a backend specific directory, after first clearing the directory.
> 
> Excellent idea.
> 
> > 
> > Shall I commit?
> 
> Yes.
Done.
	- Paul
From: Paul K. <pki...@ni...> - 2008年02月05日 23:31:08
On Tue, Feb 05, 2008 at 03:58:08PM -0600, John Hunter wrote:
> On Feb 2, 2008 8:48 AM, Gael Varoquaux <gae...@no...> wrote:
> 
> > Here is the new patch. I added visual feedback when accumulating points.
> > I hope the docstrings are clear.
> 
> Great -- thanks again. I applied this patch and created a new example
> ginput_demo.py
> 
> Tested on GTKAgg and TkAgg on my system, and looks good so far.
This failed for me in wx.
I posted a patch r4943 which moves flush_events from Figure to Canvas,
and removes the Yield in gui_repaint which caused an exception in wx.
The showfig callback in FigureManagerWx had an unreferenced global
variable figwin which I removed. It wasn't obvious to me why this 
was broken, or how long it has been broken, but the ginput example
works for me now.
Setting the timeout to 0.01s for the busy loop in ginput seems excessive.
Since it is waiting for human interaction, generally 0.1 seconds is good
enough.
	- Paul
From: Eric F. <ef...@ha...> - 2008年02月05日 23:06:12
Paul Kienzle wrote:
> Hi,
> 
> I have a patch to post the results of examples/backend_driver.py to
> a backend specific directory, after first clearing the directory.
Excellent idea.
> 
> Shall I commit?
Yes.
Eric
> 
> 	- Paul
> 
> Index: backend_driver.py
> ===================================================================
> --- backend_driver.py (revision 4942)
> +++ backend_driver.py (working copy)
> @@ -131,6 +131,16 @@
> _backend = 'cairo'
> else:
> _backend = backend
> +
> + # Clear the destination directory for the examples
> + path = backend
> + if os.path.exists(path):
> + import glob
> + for fname in os.listdir(path):
> + os.unlink(os.path.join(path,fname))
> + else:
> + os.mkdir(backend)
> +
> for fname in files:
> if fname in exclude:
> print '\tSkipping %s, known to fail on backend: %s'%backend
> @@ -138,7 +148,7 @@
> 
> print ('\tdriving %-40s' % (fname)),
> basename, ext = os.path.splitext(fname)
> - outfile = basename + '_%s'%backend
> + outfile = os.path.join(path,basename)
> tmpfile_name = '_tmp_%s.py' % basename
> tmpfile = file(tmpfile_name, 'w')
> 
> 
> 
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> Matplotlib-devel mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
From: Paul K. <pki...@ni...> - 2008年02月05日 22:34:46
Hi,
I have a patch to post the results of examples/backend_driver.py to
a backend specific directory, after first clearing the directory.
Shall I commit?
	- Paul
Index: backend_driver.py
===================================================================
--- backend_driver.py (revision 4942)
+++ backend_driver.py (working copy)
@@ -131,6 +131,16 @@
 _backend = 'cairo'
 else:
 _backend = backend
+
+ # Clear the destination directory for the examples
+ path = backend
+ if os.path.exists(path):
+ import glob
+ for fname in os.listdir(path):
+ os.unlink(os.path.join(path,fname))
+ else:
+ os.mkdir(backend)
+
 for fname in files:
 if fname in exclude:
 print '\tSkipping %s, known to fail on backend: %s'%backend
@@ -138,7 +148,7 @@
 
 print ('\tdriving %-40s' % (fname)),
 basename, ext = os.path.splitext(fname)
- outfile = basename + '_%s'%backend
+ outfile = os.path.join(path,basename)
 tmpfile_name = '_tmp_%s.py' % basename
 tmpfile = file(tmpfile_name, 'w')
 
From: Gael V. <gae...@no...> - 2008年02月05日 22:23:27
On Tue, Feb 05, 2008 at 04:11:59PM -0600, John Hunter wrote:
> Also, my version of GaelInput has seemed to stop evolving. This
> version has the option to draw lines between clicks, which I use a
> lot. Also, the default timeout is 0 now, since you can always
> right-click to abort.
You can still use this behavoir, using a timeout of zero, n = 0, and the
middle click to end (I use right_click to cancel points). I am not sure
what the default timeout should be. If you have strong opinions about it
being 0, that's fine with me.
As far as n = 0 being the default, I think this is a bad idea. First of
all, it break matlab-compatibility for no good reasons, second in most
cases, IMHO, the naive programmer only wants one point, and puts some
logics afterwards. He will not read the doc, and wont understand why his
function is not returning after one click (so many people don't even know
how to read docstring, I am not kidding).
As for the lines, having lines implies that there is a connection order
in your points, which is not always the case. I suggest thus adding a
optional (oof by default) keyword argument for this behavior.
I am working late hours currently to try to improve the mayavi2 docs
before we do a major release, I can't work on this patchs. Jack, do you
feel like writing it. It should be pretty trivial by simply extending
what I wrote for displaying points, and cleaning them afterward, which is
the hardest part.
Sorry not to propose to do it myself, but I already put myself behind the
release schedule by hacking on this on saturday, and I am not even
talking about my day work.
Cheers,
Gaël
From: Jack S. <jac...@gm...> - 2008年02月05日 22:17:57
I'm not at all attached to any particular functionality. Feel free to
mangle it as you see fit!
On Feb 5, 2008 5:11 PM, John Hunter <jd...@gm...> wrote:
> On Feb 5, 2008 3:58 PM, John Hunter <jd...@gm...> wrote:
> > On Feb 2, 2008 8:48 AM, Gael Varoquaux <gae...@no...> wrote:
> >
> > > Here is the new patch. I added visual feedback when accumulating points.
> > > I hope the docstrings are clear.
> >
> > Great -- thanks again. I applied this patch and created a new example
> > ginput_demo.py
>
> Jack replied to me offlist so I am going to paste in his post below.
> Perhaps you and Gael can consult on the ideal functionality of ginput
> vis-a-vis optional line segment drawing, etc...
>
>
>
> From Jack Sankey <jac...@gm...>
> to John Hunter <jd...@gm...>,
> date Feb 5, 2008 4:02 PM
> subject Re: [matplotlib-devel] ginput: blocking call for mouse input
> mailed-by gmail.com
>
>
>
>
> Woa, it's working on GTKAgg using wx.Yield()? You must have added some voodoo :)
>
> Also, my version of GaelInput has seemed to stop evolving. This
> version has the option to draw lines between clicks, which I use a
> lot. Also, the default timeout is 0 now, since you can always
> right-click to abort.
>
> -Jack
>
>
>
> class GaelInput(object):
> """
> Class that create a callable object to retrieve mouse click in a
> blocking way, a la MatLab. Based on Gael Varoquaux's almost-working
> object. Thanks Gael! I've wanted to get this working for years!
>
> -Jack
> """
>
> debug = False
> cid = None # event connection object
> clicks = [] # list of click coordinates
> n = 1 # number of clicks we're waiting for
> lines = False # if we should draw the lines
>
> def on_click(self, event):
> """
> Event handler that will be passed to the current figure to
> retrieve clicks.
> """
>
> # write the debug information if we're supposed to
> if self.debug: print "button "+str(event.button)+":
> "+str(event.xdata)+", "+str(event.ydata)
>
> # if this event's a right click we're done
> if event.button == 3:
> self.done = True
> return
>
> # if it's a valid click (and this isn't an extra event
> # in the queue), append the coordinates to the list
> if event.inaxes and not self.done:
> self.clicks.append([event.xdata, event.ydata])
>
> # now if we're supposed to draw lines, do so
> if self.lines and len(self.clicks) > 1:
> event.inaxes.plot([self.clicks[-1][0], self.clicks[-2][0]],
> [self.clicks[-1][1], self.clicks[-2][1]],
> color='w', linewidth=2.0,
> scalex=False, scaley=False)
> event.inaxes.plot([self.clicks[-1][0], self.clicks[-2][0]],
> [self.clicks[-1][1], self.clicks[-2][1]],
> color='k', linewidth=1.0,
> scalex=False, scaley=False)
> _pylab.draw()
>
> # if we have n data points, we're done
> if len(self.clicks) >= self.n and self.n is not 0:
> self.done = True
> return
>
>
> def __call__(self, n=1, timeout=0, debug=False, lines=False):
> """
> Blocking call to retrieve n coordinate pairs through mouse clicks.
>
> n=1 number of clicks to collect. Set n=0 to keep collecting
> points until you click with the right mouse button.
>
> timeout=30 maximum number of seconds to wait for clicks
> before giving up.
> timeout=0 to disable
>
> debug=False show each click event coordinates
>
> lines=False draw lines between clicks
> """
>
> # just for printing the coordinates
> self.debug = debug
>
> # for drawing lines
> self.lines = lines
>
> # connect the click events to the on_click function call
> self.cid = _pylab.connect('button_press_event', self.on_click)
>
> # initialize the list of click coordinates
> self.clicks = []
>
> # wait for n clicks
> self.n = n
> self.done = False
> t = 0.0
> while not self.done:
> # key step: yield the processor to other threads
> _wx.Yield();
> _time.sleep(0.1)
>
> # check for a timeout
> t += 0.1
> if timeout and t > timeout: print "ginput timeout"; break;
>
> # All done! Disconnect the event and return what we have
> _pylab.disconnect(self.cid)
> self.cid = None
> return _numpy.array(self.clicks)
>
>
>
> def ginput(n=1, timeout=0, show=True, lines=False):
> """
> Simple functional call for physicists. This will wait for n clicks
> from the user and
> return a list of the coordinates of each click.
>
> n=1 number of clicks to collect
> timeout=30 maximum number of seconds to wait for clicks
> before giving up.
> timeout=0 to disable
> show=True print the clicks as they are received
> lines=False draw lines between clicks
> """
>
> x = GaelInput()
> return x(n, timeout, show, lines)
>
From: John H. <jd...@gm...> - 2008年02月05日 22:12:03
On Feb 5, 2008 3:58 PM, John Hunter <jd...@gm...> wrote:
> On Feb 2, 2008 8:48 AM, Gael Varoquaux <gae...@no...> wrote:
>
> > Here is the new patch. I added visual feedback when accumulating points.
> > I hope the docstrings are clear.
>
> Great -- thanks again. I applied this patch and created a new example
> ginput_demo.py
Jack replied to me offlist so I am going to paste in his post below.
Perhaps you and Gael can consult on the ideal functionality of ginput
vis-a-vis optional line segment drawing, etc...
From	Jack Sankey <jac...@gm...>
to	John Hunter <jd...@gm...>,
date	Feb 5, 2008 4:02 PM
subject	Re: [matplotlib-devel] ginput: blocking call for mouse input
mailed-by	gmail.com
	
	
	
Woa, it's working on GTKAgg using wx.Yield()? You must have added some voodoo :)
Also, my version of GaelInput has seemed to stop evolving. This
version has the option to draw lines between clicks, which I use a
lot. Also, the default timeout is 0 now, since you can always
right-click to abort.
-Jack
class GaelInput(object):
 """
 Class that create a callable object to retrieve mouse click in a
 blocking way, a la MatLab. Based on Gael Varoquaux's almost-working
 object. Thanks Gael! I've wanted to get this working for years!
 -Jack
 """
 debug = False
 cid = None # event connection object
 clicks = [] # list of click coordinates
 n = 1 # number of clicks we're waiting for
 lines = False # if we should draw the lines
 def on_click(self, event):
 """
 Event handler that will be passed to the current figure to
 retrieve clicks.
 """
 # write the debug information if we're supposed to
 if self.debug: print "button "+str(event.button)+":
"+str(event.xdata)+", "+str(event.ydata)
 # if this event's a right click we're done
 if event.button == 3:
 self.done = True
 return
 # if it's a valid click (and this isn't an extra event
 # in the queue), append the coordinates to the list
 if event.inaxes and not self.done:
 self.clicks.append([event.xdata, event.ydata])
 # now if we're supposed to draw lines, do so
 if self.lines and len(self.clicks) > 1:
 event.inaxes.plot([self.clicks[-1][0], self.clicks[-2][0]],
 [self.clicks[-1][1], self.clicks[-2][1]],
 color='w', linewidth=2.0,
scalex=False, scaley=False)
 event.inaxes.plot([self.clicks[-1][0], self.clicks[-2][0]],
 [self.clicks[-1][1], self.clicks[-2][1]],
 color='k', linewidth=1.0,
scalex=False, scaley=False)
 _pylab.draw()
 # if we have n data points, we're done
 if len(self.clicks) >= self.n and self.n is not 0:
 self.done = True
 return
 def __call__(self, n=1, timeout=0, debug=False, lines=False):
 """
 Blocking call to retrieve n coordinate pairs through mouse clicks.
 n=1 number of clicks to collect. Set n=0 to keep collecting
 points until you click with the right mouse button.
 timeout=30 maximum number of seconds to wait for clicks
before giving up.
 timeout=0 to disable
 debug=False show each click event coordinates
 lines=False draw lines between clicks
 """
 # just for printing the coordinates
 self.debug = debug
 # for drawing lines
 self.lines = lines
 # connect the click events to the on_click function call
 self.cid = _pylab.connect('button_press_event', self.on_click)
 # initialize the list of click coordinates
 self.clicks = []
 # wait for n clicks
 self.n = n
 self.done = False
 t = 0.0
 while not self.done:
 # key step: yield the processor to other threads
 _wx.Yield();
 _time.sleep(0.1)
 # check for a timeout
 t += 0.1
 if timeout and t > timeout: print "ginput timeout"; break;
 # All done! Disconnect the event and return what we have
 _pylab.disconnect(self.cid)
 self.cid = None
 return _numpy.array(self.clicks)
def ginput(n=1, timeout=0, show=True, lines=False):
 """
 Simple functional call for physicists. This will wait for n clicks
from the user and
 return a list of the coordinates of each click.
 n=1 number of clicks to collect
 timeout=30 maximum number of seconds to wait for clicks
before giving up.
 timeout=0 to disable
 show=True print the clicks as they are received
 lines=False draw lines between clicks
 """
 x = GaelInput()
 return x(n, timeout, show, lines)
From: John H. <jd...@gm...> - 2008年02月05日 21:58:15
On Feb 2, 2008 8:48 AM, Gael Varoquaux <gae...@no...> wrote:
> Here is the new patch. I added visual feedback when accumulating points.
> I hope the docstrings are clear.
Great -- thanks again. I applied this patch and created a new example
ginput_demo.py
Tested on GTKAgg and TkAgg on my system, and looks good so far.
JDH
From: Ondrej C. <on...@ce...> - 2008年02月05日 15:52:45
On Jan 31, 2008 11:35 PM, Johann Cohen-Tanugi <co...@sl...> wrote:
> Actually, it seems that the following thread is also relevant to this
> issue : [matplotlib-devel] merging sympy plotting stuff with matplotlib
> <http://www.mail-archive.com/mat...@li.../msg02276.html>
Yes, but the conclusion is that someone needs to sit down and
implement the 3D stuff, but we seem quite busy, certainly I am.
I am also very interested in extracting the latex rendering engine
into a separate (pure python) package, but also don't have time for
this anytime soon.
Ondrej
From: Jeff W. <js...@fa...> - 2008年02月05日 15:04:09
Stephane Raynaud wrote:
> Hi,
>
> how about adding the possibility to give a Basemap instance to the
> resolution parameter when creating a new Basemap object, and to
> directly set some of its attributes (like coastsegs, cntrysegs, etc)
> thus preventing from computing them?
> It may be interesting when plotting several equavalent maps with fine
> resolution.
>
> It's easy to do it manually once you now all needed attributes, but it
> would be better to have it natively integrated.
>
>
> 
Stephane: The boundary datasets associated with one Basemap instance 
cannot be used with another (at least not in general). The coordinates 
of the boundaries are transformed to map projection coordinates, and 
clipped to the map projection region. So, if you have been doing this 
successfully, you've been lucky. 
However, you can and should reuse Basemap instances, to make multiple 
plots on the same map projection region. You can even pickle them, to 
reuse in other scripts.
-Jeff
-- 
Jeffrey S. Whitaker Phone : (303)497-6313
NOAA/OAR/CDC R/PSD1 FAX : (303)497-6449
325 Broadway Boulder, CO, USA 80305-3328
From: Stephane R. <ste...@gm...> - 2008年02月05日 13:29:23
Hi,
how about adding the possibility to give a Basemap instance to the
resolution parameter when creating a new Basemap object, and to
directly set some of its attributes (like coastsegs, cntrysegs, etc)
thus preventing from computing them?
It may be interesting when plotting several equavalent maps with fine
resolution.
It's easy to do it manually once you now all needed attributes, but it
would be better to have it natively integrated.
-- 
Stephane Raynaud

Showing 14 results of 14

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /