IRC Log Viewer » #firebreath » 2011-02-28

IRC Nick Time (GMT-7) Message
physicsrob 00:02 ugh.. this memory leak sucks
NoAntz 02:02 Hi nitrogenycs.... One question.
Do you have problems running download streams on MacOS?
I can not be able to make work... :(
I have opened an issue about it.
nitrogenycs 02:02 NoAntz: I don't know, I've only tried them on windows where they worked for me on Opera, IE, Firefox and Safari when I implemented them
NoAntz: I don't have a Mac or Mac VM
NoAntz 02:02 Ok. thanks!
saiaman 04:02 Hello eveyrone
Dadu_ 06:02 Hello
taxilian 09:02 NoAntz: Have you tried any of the simplestreams tests in FBTestPlugin?
physicsrob: Any luck?
neilg_ 09:02 I'll be looking at streams on the mac today in any case
taxilian 09:02 neilg_: cool
I think honestly that it's not really an issue; the example in the issue was using the TestStreams function whcih doesn't actually return anything anyway
neilg_ 09:02 I suspect that's true
taxilian 09:02 it was just intended to show that things don't crash
the SimpleStreams tests are the best way to test if it's working or not
neilg_ 09:02 Luckily I'm familiar enough with the code that if there were errors then I should be able to track it down quickly. But I really suspect you're correct!
taxilian 09:02 yeah
the most common issue is not holding the shared_ptr reference
which causes the issue he's describing
but if he isn't holding the reference, what exactly is the point of continuing the call? I mean, you can't get the results back...
I guess if the class itself was doing a callback… but the class should then be holding a pointer to itself to be released when it's done
neilg_ 09:02 You're absolutely right, I'd bet that's the problem exactly
I find shared pointers are second nature to me to use - but there's definitely a learning curve to them if you've not really used them before!
taxilian 09:02 yeah
jshanab_wcw 10:02 AMEN
NoAntz 10:02 Hi taxilian
yes I have tested the simplestreams and doesn't work on MacOS (I have added an issue).
taxilian 10:02 sounds like Neilg_ is going to take a look at it
but the issue you submitted was not the simplestreams test
that one always does what you described
NoAntz 10:02 sorry I have a mistake... I think :(
taxilian 10:02 NoAntz: the problem with TestStreams is that it doesn't hold the shared_ptr
if you don't hold the shared_ptr, the object goes out of scope and gets destroyed
and the stream is canceled
NoAntz 10:02 UUFF.... I think that I have a mistake.
taxilian 10:02 less work for me… ;-)
we need to clarify that
either fix or remove that example
saiaman 10:02 hello everyone
taxilian 10:02 sorry
hey saiaman
NoAntz 10:02 Sorry.... tomorrow I review the code... I think that you are right.
After upgrade to FB 1.4.0 RC1 I think I lost some changes, these changes make the example SimpleStream works.
I try getURL on MacOS and I will add my modifications to make TestStream works (as you say holding shared_ptr outside scope).
taxilian 10:02 ok
submit a patch =]
physicsrob 10:02 hi taxilian
no luck on that memory leak
I've got some more info, though
taxilian 10:02 ok
physicsrob 10:02 so, to summarize what I said last night: roughly 18kb leaked everytime any method is called on the plugin object from javascript
the first thing I tried was to basically comment out NPJavaScript::Invoke (just return true the first line)
and the memory leak stayed
so basically it must be one of the other calls that happens when you do myplugin.myMethod()
I checked out my plugin from 1.3 and of course there was no leak
taxilian 10:02 probably something in the methodobjects, then
I didn't consider that before because you said it was npapi only
but sounds like it happens on ie as well
what actually happens when you call a method is it requests a property with that name
and it creates a JSAPI object with only one method — ""
which is called on invokedefault
a method object, essentially
physicsrob 10:02 ah I see
taxilian 10:02 so first there is a getproperty call
then an invokedefault call on the returned object
and that's new in 1.4
I need to go take care of some things; be back in 30
physicsrob 10:02 ok
physicsrob 11:02 taxilian: That *is* the source of the problem. A quick javascript experiment shows that for(i=0;i<1000;i++) testPlugin.asInt(5.0) leaks about 15mb, but asInt=testPlugin.asInt; for(i=0;i<1000;i++) asInt(5.0) only leaks a negligible amount of memory
What's the reasoning behind returning a new javascript object for each method rather than using Invoke() ?
taxilian 11:02 if you return an object then it works more like javascript
i.e. a = plugin().asInt
will work
also, we have to on IE anyway
so I figured we may as well everywhere
just need to figure out why it's leaking
shouldn't be doing that =]
physicsrob 11:02 could it be that it's our responsibility to cache the objects? right now each call to testPlugin.asInt is returning a new object, which doesn't really seem right
a=testPlugin.asInt; b=testPlugin.asint; (a==b)=false
taxilian 11:02 what do you mean by returning a new object?
new JSAPI object or new NPObject?
physicsrob 11:02 new JSAPI object, right?
taxilian 11:02 should not be
those should be cached
physicsrob 11:02 it does create a new NPObject each time, though
taxilian 11:02 that's fixed in 1.5
physicsrob 11:02 I wonder if that's what is at issue here
taxilian 11:02 it it shouldn't be; Chrome, at least, is pretty good about releasing NPObjects when ti's done with them
physicsrob 11:02 do you have valgrind or something setup so that you could fairly easily find out what objects are the source of this problem?
taxilian 11:02 Xcode has a leaks program that normally works pretty well for that
physicsrob 11:02 yeah
I tried it
taxilian 11:02 I haven't run it in awhile
physicsrob 11:02 the symbols aren't working in MallocDebug for some reason
I think I'm probably going to just use a hack so that my plugin is stable -- just cache the methods in javascript
taxilian 11:02 possibly because the process you are connecting to is running the plugin OOPP
so if you cache the methods and then call them 1000 times is the issue still there?
i.e. a = plugin().doSomething
physicsrob 11:02 no, if I cache the methods everything is fine
taxilian 11:02 and then call a(…) 1000x?
physicsrob 11:02 it's the GetProperty call that is resulting in the leak -- not the InvokeDefault
taxilian 11:02 yeah, I figured
will have to figure out why
that should not be
physicsrob 11:02 so should _Deallocate be called on the NPObject?
taxilian 11:02 yes
physicsrob 11:02 it's not
taxilian 11:02 which plugin are you testing?
physicsrob 11:02 FBTestPlugin
the head of the 1.4 branch
taxilian 12:02 okay...
physicsrob 12:02 testPlugin.asInt results in GetProperty, Allocate, NewObject, but no Deallocate
each time it's called
taxilian 12:02 ooh… you know what?
wait, no...
there are two fixes that would affect this, but one is in 1.4
hang on… what are you running it in?
physicsrob 12:02 on firefox, or just the javascript console in chrome
taxilian 12:02 okay
the problem with that
is that those tools probably hold a reference to the return value
which prevents the _Deallocate from beiing called
I just ran some tests (not doing a ton of calls, but watching the calls that happen in test.html)
and I don't see any problems
it caches the JSAPI objects that are created
but not the NPObjects
physicsrob 12:02 okay, let me try that
taxilian 12:02 but the NPObjects get destroyed properly
keep in mind it may not happen immediately
but it will happen fairly soon
try it with 1.5
just for curiosity's sake
physicsrob 12:02 hmm
you're right
it grows about 20MB
but then it wont grow any further
taxilian 12:02 that's still a lot more than I would expect
will have to look at pairing down the excess "stuff" in the method objects
if it's using that much memory it needs to be done
but if it has a limit then it's not a major issue
just an annoying one
and it can wait for 1.5
I will look at it
gotta switch computers now, though
be back in a bit
FB_GitHubBot 13:02 FireBreath: firebreath-1.4 Richard Bateman * e37a251 (1 files in 1 dirs): Fixed minor cmake issue with jsoncpp lib
FireBreath: firebreath-1.4 Richard Bateman * 9f1a1d2 (2 files in 1 dirs): Fixed issue #154 - firebreath_sign_plugin fails with empty timestamp URL
FireBreath: firebreath-1.4 commits 90ba28f...9f1a1d2 -
physicsrob 13:02 taxilian: by the way my installer is still not working for IE. I completely rebuilt everything. If I run the MSI, IE doesn't work. If I run regsvr32 IE works fine
have any other tips on how I could debug this?
taxilian 13:02 process monitor is what I'd do next
you're absolutely certain that you deleted the old MSI and it created a new one and you're using that?
physicsrob 13:02 yep
I completely deleted the build directory
taxilian 13:02 okay; the next step is to look in the registry
you understand at all how COM controls are registered?
physicsrob 13:02 not really, no
taxilian 13:02 have you looked at the generated version of the .rgs file?
physicsrob 13:02 yeah
taxilian 13:02 okay; so the first step is to identify what actually is/isn't happening
i.e. "the control doesn't load" isn't the problem, it's the symptom
so look at the .rgs file and then run the MSI installed
open regedit and figure out what keys are or are not getting installed
physicsrob 13:02 right
taxilian 13:02 incidently, HKCR is a combination of HKLM/Software/Classes and HKCU/Software/Classes
this *should* be putting our keys for the COM control in HKCU not HKLM
but check both
physicsrob 13:02 ok
physicsrob 14:02 taxilian: I exported the registry after installing the msi, then I ran regsvr32 and exported the registry again, and then I took a diff
taxilian: mind taking a quick peak at the diff to see if you have any ideas?
regsvr32 definitely set up some things different, but I'm not sure what's relevent
taxilian 14:02 hang on
will look at it in a sec
jshanab_wcw 14:02 What is the best way for the plugin to get the ppointer to the javascriptAPI so I can have the plugin emit a javascript event?
physicsrob 14:02 jshanab, not sure if it's the best method, but you can always hang on to a pointer to the JSAPI when you create it
taxilian 15:02 jshanab_wcw: try calling getRootJSAPI()
physicsrob: if you ever try that (and it's a valid option), make sure it is a shared_ptr
jshanab_wcw 15:02 ahha, I remember that now, thanks!
jshanab_wcw 15:02 Can I send an event that has no parameters?
taxilian 15:02 yes
jshanab_wcw 15:02 but I have to put something in the FireEvent call...
taxilian 15:02 FB::VariantList() perhaps?
you can pass an empty vector
or FB::variant_list_of()
in case you want to add arguments later
jshanab_wcw 15:02 Thanks, I was playing with what is the FB::Varient eq of NULL :-)
taxilian 15:02 no, that's the variantlist equiv
variant equiv of NULL is FB::FBNull
which returns "null" to javascript
jshanab_wcw 15:02 sorry, i was being lazy on the typing, I new it was fbvarientlist not fbvarient LOL, but thanks for setting me straight
taxilian 15:02 =]
jshanab_wcw 15:02 "getRootJSAPI()->Signal_Ended();" This however is not right. it says 'Signal_Ended' : is not a member of 'FB::JSAPI'
Is it a register method thing?
taxilian 15:02 getRootJSAPI() gives you a JSAPI ptr
jshanab_wcw 15:02 I was not going to expose it to the outside world
taxilian 15:02 you'll need to FB::ptr_cast<type> it to get it to your type
jshanab_wcw 15:02 oh
taxilian 15:02 everywhere else we can return whatever, but that has to be a JSAPIPtr
so it can't be a <yourtype>Ptr
neilg_ 15:02 So... I have a question. I need to spawn a process from within my plugin on OS X. I was trying to use fork() and execlp() but this doesn't work (security perhaps?) - the child process is blocked until the browser gets closed (or at least until the plugin is unloaded). Any suggestions as to how I should launch a process? I can't block obviously.=)
jshanab_wcw 15:02 I wonder if a utility function like the getPlugin() in the jsapi, would not be a nice feature
taxilian 15:02 can't
JSAPI doesn't know anything about the plugin
unless you pass it in
which is why getPlugin() is in the fbgen template
also, consider the possibility that a JSAPI object is used by multiple plugin objects
jshanab_wcw 15:02 Oh, I was thinking at fbgen time
taxilian 15:02 already there
jshanab_wcw 15:02 oh, time to update again :-) Not that that would help, this was genreated via 1.2
taxilian 15:02 heh. yeah, there have been a lot of improvements
would be good to find a good way to notify people of those
or something :-/
jshanab_wcw 15:02 what, no "re-gen" ohh, scary thought
taxilian 15:02 hehe. yeah, that would be difficult
you actually can run fbgen again
it keeps your previous settings
but it'll overwrite stuff
jshanab_wcw 15:02 scarier than "svn force" LOL
taxilian 15:02 hehe
but not much is scarier than git rebase in the hands of a beginner
jshanab_wcw 15:02 Here is a funny item, why we are on the subject of funny. You know how we drag the FBControl.htm into the browser for test? Not if the browser is on!
taxilian 15:02 lol
yeah, tries to do drag and drop
physicsrob 15:02 taxilian: by the way -- my plugin never had any sort of memory leak in the first place. It just looked like it. It grew 1mb/min so I figured it must be leaking. But it's the typical story with garbage collection -- it was just an illusion.
jshanab_wcw 15:02 I do like confluence, got used to it at previous job
taxilian 15:02 physicsrob: good to know
physicsrob 15:02 coupled with firebug holding a reference and making it appear to be leaking when I played around with it...
all an illusion
taxilian 15:02 the memory usage in 1.5 should be much better
neilg_ 15:02 I'm not sure whether I asked at a bad time or whether nobody knows how to launch an external process from a plugin/
taxilian 15:02 what platform?
neilg_ 15:02 Damnit, I thought it was my wireless keyboard starting to die - but it's Synergy doing horrible things
physicsrob 15:02 neilg: can't you just use system() ?
taxilian 15:02 same way you'd launch an external process from any other mac app
*not* with system
neilg_ 15:02 I tried to fork() and then execlp()
No, system() would block
physicsrob 15:02 fair enough
taxilian 15:02 system creates a shell session… you probably don't want that =]
neilg_ 15:02 I find that my process runs but is blocked until the browser quits
taxilian 15:02 the last three weeks have each in turn been the highest traffic weeks for FireBreath ever, with the exception of the one week where ajaxian featured us
physicsrob 15:02 cool
taxilian 15:02 neilg_: I'm not familiar enough with mac APIs, sorry
physicsrob 15:02 neilg: what do you mean exactl the process is blocked until the browser quits?
it doesn't start running?
taxilian 15:02 the week after christmas we had 600 hits… last week we had 1511
neilg_ 15:02 Me either, that's why I'm trying the POSIX APIs of fork() and execlp() :)
It launches but does absolutely nothing until the browser quits
taxilian 15:02 huh
physicsrob 15:02 interesting
is it a unix app or a OS X gui app?
taxilian 15:02 someone pulled in boost::process and was using that
it's not officially part of boost
it's a plugin =]
oh, wait, what he is launching
got it
physicsrob 15:02 right :)
neilg_ 15:02 It's really strange. I think I'll have to actually use Cocoa to do it which sucks because this is meant to work
It's a unix/terminal app
physicsrob 15:02 that makes no sense then
neilg_ 15:02 Right, it's completely weird and I have no idea why I'm seeing this behaviour! I didn't know whether it was Firefox doing something odd which is why I thought I'd ask
physicsrob 15:02 and you're doing if(fork()) { execlp(...) }
err fork()==0
neilg_ 15:02 Right
And it definitely forks and the execlp() succeeds. But the process sits there using 0.1% CPU and does nothing until I quit the browser. I can't even attach to it!
It's... odd. :)
physicsrob 15:02 hmm
could it have something to do with the file descriptors? maybe try replacing stdin stdout and stderr for the child?
I can't imagine how
just a thought
taxilian 15:02 that's actually not unlikely
neilg_ 15:02 I wondered about that so I close all of them in the child process - just in case. No dice though - but it's definitely a good thought!
taxilian 15:02 because I know the cross-process stuff uses those
physicsrob 15:02 if you get rid of the fd's and you've forked it seems to me like you've got an entirely different process. So I have no clue. really bizarre
taxilian 15:02 well, bbl
neilg_ 15:02 Isn't it? Well, thank you for your help anyway - I definitely appreciate it!
physicsrob 15:02 no prob -- you've peaked my curiosity now. :)
physicsrob 17:02 finally.. isolated the missing registry key
taxilian 17:02 physicsrob: what is missing?
physicsrob 18:02 taxilian: MyCompany.MyPlugin is missing form HKCR
taxilian: but it is in my FBControl.rgs file
not sure why it's not getting installed properly
taxilian 18:02 physicsrob: is that the only thing that is missing?
well, I guess that'd be enough since you're using that to install
to detect, rather
let me see your np(plugin name).wxs file again?
physicsrob 18:02 sure
taxilian 18:02 wrong one
I need the generated one
physicsrob 18:02 oh
one sec
taxilian 18:02 hmm. so GradeCam.GCPlugin.1 is there, but GradeCam.GCPlugin is not?
physicsrob 18:02 right
and if I manually add it everything works great
taxilian 18:02 okay, we're getting much closer, then
ready to learn some of how the wix generator works? =]
go look in cmake/Win.cmake
physicsrob 18:02 sure
okay.. its open
taxilian 18:02 do a search for .xsl
there is a parameter we're passing into heat that is something like -t:fixFragment.xslt or some such
physicsrob 18:02 right
taxilian 18:02 remove it (temporarily; we'll put it back in a minute)
physicsrob 18:02 ok
taxilian 18:02 then run prep again
and build the WiXInstall project
physicsrob 18:02 okay
taxilian 18:02 it will fail, but that's okay
physicsrob 18:02 one sec
taxilian 18:02 when you get that, look at the generated file agin. it should have lost the w: namespace
pastebin it
and flag when when you get there; I'm doing some other things and may not see it
physicsrob 18:02 ok
taxilian 18:02 ok
how familiar are you with xslt?
and is your mind boggled to find yet another unrelated-to-anything-else technology that we're using in FireBreath? =]
this is definitely the problem, btw
physicsrob 18:02 hehe
I'm completely unfamiliar with xslt
taxilian 18:02 okay; well, I think I have fixed it
and will commit in a sec
I'll need you to test, though
physicsrob 18:02 sure
taxilian 18:02 for some reason mine uses a different layout
physicsrob 18:02 gladly
taxilian 18:02 perhaps a different version of WiX
FB_GitHubBot 18:02 FireBreath: firebreath-1.4 Richard Bateman * e88d8f1 (1 files in 1 dirs): Fixed xslt problem with new WiX stuff -
taxilian 18:02 so what happens is that heat generates the xml we need, but there are a couple of minor issues
so I wrote an xslt stylesheet that transforms it and fixes the problems
because heat can apply it natively and it doesn't require an extra scripting language or anything
it's slightly scary, really
physicsrob 18:02 gotcha
let me try
taxilian 18:02 update, re-add the xslt transform on the command line
and then send me the new generated file
if you look at what you just sent me, you'll see where your progid is (nested in the other noe)
that should be there in the generated one after the xslt as well
physicsrob 18:02 ok
looks better
now to see if the installer works
by the way -- I was thrilled to see that the yellow bar issue has been resolved
my customers were getting very confused by that
woohoo! it works
taxilian: thanks a million
taxilian 18:02 glad it works; thanks for catching those things
guess it's good I didn't release that as 1.4.0, right? =] these fixes will be in the release
FB_GitHubBot 18:02 FireBreath: master Richard Bateman * 4ece0f1 (1 files in 1 dirs): Fixed xslt problem with new WiX stuff -
physicsrob 18:02 hehe
alright -- ready to release
or final testing anyway
taxilian 18:02 you going to turn on timestamping? I would
it's really really easy
physicsrob 19:02 sure
argh. one last bug. There's always one last bug.
taxilian 19:02 heh
taxilian 20:02 has anyone here used openssl with firebreath on mac?
physicsrob 20:02 taxilian: looks like your implementation of InvalidateWindow has the wrong coordinates for windowless activex
I'm using NULL in my local code instead of a rectangle and everything is working right
taxilian 20:02 hmm
that being the case, I have no idea how to get the right coordinates, then :-/
I keep getting different coordinates, and I'm not certain they are always right
starting to think they are most likely not
but odn't know when or why
physicsrob 20:02 hehe
I know
how about NULL as the default for activex windowless, then?
taxilian 20:02 well, it's better than what we have now, I guess
only partially fixes the problem, but… :-/
taxilian 20:02 gee. awesome. this plugin builds on mac in 1.4.0rc1, but not rc2. there shouldn't be any difference that would affect this
it's openssl not linking
that causes it to break in rc2
FB_GitHubBot 20:02 FireBreath: firebreath-1.4 Richard Bateman * 39e41fe (1 files in 1 dirs): Fixed openssl build error -
FireBreath: firebreath-1.4 Richard Bateman * 1178c08 (2 files in 2 dirs): Fixed minor project generation bug with jsoncpp and HttpService -
FB_GitHubBot 21:02 FireBreath: master Richard Bateman * 2e05bd6 (1 files in 1 dirs): Fixed openssl build error
FireBreath: master Richard Bateman * d708bc3 (2 files in 2 dirs): Fixed minor project generation bug with jsoncpp and HttpService
FireBreath: master commits 4ece0f1...d708bc3 -
physicsrob 23:02 quiet tonight
taxilian 23:02 yeah
it actually used to be a lot more lively in here than it has been the last few months
probably because I'm the only really active developer
when amackera and georg were both actively developing we had more to discuss
now it's mostly when people have problems
physicsrob 23:02 hehe
sorry about that
I guess that's just a sign of how stable everything is getting
taxilian 23:02 I'm sure that's a bit part of it, actually
people don't feel like they have to contribute code because most everything they need is there
and what isn't can be added in usually with minor customizations that they don't bother to contribute back
physicsrob 23:02 yeah -- the plugin part of my plugin is tiny now -- the only interesting thing I could possibly contribute is how to bitblit a bitmap and robustly support all the mac and windows browsers
taxilian 23:02 any kind of drawing examples would be good, actually
that's the main thing we lack now, I think, is examples
physicsrob 23:02 good idea
taxilian 23:02 there are obviously still bits and pieces of functionality that need work, but 1.4 really got a lot of things
physicsrob 23:02 Yeah.. I should do a simple raw-bitmap drawing and bitblip example
that could be helpful
taxilian 23:02 I would still like to overhaul the graphics system to make things more unified across platforms, at least where possible
there will always be something =] but it's pretty mature at this point
physicsrob 23:02 hmm... so what irc network is this/
I used to hang out in a channel on efnet... but I feel like I heard that efnet is no more
taxilian 23:02 this is freenode
it's probably the most commonly used by open source projects
I used to get on here semi-often to ask questions for other projects, so it seemed appropriate to use for this
physicsrob 23:02 I'm kind of amazed IRC still exists
it's very useful, don't get me wrong
taxilian 23:02 but you know? there isn't anything else that can provide this
physicsrob 23:02 true
taxilian 23:02 it's actually kinda similar to ham radio in that way; a lot of people are shocked that ham radio is still around in "the age of cell phones", etc, but it's invaluable for many things that cell phones just can't cover
physicsrob 23:02 hehe
taxilian 23:02 it's "older technology", sure, but nothing has been able to replace it yet
physicsrob 23:02 taxilian: qrz?
are you a ham?
taxilian 23:02 kd7bbc
physicsrob 23:02 ne6u
taxilian 23:02 if you find a few minutes, you might enjoy that
in my "spare time" I run
physicsrob 23:02 hah!
how long has that been up?
taxilian 23:02 I am also a VE
physicsrob 23:02 I feel like I've used before, but I can't remember -- it's been a while
taxilian 23:02 I think I registered that domain last summer
physicsrob 23:02 oh okay, must not have
cool though
taxilian 23:02 I'm also a VE; my father-in-law runs the test sessions for this county
physicsrob 23:02 that's cool
taxilian 23:02 I've been helping him for a lot longer than he's been my father-in-law
physicsrob 23:02 I honestly have been out of it
couldn't have a tower during college
ruined my habit
taxilian 23:02 hehe. I have a tower that I put up last summer (got it from my grandfather, k7sg), but I don't have an antenna to put up yet
physicsrob 23:02 I don't think I've been on the air in like 5 years
taxilian 23:02 I've actually never really done HF
it's on my "to-do" list
physicsrob 23:02 it's the best!
that's actually why I got into it
I *love* hf
although with the sun being the way it is..
I was active during the last solar peak. It was *awesome*.
taxilian 23:02 hehe. I would like to get into it; it's just learning how, and then figuring out what frequencies will get out anywhere
hehe. yeah; it's pretty quiet lately, from what I hear
I use 2m mostly
physicsrob 23:02 I made contact with the amundsen scott station on the south pole from california using like 200 watts
highlight of my ham-career :)
taxilian 23:02 wow. not bad =]
physicsrob 23:02 there's not much you can do these days though, considering the inactivity of the sun
not that I've been trying
taxilian 23:02 have you ever heard of echolink?
physicsrob 23:02 sounds familiar, but I don't think so
taxilian 23:02 it's kinda cool; lets you link 2m repeaters over the internet
you can also connect to those repeaters over the 'net from a computer app… or even an iphone app
physicsrob 23:02 interesting
I would really like to get involved in digital modes if I had time
taxilian 23:02 yeah; I don't do as much as I'd like
no time
I give tests and help with a youth group
and that's already more than I have time to do well
taxilian 23:02 so I put a link to FireBreath here:
we'll see if it remains =]
physicsrob 23:02 hehe cool
did you add the entire paragraph on frameworks?
taxilian 23:02 yes
physicsrob 23:02 ah, I see.. who know
who knows