IRC Log Viewer » #firebreath » 2011-03-29

IRC Nick Time (GMT-7) Message
FireBreathBot 00:03 Commit c9529ae on firebreath-1.4 by Richard Bateman: "FIREBREATH-19 Fixed inadvertant duplicate xml tag in WiX 3.0..." http://goo.gl/IEo9Q
Commit e54e9de on master by Richard Bateman: "FIREBREATH-19 Fixed inadvertant duplicate xml tag in WiX 3.0..." http://goo.gl/Fzad7
JIRA issue http://jira.firebreath.org/browse/FIREBREATH-19 issue resolved by richard "I believe this is fixed in 1.4 by commit c9529ae. Could you double check and let me know, please?"
FireBreathBot 01:03 Commit c608762 on master by Richard Bateman: "FIREBREATH-8 Fixed CoreGraphics to not error out on carbon, ..." http://goo.gl/0dMqD
JIRA issue http://jira.firebreath.org/browse/FIREBREATH-8 issue resolved by richard "I believe this is done with commit c608762. Eric created a nice drawing model test page (in Basic..."
FireBreathBot 01:03 Commit f799f81 on firebreath-1.4 by Richard Bateman: "Reverted file that mistakenly got brought from 1.5 branch" http://goo.gl/vV4u5
FireBreathBot 03:03 JIRA issue http://jira.firebreath.org/browse/FIREBREATH-3 issue commented by gmurphy "I just prefer that syntax. It appeals to my aesthetic sensibilities :D.
zEh- 06:03 getBrowser returns "NPAPI" in chrome
hihi
_neilg_ 08:03 Morning all!
nitrogenycs 08:03 morning neil
jshanab_wcw 08:03 I am having a problem installing my plugin on other machines, works great on my machine but it is a development machine. The installer runs to completion, but neither myself or the browser can find it. we have been looking for permission issues and such but no luck. No luck on XP,win7,etc. Hints anyone?
_neilg_ 08:03 Wie gehts?
What installer are you using?
nitrogenycs 08:03 lol, mir gehts gut und dir?
_neilg_ 08:03 Sehr gut danke!
jshanab_wcw 08:03 The wix installer built in my FB project
so it is an msi
_neilg_ 08:03 Have you checked to see whether your plugin appears in that machine's registry?
I can only be so much help here... I haven't used WiX yet. But I want to!
neilg_ 08:03 Must have been a netsplit or something during the night?
zEh- 08:03 how to force a draw/refresh? :\
neilg_ 08:03 zEh-: On what platform?
zEh- 08:03 win
neilg_ 08:03 Windowed or windowless?
zEh- 08:03 less
oh
windowed
:\
neilg_ 08:03 In which case you don't need to, you can just draw using the HWND
zEh- 08:03 i have my drawing stuff in core::draw
neilg_ 08:03 But in any case, to force one you can call InvalidateWindow() on the PluginWindowWin
zEh- 08:03 there's no manually calling of the ::draw poss?
or setting a flag
neilg_ 08:03 I don't know what core::draw is
That doesn't sound like something from inside FB
zEh- 08:03 FB::PluginCore::draw
neilg_ 08:03 What version of FireBreath are you on?
jshanab_wcw 08:03 Maybe...I have a 64bit msi? How do i specify a 32bit msi?
neilg_ 08:03 Well that's possible, you may well have! Um...
zEh- 08:03 actually i donno how to check that, the zip dl never said anything and in VERSION file is no number
neilg_ 08:03 Maybe this helps? http://blogs.msdn.com/b/astebner/archive/2007/08/09/4317654.aspx
Well... I don't see a function draw() as a member of PluginCore and I'm on 1.5
zEh- 08:03 is it out?
neilg_ 08:03 I last merged last week so unless it's new...? I don't know, I think you're doing something wrong. That's my suspicion. ;)
zEh- 08:03 :|
someone just tell me
how to get the version nr out of the files
neilg_ 08:03 I don't know how you would do that. I'm sure there's a way (if you downloaded a .zip) but I'm not sure what it is
But in any case, the way to get the window to redraw is to call InvalidateWindow() on the PluginWindowWin
gomoov 08:03 Hello, just one question.
So, the plug-in is invoked by either having type directive in html (e.g. <object ... type=x-pluginname>) OR HTTP content-type response.
Then, does the browser just get the HTTP response (and not the data) and invoke plugin? (Because plugins are responsible for downloading the data stream).
Any comments on this?
neilg_ 09:03 gomoov: There would be no data initially if the plugin was invoked via a HTTP content-type request. So yes.
zEh- 09:03 ie9 fails
neilg_ 09:03 IE9 fails doing what?
zEh- 09:03 content-type
neilg_ 09:03 I haven't tried IE9 doing that but I've had it working in IE7 and IE8
Wouldn't surprise me if it had broken with IE9 though...
taxilian 10:03 zEh-: there is no draw() on PluginCore
FBTestPlugin has a draw() method but it configures it in that plugin
it's not a firebreath standard method
zEh- 10:03 ah ye, meant that then
is there a draw event ?
taxilian 10:03 gomoov: we don't support plugins that have a specific data stream
zEh-: yes
!find RefreshEvent
FireBreathBot 10:03 Found 1 possible matches. Displaying 1
/^ class RefreshEvent : public PluginEvent$/ (c) found in src/PluginCore/PluginEvents/DrawingEvents.h: http://goo.gl/RItIL
taxilian 10:03 that's the draw event
zEh- 10:03 example`?
taxilian 10:03 look at FBTestPlugin.h
!findfile FBTestPlugin.h
FireBreathBot 10:03 Found 1 matching file(s) in the master branch. First 1 are:
examples/FBTestPlugin/FBTestPlugin.h http://goo.gl/D5vcV
taxilian 10:03 in the .h
how it sets up the event handler for RefreshEvent
jshanab_wcw: most likely you're missing a DLL on the target machine
jshanab_wcw: if you're using dynamic crt instead of static that would do it
zEh- 10:03 ah i get the event mapping now
jshanab_wcw 10:03 OK, thanks! How do i set that from the CMAKE
zEh- 10:03 well browsers seem to not fire that event often enough then
taxilian 10:03 jshanab_wcw: if you didn't set it to not be static, it is static by default
but use dependency walker and see if there are any extra missing ones on the target machine from your dev machine
jshanab_wcw 10:03 humm, well it will show up in the solution properties, let me check
...somewhere
taxilian 10:03 1.5 is very close to RC now; I fixed the CoreGraphics problems that stuartmorgan told me about last night, I think, and amackera fixed the detection a week or two ago, so the new mac pluginwindows should be pretty solid and useable
did I miss any questions that people brought up?
content-type works fine in IE9
zEh- 10:03 doesnt for me, i get a download dialog
taxilian 10:03 something else is wrong with your tag, then
or your plugin
try FBTestPlugin
build it and see if it works
that's one of the reasons it is there; you can always try that; if FBTestPlugin works and yours doesn't, the problem is in your plugin =]
zEh- 10:03 same problem
taxilian 10:03 interesting; check your security settings
IE9 has some interesting new security "features" with activex
however, I can tell you that I've run plugins on IE9 on about a dozen different computers using the mimetype and it works just fine
zEh- 10:03 well i just use object :\
taxilian 10:03 so the problem is something else
taxilian 10:03 dan2: any suggestions for making a timer/dispatcher? any boost classes that do most of the work for us, etc? should probably run on one thread but support multiple timers, if one of the handlers blocks then it just does "best try"
just hoping you might know of something =]
dan2 10:03 yes actually
boost::asio has an incredible set of timers that are very very high quality
I've already told the author that it annoyed me that it couldn't auto-reset
but that's easy to work around
(was particularly interested in using it like timerfd)
ironically because it uses timerfd natively on linux
and on windows it uses some timer mechanism through iocp
and all I can say is, it is the best f'n timer I've ever used on windows
hands down
nothing touches it
taxilian 10:03 I don't suppose you know of any examples that use it for multiple timers, do you? (i.e. one timer at 30x/sec, one at 20x/sec, etc)
dan2 10:03 umm
it's incredibly simple to create multiple timers
create multiple timer objects
done
taxilian 10:03 I really want it to all be on one thread
dan2 10:03 it will be one thread
taxilian 10:03 this isn't intended to be a high precision timer abstraction
really?
huh
dan2 10:03 its' as many threads as you allocate to it
taxilian 10:03 which timer?
that's cool
dan2 10:03 there's only one
deadline_timer
taxilian 10:03 I must have misunderstood the docs, then
granted, I haven't had much time to look at it
dan2 10:03 well it's the only timer on windows I've found that can get me +/- 3 microseconds of accuracy
taxilian 10:03 not bad
dan2 10:03 I could give you a run down on all the timer mechanisms on windows, and you'll see that some are so bad that they can't guarantee 15 milliseconds of accuracy
taxilian 10:03 heh. yeah, I'm aware of that
this is for issue FIREBREATH-1
FireBreathBot 10:03 FIREBREATH-1: Summary: Cross-platform timer abstraction.
dan2 10:03 XP and prior are really really really bad
FireBreathBot 10:03 FIREBREATH-1: Assigned To: [email protected]
FIREBREATH-1: Priority: Minor, Status: Open, http://jira.firebreath.org/browse/FIREBREATH-1
dan2 10:03 ok, so I'm curious now
what more do you need from asio?
taxilian 10:03 we have a "main thread" timer for Windows, and we know how to do one on Mac; we want a secondary-thread (or multithreaded) timer abstraction and we need something "main thread" for linux
dan2 10:03 or rather
boost::asio likes to operate as an event loop if you let it
that may simplify things quite a bit for you
taxilian 10:03 that should be perfect
dan2 10:03 there's this thing called strand
boost::asio::io_service::strand
it is very very very nice
it is the first abstraction I've seen that allow you to do thread safe event handling across N threads
each strand is for all intents and purposes like an executable queue
taxilian 10:03 hmm. interesting.
might be overkill for this particular issue… but for some of the other stuff you and I were talking about it suggests some interesting possibilities
dan2 10:03 from my experience, you'll want to use strand in all of your designs even if you're only using oen thread
if you want to move to N threads later
taxilian 10:03 right now I just want a really basic timer; two versions, one that runs on the main thread and one on a secondary thread
dan2 10:03 you're set
what's the point having a timer in two different threads?
timing mechanisms are inherently better the less threads they operate in
taxilian 10:03 not so much two different threads
two types of timers
the secondary thread timer just runs on a different thread from the main UI
there are some things that just have to run on the main thread
if that's all you're doing, then it's better to run the timer on the main thread even though it won't be as accurate
dan2 10:03 ok
I question the accuracy thing
taxilian 10:03 but for a render loop or something that isn't connected to the main ui thread (render loops in windows at least should be another thread) you want more accuracy and you need to be on another thread
dan2 10:03 it's only inaccurate if you miss a timer interrupt because you're working on something
but that's not timer related
taxilian 10:03 in the browser on the main thread you'll be less accurate because you have no idea what else the browser may be doing
dan2 10:03 now I'm kinda confused
taxilian 10:03 in a plugin, you don't control the event loop
dan2 10:03 ya, that's what I thought
taxilian 10:03 therefore you don't know for sure when the WM_TIMER will fire
so it's still useful… and it'll generally be pretty close
but definitely not microsecond accuracy =]
dan2 10:03 ok, so why bother putting timers in the main thread at all?
taxilian 10:03 because if you want to call something in javascript, for example, you have to do so from the main thread
dan2 10:03 but that's what you have asyncronous calls for
taxilian 10:03 right; but the asynchronous call (or any other cross thread call) has a performance cost
dan2 10:03 oh god
taxilian 10:03 however, that's probably how I'll emulate this on linux
dan2 10:03 there isn't enough stuff in firebreath that has a performance cost to worry about let alone timers
the only time timers get performance issues is submillisecond
taxilian 10:03 take for example if I need to create a JS object and populate it; there is a very noticable difference between making 30 cross-thread calls and making those 30 calls on the main thread
*very* noticable, if you're doing it often
dan2 10:03 that sounds like that's a design flaw if you can't pass and execute the whole sequence in one shot with the async call
taxilian 10:03 you could; it just requires you to wrap it in another function
dan2 10:03 and this is a big deal because?
taxilian 10:03 however, the mechanism for making the async call (at least on windows and probably mac) is basically the same; why add the extra step when we could just make it happen on the main thread?
dan2 10:03 ok, let me get something clarified first
you need to make an NP AsyncCall or whatever to make it run on the main thread is that correct?
taxilian 10:03 "or whatever"
slightly different on each browser/platform
but yes
dan2 10:03 ok, now also clarify for me one other thing
why on earth would you store state in the timer thread?
if you plan on using it this way?
taxilian 10:03 store state?
dan2 10:03 why else would you have 30 calls back and forth between threads?
for one timer event
taxilian 10:03 1 call gets a javascript object; 1 call for each of the 29 values you need to set to the JSObject
then you make a call to pass it as a parameter into a javascript method
dan2 10:03 and this is all triggered from one timer interrupt?
taxilian 10:03 potentially
dan2 10:03 so dispatch it to the main thread and be done with it
taxilian 10:03 what do you think an event does if you fire it with a VariantMap or VariantList?
that's what we're doing
dan2 10:03 I have no idea
taxilian 10:03 we're just doing it automatically in the timer
exactly what I just told you
dan2 10:03 umm
and how is that different than having a function wrapper that makes those 30 JS calls?
that is performed from an Async op
taxilian 10:03 it's less hassle
htat's alll
dan2 10:03 ...
show me what you're referring to
taxilian 10:03 a really easy way to have a "main thread timer" would be to have a timer running on another thread and then just call the handler with ScheduleOnMainThread instead of calling it on the second thread
it's just a convenience!
it's not that big of a deal
dan2 10:03 ok
so why do you think you can not call ScheduleOnMainThread since it clearly already wraps all of the timer work?
taxilian 10:03 I could, if I had a good timer system that runs on a second thread
that's why I ask you about it in the first place =]
dan2 10:03 ok
now that we've made complete turn circle
asio can run on as many threads as you like
what you're describing is the default way it operates
everything in asio is async
so it turns into a callback of however you see fit
taxilian 10:03 hmm… hence the "as" in "asio"
dan2 11:03 I design elaborate event loops using asio with multiple threads
with timing and everything
and it is very cross platform
and very high performance
taxilian 11:03 cool; do you happen to have an example somewhere? or a doc page I should look at?
dan2 11:03 I can probably do it from the top of my head
taxilian 11:03 could you add it to FIREBREATH-1?
FireBreathBot 11:03 FIREBREATH-1: Summary: Cross-platform timer abstraction.
FIREBREATH-1: Assigned To: [email protected]
FIREBREATH-1: Priority: Minor, Status: Open, http://jira.firebreath.org/browse/FIREBREATH-1
taxilian 11:03 Mital is working on the issue, so hopefully I won't have to do it myself
dan2 11:03 boost::asio::io_service ioService; // probably as some class member
boost::asio::io_service::strand strand;
boost::asio::io_service::work w(ioService);
boost::asio::deadline_timer timer(ioService);
timer.set_expires_at(some posix time in the future)
timer.async_wait(boost::bind...)
rather
timer.async_wait(strand.wrap(boost::bind...))
then launch a new thread with io_service.run()
presto
done
taxilian 11:03 cool. I'll put it in jira =]
dan2 11:03 strand allows you to serialize N async operations together, or even non-async operations
taxilian 11:03 so how does this differ if you have two timer objects?
dan2 11:03 you add another timer
done
taxilian 11:03 even though you call async_wait on the first timer?
or I guess you call it on both
since it's async
dan2 11:03 yes you call it on both
correct
taxilian 11:03 then you add more timers to ioService even after io_service.run() is called?
dan2 11:03 in the timers, you'll need to store some sort of state somewhere, likely at least the ptime object so you can increment it to set the new expires time
sure
it's 100% thread safe
taxilian 11:03 cool; I will definitely have to look at this more
in the mean time I'll summarize this in the issue on jira
thanks
dan2 11:03 I even designed the mechanism that lets it handle interrupts... (albeit independently for my own design)
taxilian 11:03 I've been meaning to ask you about this for a few days, just keep forgetting =]
dan2 11:03 it would be nice if you exposed the io_service object and/or made it a shared_ptr
so the plugin itself could latch on
the plugin can add as many threads as it likes
thus the reason I highly suggest using strand to wrap the async ops
taxilian 11:03 I'll keep that in mind; let's get something up initially and then we can look at it again to see what should be expanded
dan2 11:03 asio makes it very easy to do things like thread safe calls from javascript to anything inside the plugin
taxilian 11:03 I can see that
dan2 11:03 there are 2 gotchas with asio, one you may run into, and one you probably won't
first is that just because the timer object is destructed, does not mean that you will not receive another call to the method that was bound
because of this, you often find yourself requiring shared pointers to work with
or making the methods it calls back static
taxilian 11:03 is there a way around that to make sure it doesn't call it again? say if we stop the io_service?
dan2 11:03 stopping io_service absolutely solves that problem
taxilian 11:03 ok
that should be good enough
dan2 11:03 however, it may call every single object that is in existence first with error code aborted
before coming to a complete stop
taxilian 11:03 as long as we know for sure that the timer is gone when the plugin class needs to shut down
dan2 11:03 basically, the place you run into issues with this is if your timer object has a scope that is different from the io_service
if you allocate N timer objects and they're stored along side the io_service
you'll never hit this issue
FireBreathBot 11:03 JIRA issue http://jira.firebreath.org/browse/FIREBREATH-1 issue commented by richard "dan2 from IRC suggests using boost::asio::io_service, strand, and deadline_timer for a timer disp..."
dan2 11:03 the reason gotcha #1 exists is because everything in asio is asynchronous
therefore
if you destroy a timer
taxilian 11:03 right; it makes sense
dan2 11:03 there may have already been an event posted to process a timing event
and
the destruction of timer itself
will create an operation aborted event
destruction or cancel()
so you need to make sure that the scope of your object exists for that last operation if it occurs
stop() probably does not make those occur if you didn't destroy them yet
gotcha #2 is related to rvalue references
dispatch() does not work the same way on windows as it does on all the other platforms
on windows it operates like a jump to the front of the queue post
on other platforms, and the documentation isn't particularly clear about this, but it operates in the current thread using a mutex
taxilian 11:03 gotta switch classes now; I'll be back in a bit; I'll get the logs when I get back, so no worries that I'll miss something
bbl
dan2 11:03 k
taxilian 11:03 thanks a bunch, that helps a lot
dan2 11:03 so short answer is that you really shouldn't pass references to asio's handlers
taxilian 11:03 timer abstraction is the oldest feature request in the system; will be nice to have it done
dan2 11:03 if you want it to work the same way on each platform
taxilian 11:03 heh. fair enough
bbl
dan2 11:03 later
FireBreathBot 11:03 JIRA issue http://jira.firebreath.org/browse/FIREBREATH-19 issue commented by zaltar "It works now. Thanks."
JIRA issue http://jira.firebreath.org/browse/FIREBREATH-19 issue closed by richard "Great."
sabotaged|wk 11:03 yeah it would be nice to get a timer abstraction
i'm actually thinking the way i do timers right now in my code isnt quite thread safe, because the shared pointer i pass to ScheduleOnMainThread gets used on my main thread
so there's simultaneous read/write operations on different threads which according to shared_ptr isnt thread safe
ugh
taxilian 11:03 it might be
it depends on what you're doing
if you aren't accessing the same members, then it is
you just have to make sure you aren't reading something on one thread and writing it on another thread
sabotaged|wk 11:03 well i only use the shared ptr to pass to ScheduleOnMainThread, so i'm not concerned about simultaneous access to my object, but instead the shared_ptr
(on the worker thread)
taxilian 11:03 the shared_ptr itself is threadsafe
unless you've changed the boost options
sabotaged|wk 11:03 it's not entirely thread safe according to boost docs
taxilian 12:03 okay; the same specific shared_ptr is not threadsafe
but you aren't accessing that particular shared_ptr instance from multiple threads
sabotaged|wk 12:03 "even when these instances are copies"
i dont think so
taxilian 12:03 "Different shared_ptr instances can be "written to" (accessed using mutable operations such as operator= or reset) simultaneosly by multiple threads (even when these instances are copies, and share the same reference count underneath.)"
"can be"
the point being that the underlying reference count is atomic
sabotaged|wk 12:03 yeah sure, written to at once, but not written and read to at once
taxilian 12:03 right; the object pointed to by the shared_ptr is not threadsafe unless you've made it threadsafe
linearray 12:03 i'm such an awful cmake noob... i want to put source files into subdir1, what do I put in subdir1/CMakeLists.txt?
sabotaged|wk 12:03 no, not just the object, the shared ptr itself; look at example 3
taxilian 12:03 linearray: unless you need subdir1 to be a different project, you don't need a cmakelists.txt
sabotaged|wk: okay, I have no idea what example 3 is talking about; I know the reference count is atomic, I guess the point would be if it's destroying the object on one thread and trying to read it on antoher
but if you're using it properly that shouldn't ever be a problem
linearray 12:03 I used include_directories and add_subdirectory in the project's CMakeLists.txt. cmake then tells me that I need to have a CMakeLists.txt in the subdir
taxilian 12:03 you can get around that possibility simply by always passing the shared_ptr to another thread instead of accessing it directly from multiple threads
linearray: does it need to be a different project?
linearray 12:03 no
taxilian 12:03 then you don't use add_subdirectory
you just include the files from that subdirectory in your target
sabotaged|wk 12:03 it is a problem; we've seen it in our production code because we made the same assumption
linearray 12:03 i see
taxilian 12:03 sabotaged|wk: how are you getting your shared_ptr to the other thread? and which objects?
sabotaged|wk 12:03 shared_from_this, though this case differs than the one where i've actually seen shared_ptr reference count corruption
taxilian 12:03 rather than use shared_from_this from the second thread, pass a shared_ptr (from shared_from_this) into the thread when you create the thread
or better yet pass a weak_ptr in
as long as the reference count doesn't hit zero while you're accessing it from multiple threads you shouldn't have a problem
wait… example 3 isn't talking about reference counts
it's talking about changing p3 to something else while you're reading it on thread A
so just like any other type, if you're changing the value of p3 while you're reading it on another thread it's a race condition
so shared_from_this should be perfectly fine
sabotaged|wk 12:03 think i need to use a weak_ptr in the worker thread, because i saw a few times shared_from_this threw an exception in the worker thread beacuse there were no instances of it anymore, even though i join on the thread in the destructor
taxilian 12:03 oh
yeah
if you use shared_from_this, you can't do it during the destructor
shared_from_this is only valid after the constructor, before the destructor
sabotaged|wk 12:03 no i dont access it in the destructor, just every iteration in the while loop in my worker thread
taxilian 12:03 if you access it in your worker thread, and that thread does not stop until the destructor, then you are trying to access it during the duration of the destructor on the other thread
and you can't do that
so you either have to use a weak_ptr, or you have to stop the thread before the destructor
sabotaged|wk 12:03 yeah ok
linearray 12:03 taxilian: uhm, how do I include files from the subdir in my target? :)
ah, finally got it, thanks
taxilian 12:03 linearray: good =]
scJohn1 12:03 taxilian: you have a second to help me with this whole "Delay Loading DLL" thing?
I have the installer working as long as the DLL I need is in my path.
can it be part of the package? I assume this is the pseudo code on the Using Libraries page
scJohn1 13:03 ah, finally found where it installs to. so the dll is already included.
gomoov 13:03 Taxilian, somehow, stream event handling is not working. (It worked before)
FB::PluginEventSinkPtr streamHandler3 = boost::make_shared<MyStreamHandler2>( m_host );
FB::BrowserStreamPtr testStream3 = m_host->createStream( "http://upload.wikimedia.org/wikipedia/commons/thumb/6/63/Wikipedia-logo.png/100px-Wikipedia-logo.png", streamHandler3, false, true );
I am doing like this.
Stan__ 13:03 Quick question: When I run my plugin from my dev machine I get: "Error calling method on NPObject". It doesn't when I use it from a page on the local filesystem. Does this mean I misconfigured something in Firebreath, or should I look elsewhere for the source of this problem?
taxilian 13:03 Stan__: you have an exception firing from a JSAPI object
gomoov: are you holding the shared_ptr or letting it go out of scope?
neilg_ 13:03 So, I believe I have all the input working correctly on the mac for the cocoa event model
I now have a plugin on the mac which downloads, installs and runs 3D games natively - all hardware accelerated
It's very exciting :)
taxilian 13:03 Stan__: There is a long-standing bug in Chrome and Safari and a new identical bug in Firefox 4 that causes any exceptions fired to javascript to lose the exception message and replace it with that
neilg_: awesome =]
neilg_ 13:03 I'll be commiting that patch soon
I also need to create an example plugin to show people how to use OpenGL on the different platforms
Well... on Windows and Mac. Somebody else can do Linux. ;)
taxilian 13:03 neilg_: have you looked at hte new example in BasicMediaPlayer?
neilg_ 13:03 Nope - maybe they already exist?
taxilian 13:03 go look at it
might provide some useful info
I gotta run; be back later
okay, back for a bit
gomoov 14:03 Taxilian, what happens if it go out of scope?
taxilian 14:03 neilg_: when is the last time you updated from 1.5?
neilg_ 14:03 Last week I believe?
I'm not sure how to tell by using git :)
taxilian 14:03 git log; what is the last commit hash?
neilg_ 14:03 March 21st
taxilian 14:03 ok; updating shouldn't be a big deal, then
you've already got the biggest change
neilg_ 14:03 Oh, Eric's changes to CoreGraphics and CoreAnimation?
Yes, I have those for sure
:)
taxilian 14:03 yeah
I did some more to CoreGraphics
there is now a CoreGraphicsDraw event
that gives you the bounds, clip, and context
works the same on both cocoa and carbon
neilg_ 14:03 Oh, that sounds useful! I can definitely see that being very useful
I actually quite like CoreAnimation now I understand how to use it - though it does have some gotchas
taxilian 14:03 I also fixed the bug where it threw an error on cocoa
my biggest beef with CA is that it's slow on both Firefox and Chrome… even with ICA :-(
need to play with CG and see if it's any better
might just be that it's as good as we can get in the browser
neilg_ 14:03 Well, I haven't noticed that yet but I've been running in Debug - fixing that as we speak
But even in Debug the speed has been acceptable doing OpenGL. Though I also have a beast of a machine so...
taxilian 14:03 on my brand new 2.3Ghz sandy bridge i7 it's a pretty noticable difference between safari and the others using CG
with the BasicMediaPlayer example
currently the BMP example only animates CA and ICA, though
neilg_ 14:03 Hmm. I'll have to take a look-see
taxilian 14:03 not CG
need to figure out how to animate CG to see if that's any better
neilg_: if your event fixes are close, I'll make sure to wait for those before I release 1.5RC
we're pretty close, though
neilg_ 14:03 You'll have them before the end of the week for sure
taxilian 14:03 cool
neilg_ 14:03 I just want to get a bit more testing done to make sure I haven't broken anything... but I doubt it!
taxilian 14:03 since nobody is really using any of that, it seems unlikely =]
neilg_ 14:03 Ah, but now they can! lol
Though yes, that's true...
taxilian 14:03 exactly
it will be nice
gomoov 14:03 Taxilian,
What happens if I do not keep the shared ptrs?
What if it goes out of scope?
taxilian 14:03 it gets destroyed
and thus you don't get any more events
SimpleStreamHelper uses a trick where it keeps a reference to itself internally and releases it on the completed event
be really careful with that, though; easy to cause a memory leak
okay, I gotta run; I have an appt to get to. I'll be back online later
neilg_ 14:03 Have fun!
gomoov 14:03 okay!
gomoov 15:03 Yes, taxilian, it was because of the scope problem, thank you!
someone-noone 15:03 !wiki coregraphics
FireBreathBot 15:03 5 results found. Note: Results limited to 8
"Mac Plugins": http://goo.gl/oDfo2
"Tips and Tricks": http://goo.gl/sOA8M
"Features": http://goo.gl/xXK1q
"Potential Installer Improvements": http://goo.gl/LAqSl
"Version History": http://goo.gl/lgWpo
someone-noone 15:03 Does CoreGraphics work on x86_64 Firefox 4 now?
FireBreathBot 17:03 JIRA issue http://jira.firebreath.org/browse/FIREBREATH-20 issue created by richard
Commit d3df5b0 on master by Eric Herrmann: "FIREBREATH-20 Fixed OneShotManager, fix race condition" http://goo.gl/L2nug
jshanab_wcw 17:03 I was trying to get the upgrade part of the msi installer to work. I saw the comments in the PluginConfig.cmake and the changes to the wix file on the wiki, but it did not work. :-(
taxilian 17:03 jshanab_wcw: what does it do?
jshanab_wcw 17:03 Throws up the error box that the product is already installed. This is at the msi installer level, I have not checked in a browser
taxilian 17:03 pastebin me your wxs file
jshanab_wcw 17:03 Oh...S**t set pluginversion is in my file twice :-(
http://pastebin.com/UDDYLU0Q well changing the version did not get it going. I was a little unsure about the wix syntax, there is a UpgradeCode guid in the product line and an ID in the upgrade section, I assume the guids match
taxilian 18:03 change your Product ID to *
that hsould fix your issue
if I were you I'd do the same to the GUID for INSTALLDIR and CompanyDir
but that's up to you
jshanab_wcw: Product Id is the one that will matter
jshanab_wcw 18:03 What does the * do?
taxilian 18:03 tells it to create one
Product ID should be different each time
jshanab_wcw 18:03 Awsome, i was wondering exactly how to do that. that and an auto-incrementing build numer as the third version octet.
Does this work in the pluginConfig.make, for the classid,plugin release too?
taxilian 18:03 no
PluginConfig.cmake is something seperate
but you shouldn't need to change the GUIDS there
only the version number
jshanab_wcw 18:03 oh, the comments said that they had to change for browser detection for update
taxilian 18:03 yeah, that's wrong
which comments say that?
jshanab_wcw 18:03 They were put in there on an initial fbgen probably, very long time ago
taxilian 18:03 *sigh*. I'll fix it
jshanab_wcw 18:03 is that "{*}" or just *
the wix site says "???????-???" etc
taxilian 18:03 just *
look at the fbgen example
!find TemplateInstaller.wxs
FireBreathBot 18:03 Could not find any tags matching TemplateInstaller.wxs
jshanab_wcw 18:03 thanks. I guess this site is old http://wix.sourceforge.net/manual-wix2/wix_xsd_simple_type_autogenuuid.htm
taxilian 18:03 !findfile TemplateInstaller.wxs
FireBreathBot 18:03 Found 1 matching file(s) in the master branch. First 1 are:
fbgen/src/Win/WiX/TemplateInstaller.wxs http://goo.gl/kbw8p
taxilian 18:03 jshanab_wcw: doesn't look like the fbgen PluginConfig.cmake currently says anything about needing to change the guids
nor do I remember it being there
perhaps someone gave you bad info
it's an urban legend that I keep trying to squash, but so far unsuccessfully
jshanab_wcw 18:03 OK, don't know wher I got it from then :-)
The install and company directory have the guds in a component. is that the ones I change?
taxilian 18:03 yeah
make them *
unless you need to know them for some reason
FireBreathBot 18:03 Commit 9867e73 on firebreath-1.4 by Eric Herrmann: "FIREBREATH-20 Fixed OneShotManager, fix race condition" http://goo.gl/qrrz8
jshanab_wcw 18:03 Visual studio intelisesnse doesn't like the *'s is it a template that FB takes care of?
taxilian 18:03 no
it's a wix feature
FireBreathBot 18:03 Commit 8876bda on master by Richard Bateman: "FIREBREATH-20 reverted change mistake" http://goo.gl/BTAqB
jshanab_wcw 18:03 That * is not allowed, It must need the quotes
taxilian 18:03 oh, yeah, of course it needs quotes
just not {}
it's not valid XML without quotes
sorry, I misunderstood =]
jshanab_wcw 18:03 Hey, thats exactly what the compiler said :-)
taxilian 18:03 smart compiler
(you can tell, because it agrees with me)
jshanab_wcw 18:03 I think you are smarter than the MS compiler, much smarter
taxilian 18:03 lol. I *hope* so
jshanab_wcw 18:03 Awsome, that worked wonderful. Now how do i trigger an update in the browser? hummm. Is that going to be some version thing I have to write into the plugin?
taxilian 18:03 an update in the browser?
there is nothing automatic to do that
you'll have to somehow download and run the msi
whether with an external tool (such as omaha) or by having them just download it again
or you could put an updater into your plugin; that's tricky, though
jshanab_wcw 18:03 Ah fun. I thought maybe if there was a version param on the object, the browsers might be smart enough
taxilian 18:03 nope
install and update are the #1 most painful thing to deal with in plugins
perhaps someday I'll write a really elegant solution and sell it as a service or something
jshanab_wcw 18:03 But that is the way to trigger it! on windows at least. pass in a version. the plugin can query the regeistry and decide if a download is needed.
taxilian 18:03 except that what happens if you deploy a version that has a broken updater?
you don't want to change the updating mechanism with your plugin
jshanab_wcw 18:03 mozilla had a registration service, if you put your plugin on therir site and pointed your page to it, it handled that. I saw it on line, don't know if it ever took off.
taxilian 18:03 they have an extension registration service
you can use that, with an XPI
but you ahve to wrap your plugin in an extension so it will only work on firefox
jshanab_wcw 18:03 So I guess an "about" and "check for update" is best
taxilian 18:03 there are many options
hard to say what is "best"
I like the Omaha method, in general
jshanab_wcw 18:03 right now I will tell people to unisntall and then go back to ou r page.
Omaha? I need to look that up
taxilian 18:03 it's a royal pain to get going
it's the update mechanism for chrome
jshanab_wcw 18:03 ooh, Sounds interesting
taxilian 18:03 Update Engine is the mac version
bbl
FireBreathBot 20:03 JIRA issue http://jira.firebreath.org/browse/FIREBREATH-20 issue resolved by richard "Thanks to Eric Herrmann for fixing this"
JIRA issue http://jira.firebreath.org/browse/FIREBREATH-17 issue commented by richard "So, couple of things here; the first is that we use the wget from the FireBreath repo, so it shou..."
JIRA issue http://jira.firebreath.org/browse/FIREBREATH-11 issue resolved by richard "We have done what we can; this issue is fixed, other oddities remain."
FireBreathBot 21:03 JIRA issue http://jira.firebreath.org/browse/FIREBREATH-1 issue commented by [email protected] "As I also suggested the same deadline_timer is a good option for implementing timer functionality..."