| 00:06.33 | CIA-33 | BRL-CAD: 03starseeker * r36171 10/brlcad/trunk/src/libdm/dm-ogl.c: Ooops, typos. |
| 00:09.25 | starseeker | man this ogl bug is subtle |
| 00:10.37 | louipc | ``Erik: but did the taliban lose 100 or 7? |
| 00:23.50 | starseeker | helllllp... |
| 00:29.58 | starseeker | how do I debug this thing??? |
| 00:32.45 | starseeker | can't believe it's UpdateTitle that results in sudden death... |
| 00:37.57 | starseeker | contemplates making a Tk window before calling ogl_open and "faking" a gui startup sequence |
| 00:38.15 | starseeker | q |
| 00:38.18 | starseeker | whoops |
| 03:58.06 | CIA-33 | BRL-CAD: 03brlcad * r36172 10/brlcad/trunk/ (include/bu.h src/libbu/globals.c): move the doxy docs for the globals declared extern in bu.h to bu.h |
| 11:51.23 | CIA-33 | BRL-CAD: 03davidloman * r36173 10/brlcad/trunk/src/proc-db/ (4 files in 2 dirs): initial work for a building/structure proc-db |
| 11:53.53 | d-lo | brlcad or anyone else: is there any existing functionality for tracking 'used' object names inside a database? (so as to prevent duplication) |
| 11:58.30 | brlcad | you do a db_lookup on the name |
| 11:58.39 | brlcad | LOOKUP_QUIET |
| 11:59.07 | d-lo | good deal, thanks. |
| 11:59.22 | brlcad | that is also a librt routine, not a write-only operation |
| 11:59.49 | d-lo | Also, is there any dire reason (beyong preference) to use C over C++? |
| 12:00.07 | brlcad | no such assertion |
| 12:01.04 | brlcad | tools can be c/c++, it's the libs and existing c apps that shouldn't mix |
| 12:01.25 | d-lo | okay. I only ask because I keep running into 'great things' that could be done with a pinch of OO. |
| 12:01.49 | d-lo | Que ``Erik with some snide "lisp rulz!!1!" comment :) |
| 12:01.52 | brlcad | turning a tool into a library routine would be problematic as c++ down the road if portaions are generalizable to a library, like libged |
| 12:03.29 | brlcad | you can do most OO constructs in c, at least most of the ones that are not just syntax shortcuts |
| 12:04.05 | d-lo | I was really looking at function overloading... its a pain not having it :) |
| 12:12.52 | brlcad | ah, you can get yourself polymorphism, but you have to do a little setup |
| 12:13.25 | d-lo | but how much is gained by 'doing a little setup' versus just using cpp? |
| 12:14.03 | brlcad | depends on the use |
| 12:14.24 | brlcad | it keeping it as a set of C routines that you can pull into a library is important, then might be worthwhile |
| 12:14.34 | brlcad | otherwise, just use c++ |
| 12:15.01 | d-lo | and the only reason why a cpp lib is bad is simply because all the others are c libs? |
| 12:15.16 | brlcad | notes "cpp" is rather confusing/misleading as it's the name of the "c pre processor" that expands #includes and such |
| 12:15.52 | brlcad | a cpp lib isn't bad |
| 12:16.07 | brlcad | mixing c++ into a C api is generally bad |
| 12:17.10 | d-lo | right, so if this make building thing turns into a lib (down the road), then wiring it into libged would prove difficult if libBuilding (or whatever) is c++ ? |
| 12:17.32 | brlcad | there are ABI portability issues with the libraries, linkage incompatibilities, other issues |
| 12:17.42 | brlcad | if it is fully contained as such, then not so bad |
| 12:18.22 | brlcad | it's more that you cannot expose it (at all) symbol-wise and public API |
| 12:19.28 | brlcad | e.g., openNURBS in librt -- not exposed, just an implementation detail under the hood so linkage still doesn't expose any c++ |
| 12:19.57 | d-lo | Hrm, so it it were all 'under the hood' and operated on a provided db_i only, then it would be safe? |
| 12:20.13 | brlcad | doable |
| 12:20.53 | brlcad | be more concerned that you've learned how to use one shiney hammer, so everything looks like it needs to be beaten with that hammer :) |
| 12:21.28 | brlcad | they're different mindsets with tradeoffs on both ends, good to be proficient in both :) |
| 12:21.36 | d-lo | huh? I am talking about how to best implement an idea. |
| 12:21.44 | brlcad | likewise |
| 12:21.59 | brlcad | the language has little to do with that |
| 12:23.17 | brlcad | it's more a procedural data-driven approach vs an object-oriented approach vs a functional approach, etc |
| 12:24.05 | brlcad | you can take most problems and implement them with any one of those three and there are lots of tradeoffs, rare that one is superbly dominating "better" |
| 12:24.11 | brlcad | usually more just one is more "familiar" |
| 12:24.35 | brlcad | just saying it's good to hone skills at least on the other two at some point as well |
| 12:25.26 | brlcad | otherwise everything starts looking like an OO problem and you miss the big picture, acquire bad habits, tend to over-architect, over-abstract, obfuscate, ... it's a balance |
| 12:34.22 | *** join/#brlcad Yoshi47 (n=jan@firewall.walinga.com) | |
| 13:18.21 | *** join/#brlcad d_rossberg (n=rossberg@BZ.BZFLAG.BZ) | |
| 13:21.05 | ``Erik | *readreadread* |
| 13:22.53 | ``Erik | exposing c++ shtuff in libraries gets into issues with different name mangling (there is no standard). G++ isn't (or wasn't) even self-consistent, so a library providing c++ entry points compiled with, say, gcc 4.1 couldn't be correctly linked to with gcc 4.2, it'd get missing symbols, iirc |
| 13:24.22 | ``Erik | heh, yes, people new to oo become "architect astronauts" and start designing things like... upstairs... :D *duck* |
| 13:44.07 | d-lo | tee hee. |
| 14:50.50 | *** join/#brlcad mafm (n=mafm@225.Red-83-45-72.dynamicIP.rima-tde.net) | |
| 15:22.56 | brlcad | howdy mafm m |
| 15:23.50 | mafm | hi there |
| 16:34.11 | *** join/#brlcad Elrohir (n=kvirc@p5B14D686.dip.t-dialin.net) | |
| 16:47.31 | *** join/#brlcad Ralith (n=ralith@d142-058-080-147.wireless.sfu.ca) | |
| 17:05.46 | *** join/#brlcad louipc (n=louipc@archlinux/trusteduser/louipc) | |
| 18:07.09 | *** join/#brlcad Ralith (n=ralith@d142-058-091-146.wireless.sfu.ca) | |
| 18:38.17 | ``Erik | hm, a darcs library was listed as a 'todo' back in june |
| 18:38.18 | CIA-33 | BRL-CAD: 03davidloman * r36174 10/brlcad/trunk/src/proc-db/ (makebuilding/makebuilding.c mkbuilding.h): Coninuting work on Makebuilding. Added mkbuilding.h |
| 18:44.48 | *** join/#brlcad Ralith (n=ralith@69.90.49.189) | |
| 19:15.33 | CIA-33 | BRL-CAD: 03brlcad * r36175 10/brlcad/trunk/src/util/pl-dm.c: vls strings use %V now instead of %S |
| 19:34.09 | CIA-33 | BRL-CAD: 03brlcad * r36176 10/brlcad/trunk/src/util/pl-dm.c: reorder function definitions so forward declarations are not necessary. |
| 20:02.10 | CIA-33 | BRL-CAD: 03starseeker * r36177 10/brlcad/trunk/src/libdm/dm-ogl.c: |
| 20:02.10 | CIA-33 | BRL-CAD: OK, temporarily comment out some of the dm-ogl code - this allows things to come |
| 20:02.11 | CIA-33 | BRL-CAD: up on the Mac, but (obviously) messes with the initialization of the gl context |
| 20:02.11 | CIA-33 | BRL-CAD: something fierce. Try to work out why these commands are upsetting things. |
| 20:25.46 | CIA-33 | BRL-CAD: 03brlcad * r36178 10/brlcad/trunk/src/util/pl-dm.c: more cleanup, quell slew of warnings, remove unused vars. |
| 20:39.13 | CIA-33 | BRL-CAD: 03brlcad * r36179 10/brlcad/trunk/src/util/pl-dm.c: enable the '-t o' option to open up an ogl display manager. sure enough, it crashes. |
| 20:40.12 | brlcad | what's interesting there is that there are no calls to make_current |
| 20:42.31 | ``Erik | hum, "reverse debugging" in the new gdb |
| 22:32.32 | Maloeran | Reverse debugging? Walking instructions backwards? |
| 22:32.37 | ``Erik | ayup |
| 22:32.48 | Maloeran | That would require an awful lot of memory, and be very slow |
| 22:33.48 | Maloeran | I guess that works to walk a couple instructions back, but you could never get very far anyway. You can't undo system calls and such |
| 22:33.51 | ``Erik | um, there's some lib that does it in a not totally sucky way (mebbe it saves state delta on nondeterministic ops) |
| 22:35.36 | ``Erik | http://news.ycombinator.com/item?id=868769 |
| 22:35.44 | Maloeran | gnome-terminal is pretty bad as a terminal. You flood it on stdout and it freezes or dies |
| 22:36.12 | ``Erik | yeah, it does checkpointing |
| 22:36.17 | Maloeran | Multi-inferior? What is that? |
| 22:36.43 | ``Erik | gnome-terminal and kterm are ass, xterm is ok, rxvt-devel was what I really used before hopping over to mac |
| 22:37.08 | ``Erik | "multi-inferior" sounds like some damn emacs weenie was allowed in the club, I d'no O.o :D |
| 22:37.41 | Maloeran | Yes, I'm always using rxvt. I put Ubuntu on the laptop and I sometimes use gnome-terminal for some reason, but it's pretty bad |
| 22:38.56 | ``Erik | screen eliminates all the pro's that gnome-terminal and kterm have for anyone who can operate a basic text editor... :) |
| 22:39.25 | ``Erik | and if you can't figure out "pico" or "nano", you don't belong opening a terminal emulator :D |
| 22:40.35 | ``Erik | http://dmtcp.sourceforge.net/ |
| 22:40.37 | Maloeran | This is quite bad when doing printf() debugging, and the terminal freezes or dies. When it freezes, it also freezes the program trying to write on the stdout pipe |
| 22:41.05 | Maloeran | And when it dies... You lose all programs launching from that terminal, that's just lovely |
| 22:41.10 | Maloeran | launched* |
| 22:41.36 | ``Erik | I don't remember the app crashing, but I do remember getting annoyed that the kernel compiles on linux took much longer on my 120mhz machine... |
| 22:42.27 | Maloeran | And it's slow, yes. Now imagine the terminal freezing or dying meaning the compilation stops trying to write on stdout |
| 22:42.46 | Maloeran | punches gnome-terminal some more |
| 22:46.04 | ``Erik | rxvt and be happy O.o |
| 22:47.03 | Maloeran | I know, I'm just amazed that some mainstream and common software can be so buggy, and it's just a terminal |
| 22:47.40 | ``Erik | probably one of those "good enough for the plebes, but all the REAL power-users know better" |
| 22:47.43 | ``Erik | :/ |
| 22:50.00 | ``Erik | (though having written a color terminal emulator using a gtk+ text widget before, it's trivial to make it sorta work and a real pain to make it fast) |
| 22:51.02 | Maloeran | Seems rather easy to make it fast... but I wouldn't use gtk+ for the rendering, I would play with X directly |
| 22:51.40 | ``Erik | scanning and handling control codes was the big stinker on mine, I think |
| 22:52.11 | Maloeran | Yes, that part sounds rather messy |
| 22:52.33 | ``Erik | and looking at my code, I've learned quite a few tricks in the last decade heh |
| 22:52.49 | Maloeran | Oh, you too? :) |
| 22:53.05 | Maloeran | Sometimes I'm almost glad I lost most of my >5 years old code |
| 22:53.57 | ``Erik | <-- has learned quite a coding few tricks in the last 26 years, intends to learn quite a few more coding tricks in the next 26 :) |
| 22:54.19 | Maloeran | Even updating the old Rayforce just a month ago... I rewrote all the multithreading, threw away a bunch of pthreads stuff to use x86/amd64 atomic instructions |
| 22:54.30 | Maloeran | Eheh |
| 22:54.50 | ``Erik | heh, I found a simd library for sbcl last week O.O |
| 22:55.12 | louipc | haha I'm a power user for using rxvt? |
| 22:55.13 | Maloeran | Pthreads still annoy me on many aspects, I'm so tempted to just use clone(), futex() and my atomic instructions |
| 22:55.17 | ``Erik | <-- grouses some more that rayforce isn't in BRL-CAD |
| 22:56.30 | Maloeran | The wake up process of pthreads, for threads blocked on condition variables doesn't allow any decent prioritization mechanism |
| 22:56.44 | ``Erik | louipc: more that a "power-user" wouldn't use gnome-terminal... |
| 22:56.46 | Maloeran | And the underlying futex() stuff is so much more flexible |
| 22:56.57 | ``Erik | upside down A's and backwards E's, man |
| 22:57.32 | ``Erik | mal: that's great until you want it to work on something other than linux, or the linux internals change (again) |
| 22:58.21 | Maloeran | You can't define scheduling priorities for different threads with pthreads, seriously how retarded is that? |
| 22:58.21 | ``Erik | the solaris libthread.so package was effin' INSANELY awesome, but coding to it means you don't leave solaris and hope they don't jerk the rug out from under you... |
| 22:58.52 | Maloeran | Mmhm :), I never played with it I'm afraid |
| 22:59.27 | Maloeran | I did some home-made threading on Linux, using the system calls, to see how flexible the underlying interface is... and that just made me more frustrated with Posix threads |
| 22:59.58 | ``Erik | the bsd thread mapping capability is awesome, too... ya get to choose if a thread is a userland thing, an OS 1:1 mapping, or an OS many:many mapping... without recompiling! :) |
| 23:00.43 | ``Erik | the linux kobj thingie was designed to do processes, then threading was bolted into it, and it was shaken around to do anything inbetween... *shrug* |
| 23:00.54 | Maloeran | Being able to wake up any thread *you* choose when signaling a condition variable or releasing a mutex, how come you can't do that with Posix threads? |
| 23:01.07 | ``Erik | when pthreads were new, the notion of threading was in its infancy and every vendor had tis own horrible attempt |
| 23:01.14 | Maloeran | Or definiting the "niceness" or scheduling priority of any thread, gez, that should be simple enough |
| 23:01.36 | ``Erik | what if the OS only supports userland threads? or doesn't have the notion of process priority? |
| 23:01.54 | Maloeran | Then disable the feature, or make it do nothing! But at least make it *possible*! |
| 23:02.06 | Maloeran | You can't have different scheduling priorities with Posix threads, you just can't |
| 23:02.06 | ``Erik | nt4 was made posix compatible, and it only had retarded round robin scheduling iirc |
| 23:02.38 | Maloeran | I don't mind if some features are not available on some platforms, but at least make them available on the platforms that do support them |
| 23:02.42 | louipc | in unix worse is better |
| 23:02.44 | louipc | that's why! |
| 23:03.38 | Maloeran | Erik, I'm seriously very close to just switch over to my own Linux-only threading stuff, with a pthread fallback for other OSes |
| 23:03.53 | ``Erik | srry, dude, their crystal ball was in the shop when pthreads were spec'd, I mean, the notion that a student could write a semi-usable *nix-like os and people would help him for shits and giggles woulda gotten you laughed out of the room |
| 23:04.23 | ``Erik | so predicting how linux does its nth generation threading... yknow.. |
| 23:05.20 | Maloeran | Erik, I'm just saying that pthreads do not expose a bunch of very fundamental features for threading. I know some OSes may not support them |
| 23:05.40 | ``Erik | yeah, I hear ya, dude... I'm saying that pthreads predates those fundamental features :D |
| 23:06.02 | Maloeran | Well if they aren't going to update the library, then we need something new |
| 23:06.20 | louipc | yep |
| 23:06.29 | Maloeran | I think I'll just switch over to my Linux threading stuff, with a pthread fallback |
| 23:08.10 | ``Erik | would rather have cpu affinity control than priority control for threads *shrug* :) |
| 23:08.14 | Maloeran | How could not imagine that someone may want to define different scheduling priorities for different threads. No, they had to enforce that *all* threads *MUST* share the same scheduling priority. Why? Why?... |
| 23:08.33 | ``Erik | hm |
| 23:08.44 | ``Erik | what if I renice a multithreaded program to 20 |
| 23:08.45 | Maloeran | There's cpu affinity stuff, although it's a different library |
| 23:09.04 | Maloeran | All the threads share the same niceness, says the specification |
| 23:09.05 | ``Erik | and I really fucking mean make every thread go to 20, I don't want the program to decide if it's going to listen |
| 23:09.08 | ``Erik | ? |
| 23:09.20 | ``Erik | ok, so posix does that for me, what about futex? |
| 23:09.26 | Maloeran | What if the program has some low priority and high priority threads? |
| 23:09.55 | louipc | well there should be a signal for it, non? |
| 23:10.08 | Maloeran | futex() is the kernel-level thing for mutexes and condition variables, but if you write your own threading stuff, you can define the scheduling of threads any way you want it |
| 23:10.14 | ``Erik | sleep(0); forces a yield, essentually giving you a low priority thread (in a semi-cooperative fashion) |
| 23:10.38 | ``Erik | um |
| 23:10.49 | ``Erik | I have a book somewhere that talks about the low level threading crap |
| 23:10.50 | Maloeran | What if you have a bunch of threads and you wake to wake up a specific one, which must run right *now*? |
| 23:10.52 | ``Erik | wonder where I put it |
| 23:11.11 | Maloeran | Signaling it and sleep(0) may or may not make it actually run |
| 23:11.22 | ``Erik | mal: then your program is written really poorly :D *duck* |
| 23:11.23 | louipc | sounds like fun problems |
| 23:11.42 | Maloeran | Erik, that's a very common case of feeder/consumer threads |
| 23:12.47 | ``Erik | doesn't remember needing to wake it up "right now" doing those things, putting them back into the run queue was sufficient O.o |
| 23:13.50 | Maloeran | Typical example : on a 8 cores machine, with 8 consumer threads, you predict the threads will begin to starve soon and the feeder thread must absolutely run very soon |
| 23:14.12 | ``Erik | "add job; inc jobs available;" | "Icanhasawurkunit? tkae; dec jobs avail" |
| 23:14.20 | Maloeran | And posix threads just won't you do that, you can merely try to wake it up and sleep() a few threads in the hope that it will get to run |
| 23:14.29 | ``Erik | heh |
| 23:14.37 | Maloeran | won't let* you do that |
| 23:15.00 | ``Erik | 8 threads/procs on 8 cores tends to cause OTHER ugly problems, like resource lockstepping |
| 23:15.27 | ``Erik | <-- likes to do 2n-1 for things that touch single interface resources like disk drives |
| 23:15.47 | Maloeran | That thread prioritization problem should not exist, because it doesn't exist when you use a decent low-level threading interface ( like futex() ) |
| 23:16.22 | ``Erik | <-- more apt to think that the problem doesn't... actually... exist... :D *duck* |
| 23:16.43 | Maloeran | Especially since kernels sometimes try to keep the same threads on the same core, and the kernel may have decided that your very important feeder thread must run on core 5, so it's just not going to wake up for a while |
| 23:16.48 | Maloeran | And threads end up starving |
| 23:18.01 | Maloeran | I don't know, it's a matter of flexibility and control... and pthreads don't give you much in both areas |
| 23:18.50 | ``Erik | *shrug* I've never had issue cooking all 8 cores (or 256) until something using an ugly slow resource (disks, network, etc) come into play |
| 23:19.51 | ``Erik | take, for example, BRL-CAD's rt, it can smoke up 1024 cpu's n/p even writing to disk if it buffers right, but it uses maybe one worth in mged due to network silliness with giantlock and shtuff |
| 23:21.07 | Maloeran | Sure sure, but I'm not tempted to assume the design is optimal, in comparison to what could be achieved with more control and flexibility |
| 23:22.26 | ``Erik | I d'no, dude, I have a feeling that you might be wayyyy down the path of diminishing returns |
| 23:23.01 | Maloeran | For one thing, atomic instructions instead of mutexes or spin locks make a huge difference |
| 23:23.20 | Maloeran | ( Okay, it's not portable, but when you got them... ) |
| 23:23.22 | ``Erik | yeah, I can see that one easily |
| 23:23.37 | ``Erik | far less cycles and eliminates branches |
| 23:24.10 | ``Erik | but inventing a threading system to keep a producer hot? O.o |
| 23:24.11 | Maloeran | More than that, you avoid the constant read and write to shared memory lines |
| 23:24.49 | Maloeran | It's not just for that, I was pointing out one example but pthreads are limited on many aspects |
| 23:25.09 | ``Erik | sure, but how much do those aspects really matter? :D just throwin' it out there |
| 23:25.43 | Maloeran | Meh :), you add them all up and I think it matters |
| 23:26.13 | ``Erik | I'd be curious as to your post mortem analysis :) |
| 23:26.19 | Maloeran | Atomic instructions, thread scheduling from mutexes or condition variables, CPU affinity, per-thread niceness/priority, etc. |
| 23:28.34 | Maloeran | The feeder thing actually was a problem in Rayforce when rendering something simple, it goes up to 100-500 frames per second and the kernel too often tries to maintain the "feeder" thread on the same CPU core instead of waking it up right now when needed |
| 23:28.39 | ``Erik | pthread_attr_setschedparam() ? |
| 23:28.50 | Maloeran | So unless you buffer up a lot of work ahead, I mean several frames, threads can starve |
| 23:29.13 | Maloeran | Keep on reading to see if you can actually do anything with that |
| 23:29.47 | Maloeran | You can set FIFO or round-robbing scheduling, but you can't define a thread priority for normal thread scheduling |
| 23:31.08 | ``Erik | that's not what the man page says O>o |
| 23:32.52 | Maloeran | You should try it out, to have a nice surprise on sched_priority... It requires root to be modified! |
| 23:33.50 | Maloeran | And it doesn't work for SCHED_OTHER, which is the normal out-of-order threading |
| 23:34.01 | ``Erik | sounds like you attempted to increase the priority... that's against the fundamental security model, only root can increase priority, users can only reduce priority (increase nice) |
| 23:34.45 | Maloeran | Niceness is shared by all Posix threads |
| 23:35.02 | Maloeran | And sched_priority has no effect for SCHED_OTHER scheduling |
| 23:35.44 | Maloeran | ( While SCHED_RR and such requires root ) |
| 23:40.36 | ``Erik | *shrug* |
| 23:42.33 | Maloeran | Anyway... as you said, it was designed too long ago, and it needs an urgent update or rewrite |
| 23:43.18 | ``Erik | (I'd find it amusing if you end up re-inventing fork() ) |
| 23:44.29 | Maloeran | It's not quite fork(), threads use the clone() system call, so does fork() of course |
| 23:44.35 | louipc | that would be cool |
| 23:44.45 | Maloeran | clone() is a very flexible little system call |
| 23:45.15 | louipc | I heard it was stolen from plan9 or something |