You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
(38) |
May
(22) |
Jun
(92) |
Jul
(101) |
Aug
(18) |
Sep
(286) |
Oct
(180) |
Nov
(73) |
Dec
(14) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(18) |
Feb
(74) |
Mar
(56) |
Apr
(11) |
May
(5) |
Jun
(4) |
Jul
(20) |
Aug
(4) |
Sep
|
Oct
|
Nov
(1) |
Dec
(2) |
2006 |
Jan
(11) |
Feb
(2) |
Mar
(10) |
Apr
(2) |
May
(1) |
Jun
|
Jul
(24) |
Aug
(11) |
Sep
(5) |
Oct
(16) |
Nov
(25) |
Dec
(8) |
2007 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
(3) |
Jul
(1) |
Aug
|
Sep
|
Oct
(4) |
Nov
(12) |
Dec
|
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
|
Sep
|
Oct
|
Nov
(2) |
Dec
|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(5) |
From: Duilio J. P. <dp...@fc...> - 2005-04-22 16:41:07
|
Is true. Fixed on the CVS now. Bye, Duilio. > one more thing - it seems not possible to disable gdkpixbuf in the config. > > Salsaman. |
From: <sal...@xs...> - 2005-04-22 13:40:36
|
one more thing - it seems not possible to disable gdkpixbuf in the config. Salsaman. |
From: <sal...@xs...> - 2005-04-22 13:36:16
|
The following: ./configure --x-includes=/usr/X11R6/include/ fixes the gentoo build problem. Salsaman. |
From: <sal...@xs...> - 2005-04-22 13:34:10
|
Hi guys, trying to compile libvisual-plugins-0.2.0 under gentoo, I get the following error message: checking for X... libraries /usr/X11R6/lib, headers in standard search path checking X11/keysym.h usability... no checking X11/keysym.h presence... no checking for X11/keysym.h... no configure: error: Required X11 headers not found. under gentoo, keysym.h seems to be installed by default in /usr/X11R6/include/X11/ Salsaman. |
From: <sal...@xs...> - 2005-04-22 13:15:07
|
Hey guys, I just noticed you don't mention LiVES in your "assimilation" section on your website ! I hope you will rectify this soon :-) Salsaman. |
From: Dennis S. <sy...@yo...> - 2005-04-09 15:51:58
|
Heya, I was wondering if there is someone with a PowerPC on this list! We could use some help with libvisual and endianess issues + libvisual on mac os X :) Cheers, Dennis |
From: Max H. <max...@me...> - 2005-04-09 12:01:01
|
On Friday 01 April 2005 12:52, Dennis Smit wrote: > Fantastic news, ProjectM 0.96 has been released, this also contains > support for libvisual. > > Read: http://xmms-projectm.sourceforge.net/ > > And for some extra news: http://libvisual.sf.net/ Yo Dennis! This is awesome news :) However, the Makefile.am for the lv-projectm directory is not ready for packagers. You need to add $(DESTDIR) in front of all the /etc/ references, ie: install-data-hook: chown root $(DESTDIR)/etc/projectM -R chmod 755 $(DESTDIR)/etc/projectM -R cp -r ../../presets_projectM/* $(DESTDIR)/etc/projectM/presets chown root $(DESTDIR)/etc/projectM/presets -R chmod 777 $(DESTDIR)/etc/projectM/presets -R I presume I should tell you rather than the projectM people. Also the README file refers to XMMS and not libvisual. This is all for the 0.96 tarball. Right, now I'm off to try it out :) -- Max Howell; Herefordshire, UK; www.methylblue.com -- Progress comes first, the future second. |
From: Duilio J. P. <dp...@fl...> - 2005-04-05 19:02:32
|
Ok, the previously broken i18n support on CVS now seems to be fixed, but please checkout. Now we don't run gettextize to generate the required files anymore, instead we get all of them from the repository. Bye, Duilio. |
From: Dennis S. <sy...@yo...> - 2005-04-01 11:52:18
|
Fantastic news, ProjectM 0.96 has been released, this also contains support for libvisual. Read: http://xmms-projectm.sourceforge.net/ And for some extra news: http://libvisual.sf.net/ Cheers, Dennis |
From: Dennis S. <sy...@yo...> - 2005-03-29 13:57:47
|
Heya, I registered #libvisual at irc.freenode.org and hang around as 'synap'. See ya there! Cheers, Dennis |
From: Mark K. <ma...@we...> - 2005-03-29 12:57:57
|
The amaroK team announces version 1.2.3 of the amaroK audio player We're getting you into the right mood for spring. Have a party, spin some music with the new amaroK release, and relax. Enjoy the good life.=20 ChangeLog relative to amaroK 1.2.2: FEATURES: * Graphequalizer script can now enable and disable the equalizer. * New DCOP call "player: equalizerEnabled" returns whether or not the equalizer is enabled. * OSD notification for mute. * Mute global shortcut, Win+M. * Add %comment token for comment display in OSD. (BR 100944) * View/Edit track entry into context menus of ContextBrowser and CollectionBrowser. * You can mark/unmark albums as compilations via CollectionBrowser's right-click contextmenu. * New DCOP call "collection: query(const QString& sql)". Allows to make arbitrary queries on the Collection database. * New DCOP call "playlist: removeCurrentTrack()". (BR 92973) CHANGES: * Show "Artist - Title" for compilation discs in CollectionBrowser and ContextBrowser. * Upgraded internal SQLite database to 3.2.0. * DCOP call saveCurrentPlaylist() now returns the path to current.xml. BUGFIXES: * Appropriate context menu entry for changing queue status for multiple playlist items. * Fix regression preventing dequeuing multiple selected tracks. * 'Show Toolbar' remembers its settings between sessions. (BR 98662) * When doing Musicbrainz lookup from the Context browser, search for the real track, not the whole album. * Memleak when a radio stream stalled. (BR 102047) * The Collection Scan finally checks for the right file modification ti= me. * Adding a compilation disc from ContextBrowser was broken. * GStreamer-engine: Reduced the gap when switching to next track without crossfading. * GStreamer-engine: amaroK was swallowing the beginning of a track when Fade-in was set to zero. (BR 94472) * Use a better highlight color in the "Configure Collection" dialog. (BR 102059) * "Remove Duplicates / Missing" fixed. Removes dead entries correctly. * Fix units for samplerate. (BR 101528) * amaroK using 100% CPU on some systems. (BR 101524) (a KHTML bug which got exposed by code in amaroK 1.2.2) The amaroK team =2D-------------- amaroK is a soundsystem-independent audio-player for *nix. Its interface us= es=20 a powerful "browser" metaphor that allows you to create playlists that make= =20 the most of your music collection. We have a fast development-cycle and=20 super-happy users. We also provide pensions and other employment-benefits. "Easily the best media-player for Linux at the moment. Install it now!" =A0 =A0 - Linux Format Magazine WWW: =A0http://amarok.kde.org WIKI: http://amarok.kde.org/wiki IRC: =A0irc.freenode.net #amarok MAIL: ama...@li... |
From: salsaman <sal...@xs...> - 2005-03-25 10:44:36
|
Hi all, I have just released LiVES-0.9.5-pre2 (source only). CHANGELOG --------- Run RFX post-loop code on a cancel/keep. Fixed "open new audio" and "append audio" (regression). Add avi_encoder which was accidentally omitted. Theora aspect ratio fix (thanks Marco). Add text_overlay and transition_checkerboard RFX effects. Add libvisual_020 wrapper for libvisual 0.2.0. Fixes most libvisual memory leaks, adds gforce randomisation, and adds a new visual (corona). Fix and improve encodedv_encoder plugin. Add more audio rates to the multi_encoder (Marco). Fix hang at end of opening preview. Allow direct opening of .mod and .xm audio files (with mplayer compile options). Put parameter windows in a scrolled window. Put i18n translations back in Preferences (regression). Add pdf_encoder. URLS: http://www.xs4all.nl/%7Esalsaman/lives/current/LiVES-0.9.5-pre2.tar.gz http://www.xs4all.nl/%7Esalsaman/lives/current/LiVES-0.9.5-pre2.tar.bz2 Enjoy ! Salsaman. Release notes: anyone who has from CVS: /usr/share/lives/plugins/effects/realtime/livido/libvis_020 should remove it before upgrading. This release will only support libvisual 0.2.0+ |
From: Dennis S. <sy...@yo...> - 2005-03-24 16:04:22
|
Heya, just wanted to point out to you guys that the libvisual core lib is currently build tree wise borked in CVS, will fix soonish together with Duilio. |
From: Dennis S. <sy...@yo...> - 2005-03-24 16:03:51
|
Heya, thanks for pointing out!, I changed the macro name so it was now defaulting the previous macro a function that returns an int and not a cast to actorplugin.... 'doh'! ;) Thanks. On Thu, 2005-03-24 at 00:46 +0100, pl...@ip... wrote: > Using CVS from a few minutes ago: > > make[4]: Entering directory > `/home/pix/Software/Libvisual/libvisual-plugins/plugins/actor/goom2' > if /bin/sh ../../../libtool --mode=compile --tag=CC gcc -DHAVE_CONFIG_H > -I. -I. -I../../.. -I../../.. -I/usr/X11R6/include -I/usr/local/include > -g -O2 -DUNIX_X -D_REENTRANT -MT actor_goom2.lo -MD -MP -MF > ".deps/actor_goom2.Tpo" -c -o actor_goom2.lo actor_goom2.c; \ > then mv -f ".deps/actor_goom2.Tpo" ".deps/actor_goom2.Plo"; else rm -f > ".deps/actor_goom2.Tpo"; exit 1; fi > gcc -DHAVE_CONFIG_H -I. -I. -I../../.. -I../../.. -I/usr/X11R6/include > -I/usr/local/include -g -O2 -DUNIX_X -D_REENTRANT -MT actor_goom2.lo -MD > -MP -MF .deps/actor_goom2.Tpo -c actor_goom2.c -fPIC -DPIC -o > ..libs/actor_goom2.o > actor_goom2.c: In function `lv_goom_render': > actor_goom2.c:169: error: invalid type argument of `->' > make[4]: *** [actor_goom2.lo] Fehler 1 > > The line 169 is: > > songinfo = &VISUAL_PLUGIN_ACTOR (visual_plugin_get_specific > (plugin))->songinfo; > > gcc-Version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3) > > Any ideas? > > > > > ------------------------------------------------------- > This SF.net email is sponsored by Microsoft Mobile & Embedded DevCon 2005 > Attend MEDC 2005 May 9-12 in Vegas. Learn more about the latest Windows > Embedded(r) & Windows Mobile(tm) platforms, applications & content. Register > by 3/29 & save $300 http://ads.osdn.com/?ad_idh83&alloc_id149&op=click > _______________________________________________ > Libvisual-devel mailing list > Lib...@li... > https://lists.sourceforge.net/lists/listinfo/libvisual-devel |
From: Dave A. <dja...@ya...> - 2005-03-24 01:30:56
|
Hello all (not sure now many people are in this list) I'm the eXtace author (I did NOT originally write it, but I've maintained it and rewritten it a few times since I took it over in 1998) I'm interested in libvisual and have a bunch of ideas on how to greatly improve it's power and flexibility and I'd like to see what everyone else thinks (dennis seems to like my ideas so far) First a list of some of the things I found that are non-optimal: 1. Plugins run in lockstep with audio source, so if audio is written in large blocks less often (esound, networked audio) the plugins run slowly and piss off the end user.. 2. No internal ringbuffers seems to be present in the current model limiting audio blocks sizes to the vis plugins in fixed FFT sizes (works for a lot of plugins but is pretty restrictive when you want to do some creative things) 3. No way to compensate for lagged audio I/O (like esound, or networked audio systems) Solutions: Use some of the code from eXtace (GPL) to provide a LOT more flexibility: eXtace's model has all input data (sound I/O) coming in and being fed into a ringbuffer (Statically sized, non optimal but see below for a more flexible/better idea) This runs as a thread and is decoupled from the rendering. When data arrives, it's copied into the ring (Wrapping if needed), and several shared variables (that the renderer reads) are updated (last write point into the ring and the TIME when it happened (gettimeofday() ) This runs basically from now until the end of time (it uses poll and goes to sleep in between arrivals of data) The renderer in eXtace is called by a GTK+ timeout at a periodic rate. Each time it runs it checks the status of the ring (last write position and the time difference from "now" to when the last write occurred to know how far behind the feeder it should go (this is CONFIGURABLE in the gui to allow compensation for latency in the sound system (esound has about 329 ms. of delay by default). the data is read, crunched on IF needed (not all displays NEED an FFT) and the display is rendered.. I think that in libvisual the ringbuffer concept should be implemented in a slightly different method which I though of yesterday. What I envisioned was a doubly linked list of "segments" (think of it as a list of buffers) each buffer would be sized to coincide with the sample rate and type of audio data coming in. i.e. the assuming the audio input rate was 44100hz 16 bit stereo, we could have a segment size of 100 milliseconds, which is 17640 bytes. Now since this is a doubly linked list the ringbuffer could be expanded/subtracted at almost any time (simple locks required), with some simple tricks to alter the "next/prev" pointers in the GList datastructure. Even though this is MORE complex than one large buffer (which is what extace uses) it doesn't allow ring resize during runtime, the calcs should be a little easier and ther's a couple other reasons I can't remember at the moment.. Currently in libvisual plugins are synchronous withthe audio input (At least it seems that way). This has several problems: if the audio comes in in large blocks, the plugin renders slowly and that's irritating as hell. I think the plugin in it's init function should request a FPS rate, (which can be honored directly or rounded up/down to a convenient number). If the core of libvisual tied into the RealTimeClock on just about every computer out there (intel at least) you can have a simple thread that runs and wakes up each time the RTC ticks and if it's close to a request time for a plugin to be fired, then it should be dispatched. This has several good and bad points. i.e. what do you do when there's no RTC? what if you're running an older kernel that limits the RTC interrupt rate to no more than 64 times/second? (all plugins could either run at 64 fps, 32 fps or 21.4 fps) How do libraries like GTK+ provide the gtk_timeout? perhaps something similar would work. Also I think a plugin should be able to request what data and HOW much it wants. Things like arbritrary FFT sizes, or time domain datablock sizes (for scopes). Some cool optimizations I can think of is if you have 5 plugins running at once and they all ask for a 4096 point FFT, if they all have the same latency amount (another benefit of the ringbuffer setup) then you ONLY need to calculate the FFT ONCE, and share it for all of then instead of 5 times.. Similar optimizations can happen as well depending on the number of plugins running.. For beat matching. I checked out a link from dennis and there's a mention of correlation. You should definitely LOOK at eXtace's code for convolution used for the scope syncronizer (I'm no math whiz, as someone submitted that code) the code is screaming fast, and it basically does a "pattern match" and is used to keep the scope in sync (similar to triggering on a regular scope, but it works with complex signals). It's described in eXtace's source code in input_processing.c on lines 404-440 or so.. Any comments? Am I out of my mind here? I think some of these things can REALLY make libvisual one seriously kickass setup. Dave J. Andruczyk __________________________________ Do you Yahoo!? Yahoo! Small Business - Try our new resources site! http://smallbusiness.yahoo.com/resources/ |
From: <pl...@ip...> - 2005-03-23 23:48:17
|
Using CVS from a few minutes ago: make[4]: Entering directory `/home/pix/Software/Libvisual/libvisual-plugins/plugins/actor/goom2' if /bin/sh ../../../libtool --mode=3Dcompile --tag=3DCC gcc -DHAVE_CONFIG= _H -I. -I. -I../../.. -I../../.. -I/usr/X11R6/include -I/usr/local/include= =20 -g -O2 -DUNIX_X -D_REENTRANT -MT actor_goom2.lo -MD -MP -MF ".deps/actor_goom2.Tpo" -c -o actor_goom2.lo actor_goom2.c; \ then mv -f ".deps/actor_goom2.Tpo" ".deps/actor_goom2.Plo"; else rm -f ".deps/actor_goom2.Tpo"; exit 1; fi gcc -DHAVE_CONFIG_H -I. -I. -I../../.. -I../../.. -I/usr/X11R6/include -I/usr/local/include -g -O2 -DUNIX_X -D_REENTRANT -MT actor_goom2.lo -MD -MP -MF .deps/actor_goom2.Tpo -c actor_goom2.c -fPIC -DPIC -o ..libs/actor_goom2.o actor_goom2.c: In function `lv_goom_render': actor_goom2.c:169: error: invalid type argument of `->' make[4]: *** [actor_goom2.lo] Fehler 1 The line 169 is: songinfo =3D &VISUAL_PLUGIN_ACTOR (visual_plugin_get_specific (plugin))->songinfo; gcc-Version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3) Any ideas? |
From: Duilio J. P. <dp...@fc...> - 2005-03-22 12:35:52
|
Here is a patch to make libvisual have i18n using GNU gettext only. Please do the following: - Make a fresh checkout - Apply the patch - Make 'export NOCONFIGURE=1' (on bash) - Run autogen.sh - At some point, autogen.sh will stop it, and it will print the message: >Please use AM_GNU_GETTEXT([external]) in order to cause >autoconfiguration >to look for an external libintl. >Please create po/Makevars from the template in po/Makevars.template. >You can then remove po/Makevars.template. >Please run 'aclocal -I m4' to regenerate the aclocal.m4 file. >You need aclocal from GNU automake 1.5 (or newer) to do this. >Then run 'autoconf' to regenerate the configure file. >Please run 'automake m4/Makefile' to create m4/Makefile.in >You might also want to copy the convenience header file gettext.h >from the /usr/share/gettext directory into your package. >It is a wrapper around <libintl.h> that implements the configure -- >disable-nls >option. >Press Return to acknowledge the previous five paragraphs. - Keep going with autogen.sh, and when it finish, copy the attached Makevars file to the created 'po' subdir. - Copy also es_ES.po, es_AR.po, libvisual.pot, LINGUAS and POTFILES.in files to 'po' subdir. - Then run 'aclocal -I m4' - Then run 'automake m4/Makefile' - Then copy the attached gettext.h to 'libvisual' subdir. - Then run 'aclocal'. - Then run 'autoconf'. - Then run 'configure'. Let me known your results. Bye, Duilio. |
From: Dennis S. <sy...@yo...> - 2005-03-21 20:31:53
|
On Sun, 2005-03-20 at 22:11 -0300, Duilio Javier Protti wrote: > Is true, glib is not needed here. AM_GLIB_GNU_GETTEXT and > glib-gettextize is just a workaround for AM_GNU_GETTEXT and gettextize, > but calling it with nice --flags. libglib2.0-dev: /usr/bin/glib-gettextize Here glib-gettextize is really part of glib2.0, also I CAN'T find it in gnu gettext. |
From: Dennis S. <sy...@yo...> - 2005-03-21 08:06:55
|
Ok, I am looking forward to your solution!, I think it's best to just reattach everything needed with your next patch. So there will be no confusion! Thanks a lot, Dennis On Sun, 2005-03-20 at 22:11 -0300, Duilio Javier Protti wrote: > Is true, glib is not needed here. AM_GLIB_GNU_GETTEXT and > glib-gettextize is just a workaround for AM_GNU_GETTEXT and gettextize, > but calling it with nice --flags. > > Just a little effort will be needed to make them work with gnu-only > tools. I'll check for this tomorrow. > > About i18n itself, I have forgotten to put the returned string in: > > return __lv_error_human_readable[abs (err)]; > > within a call to gettext, as it should be: > > return _(__lv_error_human_readable[abs (err)]); > > > Bye, > Duilio. |
From: Duilio J. P. <dp...@fc...> - 2005-03-21 00:55:46
|
Is true, glib is not needed here. AM_GLIB_GNU_GETTEXT and glib-gettextize is just a workaround for AM_GNU_GETTEXT and gettextize, but calling it with nice --flags. Just a little effort will be needed to make them work with gnu-only tools. I'll check for this tomorrow. About i18n itself, I have forgotten to put the returned string in: return __lv_error_human_readable[abs (err)]; within a call to gettext, as it should be: return _(__lv_error_human_readable[abs (err)]); Bye, Duilio. Dennis Smit wrote: > Heya Duilio, regarding glib, we don't need this for i18n support, I > assume ? Are you also using glib within libvisual-plugins ? > > We can't depend on glib, because the kde world is actively using us. > > It's silly anyway, since we aren't a gnome/gtk app. > > The rest looks good, but you have to investigate the glib stuff, (also > for libvisual-plugins). We really can't have that. > > Cheers, > Dennis |
From: Dennis S. <sy...@yo...> - 2005-03-20 21:24:01
|
Heya Duilio, regarding glib, we don't need this for i18n support, I assume ? Are you also using glib within libvisual-plugins ? We can't depend on glib, because the kde world is actively using us. It's silly anyway, since we aren't a gnome/gtk app. The rest looks good, but you have to investigate the glib stuff, (also for libvisual-plugins). We really can't have that. Cheers, Dennis On Sun, 2005-03-20 at 17:46 -0300, Duilio J. Protti wrote: > Ok, here is a patch for make libvisual speak your language. > > After patching your working directory, run glib-gettextize on top source > dir. This will create a 'po' subdir. Copy there the attached 'LINGUAS', > 'POTFILES.in', 'libvisual.pot', 'es_ES.po' and 'es_AR.po' files. Also > create an empty 'po/ChangeLog' file. > > Copy the attached 'gettext.h' file to 'libvisual' subdir. > > Then just make install. > > > Bye, > Duilio. > |
From: Duilio J. P. <dp...@fl...> - 2005-03-20 20:53:36
|
Ok, here is a patch for make libvisual speak your language. After patching your working directory, run glib-gettextize on top source dir. This will create a 'po' subdir. Copy there the attached 'LINGUAS', 'POTFILES.in', 'libvisual.pot', 'es_ES.po' and 'es_AR.po' files. Also create an empty 'po/ChangeLog' file. Copy the attached 'gettext.h' file to 'libvisual' subdir. Then just make install. Bye, Duilio. |
From: Duilio J. P. <dp...@fl...> - 2005-03-20 00:17:45
|
Currently, spanish is the only translation available. Feel free to add your own. Remember the steps: - go to 'po' directory, and make 'msginit -l COUNTRY', where COUNTRY is your two letters country code. - edit the just created COUNTRY.po file, and translate all the strings (is highly recommended that you use and UTF-8 codeset for the file). - add COUNTRY to 'po/LINGUAS' file. - add COUNTRY to 'LINGUAS' variable on 'configure.ac' file. That's all. Now the plugins speak you language. To make use of the i18n support within libvisual-plugins, just put the string you want to translate on a _() call, i.e : printf (_("Hello world!\n")); *except* for initialization strings, which must be put within a N_() call. Take into account that initialization strings must be literals, they cannot be the result of a function call, in order to make gettext work properly. Also make sure you have included 'config.h' and 'gettext.h' in the current file (with config.h *before* gettext.h). When the Wiki will be ready, I'll post a more complete procedure there. Bye, Duilio. |
From: Dennis S. <sy...@yo...> - 2005-03-19 20:42:29
|
Heya guys, So I just found something out, some version of gcc, place the const really in a .rodata segment, and when visual_objeft_unref is called it tries to write in a rodata segment entry. Prolly also has something to do with a certain CFLAG, anyone an idea? Cheers, Dennis |
From: Dennis S. <sy...@yo...> - 2005-03-19 17:48:28
|
On Sat, 2005-03-19 at 18:26 +0100, Jon =C3=98yvind Kjellman wrote: > On Tue, 15 Mar 2005 16:01:14 +0100, Dennis Smit <sy...@yo...> wro= te: >=20 > > I don't have experience with docbook :) >=20 > Ah ... ok, I'll see if I can't convert it if I get the time. Would be nice ! :) > > How is your project going ? >=20 > It's coming along. It will use Libvisual for visualisation and it can =20 > display both types of visualisations in the background. To get the Open= GL =20 > plug-ins to work I have to render it to a GLX pbuffer (pixel-buffer.) B= it =20 > of a struggle to get it working correctly, but it works allright now =20 > (except on older ATI cards, such as my laptop's :( Sounds nice, do you have a webpage up, or some shots to show ? |