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

IRC Nick Time (GMT-7) Message
taxilian 00:03 wondering if you've thought any more about the timer abstraction idea
but now I must go to sleep =]
I have some ideas; think I know how to do it on both Windows and Mac now
but not linux
anyway, talk to you sometime =]
mital 00:03 taxilian_away: sorry I was not at my desk
sure we will talk about this...
nitrogenycs 04:03 !wiki test
FireBreathBot 04:03 8 results found. Note: Results limited to 8
"file TestJSAPI.h":
"Re: Debugging Plugins":
"FireBreath 1.4 is now in beta":
"FireBreath 1.4 beta 2 released":
"FireBreath 1.4 Beta 4 released!":
"Useful resources":
nitrogenycs 04:03 !wiki testing
FireBreathBot 04:03 8 results found. Note: Results limited to 8
"file TestJSAPI.h":
"Re: Debugging Plugins":
"FireBreath 1.4 is now in beta":
"FireBreath 1.4 beta 2 released":
"FireBreath 1.4 Beta 4 released!":
"Useful resources":
Ed___ 08:03 mornin..
I tried to configure my project for the tip to test FB-14, but I get configuration errors:
Ah, ok. Downloaded again now and got:
This has configured ok.
Ah. Apart from one bit at the end:
neilg_ 09:03 FireBreathBot: tell taxilian: Is there a reason int16_t PluginEventMacCocoa::HandleEvent is returning true and false?
FireBreathBot 09:03 neilg_: I'll pass that on when taxilian is around.
Ed___ 09:03 Hi neil. Didnt know FireBreathBot could do that.. :D
Is there a list of handy little tags that Bot looks for somewhere?
taxilian 10:03 neilg_: that's actually kinda redundant, since I read all the logs anyway :-P
FireBreathBot 10:03 taxilian: 15:10Z <neilg_> tell taxilian Is there a reason int16_t PluginEventMacCocoa::HandleEvent is returning true and false?
taxilian 10:03 but yes, there is a reason
ed___: why are you using 1.4rc1?
neilg_ 10:03 Okay. What's the reason? Just seems strange to be forcing true or false to a number. I know that ultimately they resolve to a number anyway but.. :)
taxilian 10:03 !find HandleEvent
FireBreathBot 10:03 Found 5 possible matches. Displaying 5
/^int16_t NpapiPlugin::HandleEvent(void* event)$/ (f) found in src/NpapiCore/NpapiPlugin.cpp:
/^int16_t PluginEventMacCarbon::HandleEvent(void* event)$/ (f) found in src/PluginAuto/Mac/PluginEventMacCarbon.cpp:
/^int16_t NpapiPluginWin::HandleEvent(void* event) {$/ (f) found in src/PluginAuto/Win/NpapiPluginWin.cpp:
/^ boost::int16_t HandleEvent(NPEvent* evt) { return 0; }$/ (f) found in src/PluginAuto/Win/PluginWindowWin.h:
/^bool PluginWindowlessWin::HandleEvent(uint32_t event, uint32_t wParam, uint32_t lParam, LRESULT& lRes)$/ (f) found in src/PluginAuto/Win/PluginWindowlessWin.cpp:
taxilian 10:03 that's weird… no carbon?
maybe it doesn't like objc
cocoa, I mean
neilg_ 10:03 Oh, it's in a .mm file so maybe that confused it?
taxilian 10:03 yeah, probably
hmm. no, I lied; I don't know why it's using true and false
I was thinking something else
you have looked at this, right?
neilg_ 10:03 Yes - and I've made some changes to Cocoa already. :)
taxilian 10:03 cool =]
neilg_ 10:03 Just to check (I'm pretty sure I'm right but I want to confirm) - every plugin has its own instantiation of a PluginEventHandler... right?
taxilian 10:03 yes
neilg_ 10:03 Okay, good, because to make the modifier keys work I need to track their previous state
It's easier to store it in the PluginEventMacCocoa class rather than, say, the window...
Easier and cleaner
taxilian 10:03 yeah
tony_ 12:03 how is the pluginCore and PluginWindowMacCocoa are associated ..?
taxilian 12:03 tony_ when you get an AttachedEvent, the PluginWindow object will be given to you
tony_ 12:03 ok fine
taxilian 12:03 DetachedEvent means the PluginWindow object is about to go away
tony_ 12:03 ok and how plugincore and JSAPIAuto are associated..? there is a weak pointer in JSAPIAuto.. can u pls explain..
taxilian 12:03 !wiki Javascript
FireBreathBot 12:03 8 results found. Note: Results limited to 8
"Interacting with Javascript":
"file COMJavascriptObject.h":
"file NPJavascriptObject.h":
"file NPJavascriptObject.cpp":
"JSAPI Attributes":
"JSAPI Properties":
"JSAPI Methods":
taxilian 12:03 Read up on Interacting with Javascript
dan2 13:03 I just miss taxlian?
anyone know how to resize an <object> with javascript?
taxilian 14:03 dan2: the same way you'd resize anything else with javascript
though my preferred way is to make it 100%x100% and put it in a div, then resize the div
seems to be easier to manage
dan2 14:03 ok
someone-noone 14:03 hello
what's up?
taxilian 14:03 howdy
not much
someone-noone 14:03 why so?
me good
taxilian 14:03 just doing homework =] it's been pretty quiet today for the most part
taxilian 14:03 !find InvokeEx
FireBreathBot 14:03 Found 1 possible matches. Displaying 1
/^ HRESULT JSAPI_IDispatchEx<T,IDISP,piid>::InvokeEx(DISPID id, LCID lcid, WORD wFlags,$/ (f) found in src/ActiveXCore/JSAPI_IDispatchEx.h:
FireBreathBot 15:03 Commit f3d662b on master by Richard Bateman: "FIREBREATH-11 fixed - added named param DISPID_THIS"
Rav_ 15:03 hey, i'm just getting started with firebreath
taxilian 15:03 cool
and welcome
Rav_ 15:03 i'm trying to build an ext to save images to disk
taxilian 15:03 an extension? or a plugin?
Rav_ 15:03 well i already have an ext, and they would call this plugin
essentailly i've been today that i've got to use npapi to write anything to disk
so here i am!
taxilian 15:03 ahh. yes. this is true
so you have an extension and you want to write a plugin to expand functionality?
Rav_ 15:03 :) got to say thanks to you guys its really easy getting started...
yeah thats right
taxilian 15:03 glad you find it so
Rav_ 15:03 my confusion is how do i pass the image to the plugin
do i pass the img tag?
taxilian 15:03 the plugin cannot read binary data from the page
at least, not in any way that I know of
Rav_ 15:03 would that have the byte stream?
taxilian 15:03 where did the image come from?
Rav_ 15:03 so i would need to make a request in the plugin and download it?
from any website
taxilian 15:03 probably, then, yes
Rav_ 15:03 or a webpage already loaded by the browser
taxilian 15:03 if you use browserstreams then it will probably use the browser cache
Rav_ 15:03 sorry for my ignorance, but browserstreams ?
taxilian 15:03 !wiki browserstream
FireBreathBot 15:03 8 results found. Note: Results limited to 8
"class FB BrowserStream BrowserStream":
"class FB BrowserStream ~BrowserStream":
"class FB BrowserStream":
"class FB BrowserStream isSeekableRequested":
"class FB BrowserStream isSeekableByServer":
"class FB BrowserStream shared_ptr":
"class FB BrowserStream getLength":
"class FB BrowserStream getMimeType":
taxilian 15:03 hmm. no good docs written up yet, looks like
!wiki SimpleStreamHelper
FireBreathBot 15:03 8 results found. Note: Results limited to 8
"class FB SimpleStreamHelper":
"class FB SimpleStreamHelper onStreamDataArrived":
"class FB SimpleStreamHelper onStreamOpened":
"class FB SimpleStreamHelper Members":
"class FB SimpleStreamHelper SynchronousGet":
"class FB SimpleStreamHelper onStreamCompleted":
"class FB SimpleStreamHelper AsyncGet":
"FireBreath 1.4 Beta 3 released":
taxilian 15:03 BrowserStream is an abstraction for the browser API to make HTTP requests
SimpleStreamHelper can do a AsyncGet and in 1.5 (master dev branch) it can do AsyncPost
those return byte arrays, which would be one option
another option would be to write your own (or create one for FireBreath) that would save to a file while it downloads
do you need to target IE?
Rav_ 15:03 trageting chrome and FF for now
taxilian 15:03 ok; not too much difficulty with those, but keep in mind that you need to be really careful with security
if you have a plugin that can be used to write to disk, anyone can use that plugin in general
potentially to do bad things
Rav_ 16:03 hmm i though chrome can restrict the access
am i wrong about that>
taxilian 16:03 Chrome can, I believe
but if you're using it with FF, it cannot
Rav_ 16:03 this is my class project and i don't plan on publishing this
so that might now be an issue right? cause no one outthere would know about this plugin
*that might not be an issue
taxilian 16:03 well, that is potentially true
in that case
but still something to keep in mind
Rav_ 16:03 surely
taxilian 16:03 if it's just a class project, would you consider open sourcing it when you're done as an example?
Rav_ 16:03 but can javascript code probe for plugs and invoke methods?
taxilian 16:03 ye
Rav_ 16:03 oh yeah sure
hmm definately not good :) I'll think of something
@taxilian are there any example out there for the simplestreamhelper?
taxilian 16:03 FBTestPlugin has some really simple examples in it of both GET and POST
Rav_ 16:03 how aboout the getCacheFilename
taxilian 16:03 !findfile FBTestPluginAPI
FireBreathBot 16:03 Found 2 matching file(s) in the master branch. First 2 are:
taxilian 16:03 getCacheFilename?
Rav_ 16:03 wouldn't that do the job
taxilian 16:03 !find getCacheFilename
FireBreathBot 16:03 Found 1 possible matches. Displaying 1
/^std::wstring BrowserStream::getCacheFilename() const$/ (f) found in src/PluginCore/BrowserStream.cpp:
Rav_ 16:03 wow the bot is fancy!
taxilian 16:03 hang on, let me look at it
thanks =]
!findfile axstreams
!findfile axstream
FireBreathBot 16:03 Found 4 matching file(s) in the master branch. First 4 are:
taxilian 16:03 Rav_: sometimes the browser uses a file cache
but I don't think it does normally
nitrogenycs: is there a way with streams to tell it to download to a file?
Rav_: you can play with it if you want; I don't think it works that way, but you might find something
look through the code
Rav_ 16:03 perfect
i've got to run
would try it out tonight
taxilian 16:03 good luck
Rav_ 16:03 u were a big help man!
taxilian 16:03 yw
FireBreathBot 16:03 Commit ef7bbf5 on firebreath-1.4 by Richard Bateman: "FIREBREATH-11 Fixes for IE9"
taxilian 16:03 guess I'll need to do a FireBreath 1.4.3 with the IE9 support fix
FireBreathBot 16:03 FIREBREATH-11: Summary: Using a DOCTYPE definition in the HTML page breaks IE 9
FIREBREATH-11: Assigned To: richard
FIREBREATH-11: Priority: Major, Status: Open,
JIRA issue issue commented by richard "So there is a named argument DISPID_THIS that gets passed in when the doctype is set and not when..."
JIRA issue issue resolved by richard "I have updated it to always watch for and provide (in the case of calls back to the page) DISPID_..."
taxilian 16:03 well, I'm going to go get some food before class. bbl
gomoov 16:03 Hello
Just a quick question.
Where is the instance of NpapiBrowserHost?
Or any upper class of NpapiBrowserHost's instance.
Thank you!
I just want to use some NPAPI functions, but I do not know how to use those functions from my plug-in.
Any detailed explanations are appreciated !
taxilian 17:03 gomoov: what are you trying to do?
I can answer your question directly, if you'd prefer, but there is probably a cleaner way
taxilian 17:03 gomoov: still not back?
Rav_ 18:03 @taxilian u there?
taxilian 18:03 yes
Rav_ 18:03 ohh cool I had to run to the mac store to buy a new charger
i had a question on what you suggested
when we get the stream from the broser won't it contain on the DOM?
*contain only the DOM
taxilian 18:03 you create a browserstream to do an HTTP download
it has nothing to do with the dom
it's just a downloaded file
Rav_ 18:03 hmm let me think, 1 sec
i'm goin through the simplebrowser api
taxilian 18:03 okay
thing of browserstream as being like curl or wget
it has no relationship to the DOM at all
you give it a URL to an image and it downloads it
Rav_ 18:03 alright makes sense, not here one more complication
sometimes the images can be the browser screen captures (using chromes api)
you think it would still work?
taxilian 18:03 that'll be tricky
I don't know how you can do that
Rav_ 18:03 :) yeah cant wait to try that
taxilian 18:03 perhaps it stores it on the hard drive, in which case you can still probably "download" it using the img src
Rav_ 18:03 from what i read chome gives you a url to access the image (that it stores locally)
so im hoping the plugin could hit the url and fetch the image
taxilian 18:03 makes sense
you could probably get the URL with javascript; if you can, you can get it with a plugin
taxilian 20:03 nirvdrum: any idea why shows new issues coming in, but doesn't show any being resolved?
nirvdrum 20:03 Weird. I've never seen that before. Maybe a cache got screwed up or something.
I'll take a look in a bit.
taxilian 20:03 thanks
nirvdrum 20:03 taxilian: Any chance of upgrading to the released version of JIRA?
I'm seeing some JS wonkiness, too.
Dunno if it was fixed or not, I'd probably start there.
taxilian 20:03 nirvdrum: I can probably do that; this is RC1
there shouldn't be too much difference
taxilian 21:03 nirvdrum: updated, but doesn't seem to help
nirvdrum 21:03 The JS part is working for me again.
taxilian 21:03 that's some sort of progress, then
gunna try reindexing
okay, that was fast
and not helpful
nirvdrum 21:03 Heh.
Not seeing anything immediately obvious.
taxilian 21:03 I have a thought
I don't know that any of the "resolved" statuses are set
nirvdrum 21:03 Only real thing I can think of is if it only shows closed issues, not resolved.
taxilian 21:03 there are 3 closed issues
and 3 resolved
in the system
the "resolution" field was hidden
but still isn't required
nirvdrum 21:03 Think I'm gonna go crash. It's been a long day.
taxilian 21:03 okay. thanks for looking at it
FireBreathBot 21:03 JIRA issue issue reopened by richard
JIRA issue issue resolved by richard
JIRA issue issue closed by richard
taxilian 21:03 yeah, that fixes it
but now I have to go edit each issue
FireBreathBot 21:03 JIRA issue issue reopened by richard
nirvdrum 21:03 Sucky.
Good find though.
FireBreathBot 21:03 JIRA issue issue resolved by richard
taxilian 21:03 there aren't many
and it's just once
I still can't believe it doesn't figure that out on its own
FireBreathBot 21:03 JIRA issue issue reopened by richard
nirvdrum 21:03 I never had that problem before.
So, not really sure what happened there.
Oh well.
taxilian 21:03 I probably accidently hid the field
nirvdrum 21:03 See you later :-)
FireBreathBot 21:03 JIRA issue issue resolved by richard
JIRA issue issue closed by richard
JIRA issue issue reopened by richard
JIRA issue issue resolved by richard
JIRA issue issue closed by richard
JIRA issue issue reopened by richard
JIRA issue issue resolved by richard
JIRA issue issue closed by richard
JIRA issue issue reopened by richard "Looks like there may be more that we should look into on this; the initial issue is fixed, but ev..."
taxilian 21:03 nitrogenycs: did you ever look at FIREBREATH-4?
FireBreathBot 21:03 FIREBREATH-4: Summary: Put all generated files into the visual studio solution
FIREBREATH-4: Assigned To: richard
FIREBREATH-4: Priority: Major, Status: Resolved,
JIRA issue issue reopened by richard
JIRA issue issue resolved by richard
JIRA issue issue updated by richard
mital 22:03 taxilian: hey
taxilian 22:03 hello
how are you?
mital 22:03 hey I am good !! busy with lots of stuffs
how are you doing
taxilian 22:03 pretty good. insanely busy, but good =]
mital 22:03 sorry could not spend much time on firebreath
taxilian 22:03 that's okay
just was wondering if you were still thinking you'd like to take a run at the timer abstraction
mital 22:03 I am looking forward for it... so can u explain me what is the exact use of the timer in firebreath ?
taxilian 22:03 FireBreathBot: tell gomoov the BrowserHostPtr object can be cast to a FB::Npapi::NpapiBrowserHostPtr object (using FB::ptr_cast<FB::Npapi::NpapiBrowserHost>(host)), but there are very, very few good reasons why you should do that as the BrowserHost object provides an abstraction for pretty much everything
FireBreathBot 22:03 taxilian: I'll pass that on when gomoov is around.
taxilian 22:03 mital: there are a lot of potential uses
some people use it for drawing; in that case, you'd probably want to have it on a seperate thread
others use it for polling something
or checking program state
mital 22:03 hmm so I have tried to implement the windows timer functionalities here...
you should be able to use the classes as is without modifications... is the sample usage of the same class
is this good for our purpose ?
taxilian 22:03 I think that should do for the main-thread timer, yes
probably a few minor tweaks
use a message window for the HWND to put the timer on, for example
!find WinMessageWindow
FireBreathBot 22:03 Found 2 possible matches. Displaying 2
/^FB::WinMessageWindow::WinMessageWindow() {$/ (f) found in src/PluginCore/Win/WinMessageWindow.cpp:
/^ class WinMessageWindow : boost::noncopyable$/ (c) found in src/PluginCore/Win/WinMessageWindow.h:
taxilian 22:03 that one should work find for it, I would think
maybe with slight modifications
I'm trying to decide how the timers should be attached; should they be tied to the browserhost, for example?
I suppose we could have each timer have its own window, and just make it an object that you instantiate; behind the scenes it could allow for platform
mital 23:03 as our plugin is a separate process in most cases (exclude FF 3) having all timer tied to the main thread of our plugin would be good... no need to create separate windows for each timer i think..
taxilian 23:03 well, we definitely want two versions
one that is tied to the main thread, and one that is not
how you select which of these I don't know yet
the main thread timer will be much less precise
and is not ideal for drawing loops
mital 23:03 why do u think we should create separate window for each timer ? yeah in this case we can create a separate thread which only deals with timers..
taxilian 23:03 oh, I'm not saying that we have to
I'm just trying to figure out how best to do a timer if we don't
so I'm thinking you could have something like this:
FB::Timer timer(boost::bind(&MyPluginClass::doSomethingOnTimer, this));
put that as a class variable; when you give it the function and the duration (guess I missed a parameter) it starts up, then when it goes out of scope it stops
most likely you'd put it in a scoped_ptr
boost::scoped_ptr<FB::Timer> timer(boost::make_shared<FB::Timer>(boost::bind(&MyPluginClass::doSomethingOnTimer, this), 1/30);
so then when you want it to stop, you just do timer.reset() and it stops the timer
scope based
so you don't accidently leave it running somehow
just a thought
mital 23:03 yeah this could work fine.
taxilian 23:03 but it would be difficult to share the window this way
I suppose you could reference count a shared instance, though
mital 23:03 we can maintain the window as static private member of Timer class where it adds reference to it in constructor /(shared_ptr).
one window shared across all the Timers.
taxilian 23:03 yeah; that would probably work; we'd need to make sure the static member goes away when the last user does
because we can't be shutting things down in dllMain
but with some reference counting we should be okay
actually, a static weak_ptr and then a shared_ptr in each instance of the timer should do it nicely
mital 23:03 hm sounds cool...
taxilian 23:03 so you first try to lock the weak_ptr, if that doesn't work you create a new instance and set the static weak_ptr to refer to it
mital 23:03 if weak_ptr is null ... then we create it and assign it
taxilian 23:03 exactly
we're on the same page =]
mital 23:03 yeah
taxilian 23:03 that would work for whatever threaded implementation we use as well
thread shuts down when the last shared_ptr goes away
mital 23:03 what are your thoughts about implementing the same class in osx and linux.
taxilian 23:03 well, for OSX we can use NSTimers; there is an example already in
FireBreathBot 23:03 Found 1 matching file(s) in the master branch. First 1 are:
taxilian 23:03
mital 23:03 hmm sounds good
taxilian 23:03 for linux we could if we need to use the multi-threaded version but use ScheduleOnMainThread to make it fire on the main thread
not idea, but it would work until someone thinks of something better
and if it bugs anyone they will =]
mital 23:03 I would try gettting this implemented on windows... it would make the structures of classess and threads more clear...
taxilian 23:03 yeah, that's a good place to start
mital 23:03 I will do that over the weekend... will keep you updated about the same..
taxilian 23:03
boost::asio::deadline-timer might work well for the multi-threaded version
anyway, get something started and we can fill it out as we go
that would be awesome
I've wanted to do this for a long time, but haven't had time
mital 23:03 yeah... actually I tried deadline_timer.. but I could not be able to get it working for my example so tried implementing it using native stuff.. will take a look at it again...
taxilian 23:03 okay; I haven't used it. dan2 might have some ideas?
(he knows boost a lot better than I do)
I'll ask him when he's next around, if he doesn't respond soonish
FireBreathBot 23:03 JIRA issue issue assigned by richard "As we discussed on IRC, let's start out with a windows implementation using HWNDs (WinMessageWind..."
taxilian 23:03 okay, I assigned FIREBREATH-1 to you =]
FireBreathBot 23:03 FIREBREATH-1: Summary: Cross-platform timer abstraction.
FIREBREATH-1: Assigned To: [email protected]
FIREBREATH-1: Priority: Minor, Status: Open,
mital 23:03 kewl
taxilian 23:03 and thanks
mital 23:03 its first bug of firebreath in jira :)
taxilian 23:03 heheh. yep, it is
I think it's also the longest standing feature request
mital 23:03 I would be happy to implement the same..
taxilian 23:03 =]
I've been working a lot more on the web-based version of fbgen lately
hoping to have an initial version up soon
will deprecate the console-based version, though not remove it of course
mital 23:03 hmm ok
web based as in using local host ?
taxilian 23:03 no; it will be hosted at
you'll download a zip file or tarball
mital 23:03 so server will generate the files and bundle it for your application ?
taxilian 23:03 it will require a login/password, partially for my benefit and partially for the user's; it will save your plugin definition history so you can go back and change things, then regenerate, and it will help me know how many people are using FireBreath, which helps me stay motivated =]
you just download the .zip and extract it in projects/ or wherever
it uses the same login/pass database that and do
mital 23:03 hmm I have seen this kind of implementations... I think this would be good feature at client side... coz if somebody clones your repository, he already has all code but this would be unnecessary dependency on for creating his own plugin...
taxilian 23:03 like I said, I'm not going to remove the old fbgen
but this version will also have some advanced features that will be "donator only". donations may consist of help on the project as well, not just monetary; my hope is that the advanced features will be desirable enough that more people will be willing to contribute to the project in order to get access to them =]
but the old fbgen will still be there
for those who don't have internet access for some reason :?
mital 23:03 also user will download the pre-generated template once and may never come back to the site.. developing the whole plugin at client side ... so it may not serve your purpose as well.
taxilian 23:03 also quite possible
but i'm not trying to make a lot of money off of it
just to get a little more out of it than I am currently; even just knowing how many new plugins are being created (or an estimate, since some will still use console-based) will be useful to me
mital 23:03 hmm ok
taxilian 23:03 and when I say donation, I'm thinking "$10 gives you a month", etc
not expecting a ton of money
maybe more or less than that; still deciding
but there are a lot of costs that go into FireBreath, and most people using the project don't bother to contribute in any way; this will give them a little more of a prod. many will still ignore it, but that's life
besides, it's a fun project to play with django =]
mital 23:03 yeah :
taxilian 23:03 it may turn out to be a flop; we'll see
I think people will like it, though; despite needing a login, it'll still be much nicer for getting started than the console-based version, since it will have more information and a few more options
and the login you need to update the wiki or submit issues anyway, so all firebreath users will want to be registered, right? ;-)
mital 23:03 hmm yeah ;)
taxilian 23:03 incidently, some of the "Advanced features": multiple mimetypes, multiple plugins, define your JSAPI classes, function templates (such as an asynchronous call w/ thread and callback), timers (once supported), platform-specialized plugin classes (base YourPlugin class, then YourPluginWin, YourPluginMac, etc)
all in a nice very easy to use AJAX interface that shows you the code as you change things
dan2 23:03 taxilian: you need 501(3)(c) status
taxilian 23:03 ? what's that, non-profit?
dan2 23:03 not for profit (tax exempt) which is different than nonprofit
taxilian 23:03 ahh. yeah, looking at it on wikipedia; that might be worth setting up, though it would have to be a seperate legal entity from Richard Bateman, LLC that I normally do business through
dan2 23:03 it can actually make a nice little tax loophole for yourself if you put money back from Richard Bateman LLC into the not for profit
e.g. deemed costs necessary to support and so forth
taxilian 23:03 well, I have to talk to my accountant on Tuesday anyway, so I'll bring it up and see what he thinks
dan2 23:03 unless he's a corporate accountant and a very good one, I'd prefer a tax attorney
if there is anything clear about US tax code, is that you get what you pay for
taxilian 23:03 he's pretty good; I don't have a tax attorney, nor can I justify paying one presently; however, at the very least it doesn't hurt to find out what he knows about them
he has saved me a lot of money in the past, so I'm inclined to trust him for now, anyway; I think if he doesn't feel qualified to ask about it he'd tell me
dan2 23:03 tax attorneys are the guys who can give the IRS the finger
taxilian 23:03 lol
dan2 23:03 they make everything look so good, and incredibly expensive to audit, the IRS doesn't bother
taxilian 23:03 they are also very expensive… =]
dan2 23:03 like all attorneys