--- Log opened Sun Apr 08 00:00:33 2012 |
00:06 | | AnnoDomini [annodomini@Nightstar-4f367c0c.adsl.tpnet.pl] has quit [[NS] Quit: Zzz.] |
00:09 | | Anna is now known as rms |
00:42 | | Orthia is now known as Reiver |
01:09 | <&McMartin> | Oh man |
01:09 | <&McMartin> | I can't tell if this is the best idea ever or the worst idea ever |
01:10 | <@ToxicFrog> | Well don't leave us hanging |
01:10 | < celticminstrel> | Clearly it's both. |
01:11 | <&McMartin> | So, I'm writing a code generator for the 6502 chip, a CISC architecture more or less. |
01:11 | <&McMartin> | I've gotten it down to three-address code so far, so you've got a destination and two sources, each either an absolute or relative address. |
01:11 | <&McMartin> | Absolute and relative addresses, of course, have different instructions. |
01:11 | <&McMartin> | While I could force-emulate RISCy stuff that's pretty bulky |
01:11 | <&McMartin> | But I'm writing this in ML. |
01:12 | <&McMartin> | So I can do a switch on the three-address instruction with something like... |
01:12 | <&McMartin> | Mov (Absolute dest, Indexed src) -> (some indexed LDA instructions and absolute STA instructions) |
01:13 | <&McMartin> | Mov (Indexed dest, Indexed src) -> (indexed both, with the index register shared) |
01:13 | <&McMartin> | Mov (Indexed (dest, 0), Indexed (src, i)) -> (indexed both, but with the index register *not* shared because this is one case on the 6502 where they can be distinct) |
01:13 | <&McMartin> | As switch targets |
01:14 | <&McMartin> | Basically, use ML's function call pattern matcher to implement register allocation |
01:26 | <&McMartin> | Hm, perhaps this is actually a fairly blase technique, simply made simpler by ML's function call mechanism. |
01:26 | <&McMartin> | This looks extremely similar to the Maximal Munch algorithm. |
01:50 | | gnolam [lenin@Nightstar-0fcc80a0.tbcn.telia.com] has joined #code |
01:54 | | * McMartin makes Print be a compiler intrinsic, feels a tiny piece of his soul die. |
01:54 | <&McMartin> | Kind of unavoidable when your source language is Pascal though. |
01:55 | <&McMartin> | Hmm. I can improve this if I break quads into classes. |
01:57 | <&Derakon> | Are you making your own language again? |
01:59 | < Reiver> | So, SQL |
01:59 | < Reiver> | I do so much of it now |
01:59 | < Reiver> | ;_; |
02:00 | < Reiver> | Regardless: In Oracle, at least, rank() PARTITION BY (foo order by desc) is /so much faster/ than MAX it's not even funny |
02:00 | < Reiver> | Is there a similar stunt for doing SUM()? |
02:05 | < Rhamphoryncus> | if (amount < 0) { |
02:05 | < Rhamphoryncus> | amount = -amount; |
02:05 | < Rhamphoryncus> | str++; |
02:05 | < Rhamphoryncus> | } |
02:05 | < Rhamphoryncus> | It's obvious what that does.. but that's not what it does :P |
02:09 | | Kindamoody[zZz] is now known as Kindamoody |
02:13 | | gnolam [lenin@Nightstar-0fcc80a0.tbcn.telia.com] has quit [[NS] Quit: Gone] |
02:14 | < Rhamphoryncus> | aaaugh.. and make runes a *lot* faster if I quite the program currently running in that shell first :P |
02:15 | | * Tamber adds a few more ccs of mouse blood. |
02:17 | < Vornotron> | what the fuck did you just do, rham |
02:17 | < Rhamphoryncus> | Vornotron: switched to console window, typed make and hit enter |
02:17 | < Vornotron> | No, the code snippet |
02:17 | < Rhamphoryncus> | The program was still running from my last test, and it's not a console app, so it just sat there |
02:17 | < Rhamphoryncus> | ah |
02:17 | < Vornotron> | And what language are you in for that, so I know what str is doing here |
02:17 | < Rhamphoryncus> | str is a StringID in openttd |
02:18 | < Rhamphoryncus> | So it's an index number referencing a format string |
02:18 | < Vornotron> | Oh shit that's just evil |
02:19 | < Rhamphoryncus> | It goes one better: the *default* is negative. After incrementing it becomes positive |
02:19 | < Vornotron> | So the next string I imagine would give you your format string for negative value |
02:19 | < Vornotron> | s |
02:19 | < Rhamphoryncus> | Some confusion about profit vs cost. The end result is correct, but it's a tad hard to make sense of |
02:20 | < Vornotron> | So you have something like ["Profit: ${amount}", "Loss: ${amount}"] |
02:20 | < Vornotron> | or vice versa or something |
02:21 | < Vornotron> | And the amount I would pray is being passed in by value. |
02:21 | < Rhamphoryncus> | By value, yes |
02:21 | < Vornotron> | Evil, of course, but |
02:22 | < Rhamphoryncus> | Haw. Replaced the ascii - with a unicode - in the english_US.txt and the whole GUI switched to the internationalized renderer XD |
02:24 | < Rhamphoryncus> | Which means unantialised truetype font rather than hand-tweaked bitmap font |
02:25 | < Vornotron> | D: |
02:25 | < Vornotron> | Reiver: yay, SQL |
02:26 | < Rhamphoryncus> | related: if any of you feel you have software renderer skillz I invite you to help me improve performance of the 32bpp renderer, so the 8bpp can ultimately be retired |
02:26 | < Vornotron> | Der: McM is actually building a 6502 compiler for a subset of Pascal |
02:26 | < Vornotron> | I have no software rendering skillz |
02:29 | <&Derakon> | My software rendering skills generally consist of "hey, let's hand this off to a library." |
02:29 | <@ToxicFrog> | Ditto. |
02:32 | <&McMartin> | I wrote my own blitter in 16-bit x86 assembler back in the day, never again |
02:33 | <&McMartin> | That said |
02:33 | <&McMartin> | If the 32bpp rendererer is slow look into using MMX/SSE extensions >_> |
02:34 | < Rhamphoryncus> | It's not slow. It's just slower |
02:34 | < Rhamphoryncus> | And the whole game is pushed to the limit already |
02:34 | <&McMartin> | It's always going to be slower unless it's something you do in hardware |
02:34 | <&McMartin> | There's by definition four times the data |
02:35 | < Rhamphoryncus> | Sure, but I'm hoping to find ways to cheat :) |
02:35 | <&McMartin> | SIMD instructions are basically your only hope. |
02:35 | < Rhamphoryncus> | The ways of doing transparency and company colours for instance. They need not be the same |
02:35 | <&McMartin> | Palette swapping is always a pain in the ass |
02:36 | <&McMartin> | Because, well, 32bpp isn't paletted |
02:36 | <&Derakon> | Why not use hardware rendering, anyway? |
02:36 | <&McMartin> | Assuming you aren't already, cache the "palette-swapped" version in memory as a separate sprite, and reuse it. |
02:37 | <&McMartin> | For transparency, you're 32bpp, that means you have an alpha channel |
02:37 | < Rhamphoryncus> | My instinct is to have a greyscale overlay which gets the company colour applied to it |
02:37 | <&McMartin> | That meanas you can tell the hardware to do it -_- |
02:37 | < Rhamphoryncus> | Derakon: are you volunteering? |
02:37 | <&McMartin> | Still, you don't want to do that every frame. |
02:37 | <&McMartin> | Rhamphoryncus: So, what library are you using here |
02:37 | <&McMartin> | Because in SDL using hardware rendering means you replace SDL_SWSURFACE in SDLCreateRGBSurfaceFrom with SDL_HWSURFACE. |
02:38 | < Rhamphoryncus> | SDL is the main one, but I see others |
02:38 | < Rhamphoryncus> | SDL on macs is buggy (nobody is maintaining the mac port of openttd) |
02:39 | <&McMartin> | What is openttd's license? |
02:39 | < Rhamphoryncus> | GPL |
02:39 | <&McMartin> | You may then wish to take a look at UQM - also GPL - and its software scaling code. |
02:40 | <&McMartin> | There conceivably may be something there you can use. |
02:40 | <&McMartin> | The cheats it uses for removing paletting are: |
02:40 | < Rhamphoryncus> | Scaling already has a cache |
02:40 | <&McMartin> | OK, so, you should consider also letting paletting have a cache. |
02:41 | < Rhamphoryncus> | For building and water animation I'd like to figure out the smallest subset that changes, then produce an ordinary sequence of sprites that covers it instead |
02:41 | <&McMartin> | The thing is, our scaling code also makes use of machine extensions to let it do block/blit operations faster. |
02:41 | <&McMartin> | You might get some use out of that |
02:42 | < Rhamphoryncus> | Scaling is also powers of 2 always |
02:42 | <&McMartin> | If you're doing standard double-buffering, you do not get a lot of benefit from making your update rect smaller, as you must redraw the whole screen every frame anyway |
02:42 | < Rhamphoryncus> | I believe there's actually double double buffering, heh |
02:43 | <&McMartin> | If you aren't (UQM with its 386/DOS heritage doesn't), it can make a difference |
02:43 | <&McMartin> | But it's honestly not worth the headache - the solution there is "get a better graphics card that can do 1080p double-buffered, yeesh"~ |
02:43 | < Rhamphoryncus> | The game has its own dirty rects, but some of the palette rotations wait until later (and are fullscreen) |
02:44 | < Rhamphoryncus> | Come to think of it the small subset thing should only apply to buildings. Water will fill the entire sprite regardless :P |
02:46 | < Rhamphoryncus> | But yeah, I should really figure out what's necessary to punt it to hardware |
02:47 | <@ToxicFrog> | Well, as you said, it's using SDL |
02:50 | < Rhamphoryncus> | Yeah, but don't bet on any of the sprites being in SDL ;) |
02:50 | <@ToxicFrog> | So (a) use SDL_HWSURFACE|SDL_DOUBLEBUF - I think - when initializing, cache all the sprites in SDL surfaces, stop faffing about with dirty rects |
02:51 | <&McMartin> | If you've also got SDL_ANYFORMAT in the screen - which, honestly, you probably should - you can also cache the sprites after applying SDL_DisplayFormatAlpha to them. |
02:52 | <@ToxicFrog> | I say "I think" because the online SDL documentation has gone to shit since last time I used it |
02:52 | < Rhamphoryncus> | So you figure around 100 million sprites (when zoomed out) should be fine? |
02:52 | <&McMartin> | That will give you impressive upspeed even if you stick with software rendering. |
02:53 | <&McMartin> | You should never be rendering more than about 2,073,600 sprites at once. |
02:53 | < Rhamphoryncus> | heh |
02:53 | <&McMartin> | If you *are*, you have deeper problems than your blitter. |
02:53 | < Rhamphoryncus> | Map is 4096x4096 |
02:54 | <&McMartin> | So: (a) that is 16,777,216 tiles, and (b) on a 1080p monitor when zoomed out to show the whole thing you are mapping multiple tiles to a single pixel |
02:54 | < Rhamphoryncus> | heh |
02:55 | <&McMartin> | You *should not be using sprites at that point*, no~ |
02:55 | < Rhamphoryncus> | Okay, I'm full of it. Even fully zoomed out it only hits about 500x500 |
02:56 | < Rhamphoryncus> | Which drops it back under 2 mil |
02:56 | <&McMartin> | Note that *at* 2 mil you should consider building a framebuffer by hand and filling it with stuff instead of relying on blitting tiles at extreme zoom; at that point you're treating the tiles like pixels. |
02:57 | <@ToxicFrog> | Honestly I'm shocked OTTD isn't already using hardware SDL surfaces for everything. |
02:58 | <&McMartin> | TF: Well, some of the HW SDL stuff is shit |
02:58 | < Rhamphoryncus> | ToxicFrog: I'm assuming it's too entrenched. Also, it'd break ports. |
02:58 | <&McMartin> | If you aren't premapping everything to DisplayFormat it's pretty bad, for instance |
02:58 | <@ToxicFrog> | Rhamphoryncus: what is it ported to that doesn't have SDL? |
02:58 | <&McMartin> | UQM, IIRC, moved away from HW surfaces because it was cheaper overall to just pixel-convert every frame at the last step (which happens internally) and use 32-bit algorithms on SW surfaces on every step before that. |
02:59 | < Rhamphoryncus> | The OSX port of openttd is unmaintained and buggy when using SDL |
03:00 | < Rhamphoryncus> | Just did some counting. Tiles are 64x32 normally, 256x128 at max zoom, 8x4 at min zoom |
03:01 | < Rhamphoryncus> | Which gives 55125 on my screen at min zoom |
03:01 | <&McMartin> | How many kinds of tiles are there? |
03:01 | < Rhamphoryncus> | of sprites you mean? |
03:02 | <&McMartin> | Right |
03:02 | <&McMartin> | Because that's really what's going to influence memory usage |
03:02 | <&McMartin> | And, in particular, if you've got SW rendering, being able to fit the whole screen, and all the tiles, into cache at once will be an Instant Win Button |
03:03 | < Rhamphoryncus> | There's a ton and more can be downloaded at runtime |
03:03 | <&McMartin> | Not total; at any given time |
03:03 | < Rhamphoryncus> | I don't have a real count but I'm seeing index numbers of at least 21000 |
03:03 | < celticminstrel> | I want object-oriented SDL. :| |
03:03 | <&McMartin> | Still not my question |
03:03 | < Rhamphoryncus> | When zoomed out? Shitloads :) |
03:03 | <&McMartin> | The point is |
03:03 | < Rhamphoryncus> | I'll try to get you a better estimate |
03:04 | <&McMartin> | If you're drawing the same tile 2 million times this is way the fuck faster than drawing 2 million different tiles. |
03:04 | <&McMartin> | Because of memory locality speedups in the hardware itself. |
03:05 | < Rhamphoryncus> | Many of the ground/water/tree tiles may get reused, but town building/station/vehicle tiles are going to have a lot less reuse |
03:05 | <&McMartin> | Hmm |
03:06 | <&McMartin> | OK, the only real hint I can give is "make sure that all of the SDL_Surfaces that you're using to represent sprites were all created with identical flags, and/or were all created by the DisplayFormatAlpha function" |
03:06 | < Rhamphoryncus> | A single tile can have 4 trees on it, which of course overlap other tiles |
03:06 | < Rhamphoryncus> | Yeah, don't make SDL convert formats on the fly |
03:07 | <&McMartin> | UQM found that the best way to handle that if you're also doing hand-processing of the sprites was to make all the sprite surfaces be software surfaces, do all our work there, then blit it to a screen-sized surface with the same flags |
03:07 | <&McMartin> | And then blit *that* to the un-double-buffered screen surface, which was native. |
03:08 | | * Rhamphoryncus nods |
03:08 | <&McMartin> | Since you're using double buffering, I *believe* you can save that second step by simply not passing SDL_ANYFORMAT to the initial CreateVideoSurface or whatever it's called |
03:08 | <&McMartin> | And then the conversion happens when you call SDL_Flip() |
03:09 | < Rhamphoryncus> | So use hand-written 8-bit software code for sprite blitting, then pass the result to SDL to convert to native resolution? |
03:09 | | * Derakon returns from piano practice, notes that it was not terribly difficult to switch Jetblade from using pure SDL to using SDL with OpenGL rendering, which was noticeably faster. |
03:09 | <&McMartin> | If the best "native" form you have is 8-bit, then yes; otherwise rely on SDL_BlitSurface |
03:09 | <&McMartin> | UQM deliberately moved away from 8-bit formats. |
03:10 | <&Derakon> | Plus you can do things like stuff chunks of the map into display lists and just render the display list instead of rendering every little thing in it. |
03:10 | <&McMartin> | And had to do cached-palette-swap stuff similar to scaling tricks to get acceptable performance. |
03:10 | < Rhamphoryncus> | I bet UQM has a more openminded community :/ |
03:10 | <&Derakon> | UQM has a community that is very thankful that the game exists at all. |
03:11 | < Rhamphoryncus> | yeah |
03:12 | < Rhamphoryncus> | Okay, took a look at one of openttdcoop's thrasher maps and the tiles themselves are usually 2 sprites each, but due to overlap the average rendered on each is around 5 |
03:12 | < Rhamphoryncus> | That's a city |
03:12 | <&Derakon> | OpenTTD uses an isomorphic perspective, right? |
03:12 | <&Derakon> | Like, 45? tilt/rotate? |
03:13 | < Rhamphoryncus> | Technically dimetric |
03:13 | < Rhamphoryncus> | a 64x32 diamond representing a square |
03:13 | <@ToxicFrog> | Rhamphoryncus: hang on, is the implication here that openttd currently uses 8-bit internally and on disk and upconverts to 32-bit when blitting to the screen? |
03:14 | < Rhamphoryncus> | ToxicFrog: yes |
03:14 | < Rhamphoryncus> | There is a 32bpp renderer, it's just significantly slower |
03:15 | <@ToxicFrog> | :/ |
03:15 | < Rhamphoryncus> | There's almost no art using 32bpp, company colours are limited to the predefined ones from 8bpp, the GUI is pretty ugly even with antialiasing from 32bpp |
03:17 | < Rhamphoryncus> | Oh nice, the sprite alignment debugger doesn't show duplicates, so I may have underestimated the number of sprites |
03:18 | | * ToxicFrog gets his gonk on |
03:18 | < Rhamphoryncus> | If you're not including recoloured buildings then the number of unique sprites is probably.. less than a thousand? Just a guess. |
03:18 | < Vornotron> | yaw 45 pitch -30 |
03:18 | < Vornotron> | \is OTTD and most "isometric" games |
03:18 | <&Derakon> | I'm just wondering how hard it would be to replicate that perspective in actual 3D. |
03:19 | < Rhamphoryncus> | Derakon: well, you'd need an entirely new game |
03:19 | <&Derakon> | Probably pretty hard, sadly. All the art would need re-doing. |
03:19 | < celticminstrel> | Yeah, because suddenly it's square instead of diamond. |
03:19 | <@ToxicFrog> | Derakon: engine-wise? Quite easily. Art-wise? ooooh boy. |
03:19 | <&Derakon> | Yeah, the reason I was wondering about it was because it would make the engine simpler. |
03:19 | < Rhamphoryncus> | I've seen plenty of bitching about CG. Sure, you get the shape in CG, but the textures? That's *hard* |
03:20 | < Rhamphoryncus> | openttd? Simpler? Yah right :P |
03:21 | < Rhamphoryncus> | It'd allow curves and inclines that don't look like shit and tracks/roads along more alignments. |
03:22 | <@ToxicFrog> | That said, one of the things I like about openttd is that it will run just fine even on underpowered system with no 3d acceleration |
03:22 | <@ToxicFrog> | Such as my laptop |
03:24 | < Rhamphoryncus> | aye |
03:25 | < Rhamphoryncus> | Hrm.. only animation I can think of that covers the entire screen is the water.. and that could be turned off for such computers |
03:29 | < Vornotron> | Der: well, the perspective is sumply orthographic with a fixed angle. |
03:29 | < Vornotron> | I mean I can and have hacked together such an angle, specifically for OTTD, in about twenty minutes, and I know nothing about OpenGL |
03:30 | <&Derakon> | Right. |
03:30 | < Vornotron> | It would honestly be harder to make an actual perspective camera, because once your camera hits horizon you've unbounded your performance requirements |
03:31 | <&Derakon> | Fog! |
03:32 | < Rhamphoryncus> | eww fog :P |
03:33 | | Attilla [Obsolete@Nightstar-acbd4833.as43234.net] has quit [Ping timeout: 121 seconds] |
03:35 | <@ToxicFrog> | Rhamphoryncus: nothing to do with animation; I mean that if openttd used 3d rendering -at all- I would not be able to play it on my laptop. |
03:36 | < Rhamphoryncus> | ToxicFrog: I'm thinking of what compromises could be done with a 32bpp software renderer for such a computer |
03:38 | | Noah [noah@Nightstar-c74807e7.pools.spcsdns.net] has joined #code |
04:00 | | symbol [symbol@Nightstar-58fa4b17.cable.teksavvy.com] has quit [Operation timed out] |
04:02 | | symbol [symbol@2D9871.E3DD81.3BE9E7.8E3843] has joined #code |
05:34 | | * Derakon arghs, once again runs into the problem where the module that containers class Foo is named "foo", which creates naming problems. |
05:34 | <&Derakon> | E.g. I have prompt.py, which contains the Prompt class, as well as a few related enums. |
05:34 | <&Derakon> | So I do def foo(prompt): if prompt.displayType == prompt.YESNO... |
05:34 | <&Derakon> | And of course that gets me an error because the instance "prompt" has no YESNO attribute. |
05:39 | < Noah> | foo.foo? |
05:39 | < Noah> | or from foo import *? |
05:40 | <&Derakon> | I hate "import *" |
05:40 | < Noah> | me too, but would it work here? |
05:40 | <&Derakon> | In the sense that I'd have "if prompt.displayType == YESNO" instead, yes. |
05:41 | < Noah> | Hmm |
05:42 | | symbol [symbol@2D9871.E3DD81.3BE9E7.8E3843] has quit [Ping timeout: 121 seconds] |
05:42 | < Noah> | I'm still thinking about how I'm going to write my python script for creating .desktop launcher in linux given arguments of a file |
05:45 | < Noah> | I'm not sure if I want it to search the snapshop directory automatically, and give me the option of creating a launcher for a rom file using mednafen with the snap as the icon based on what snapshots I actually have, or if I want to pass it the arguements of a rom file, and have it search for a snap, and if none, launch mednafen with the given rom and let me take one, then create the .desktop |
05:56 | | Reaper [Z@2C3C9C.B2A300.F245DE.859909] has quit [Ping timeout: 121 seconds] |
06:13 | | celticminstrel [celticminst@Nightstar-5d22ab1d.cable.rogers.com] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!] |
06:21 | | Eri [Eri@Nightstar-3e5deec3.gv.shawcable.net] has quit [Ping timeout: 121 seconds] |
06:30 | | * Derakon does some refactoring to Pyrel, determines that his drawing code is horribly unoptimized. |
06:30 | <&Derakon> | Increasing the number of tiles in view slows things down fast. |
06:31 | <&Derakon> | Which is kinda sad since I'm just drawing ASCII tiles, but is I guess a consequence of the container system. |
06:31 | <&Derakon> | (I have to do a set lookup for each tile I display. This can probably be optimized) |
06:55 | | Derakon is now known as Derakon[AFK] |
06:56 | | himi [fow035@Nightstar-5d05bada.internode.on.net] has quit [Ping timeout: 121 seconds] |
06:58 | | himi [fow035@Nightstar-5d05bada.internode.on.net] has joined #code |
06:58 | | mode/#code [+o himi] by ChanServ |
06:58 | | Reaper [Z@Nightstar-3602cf5a.cust.comxnet.dk] has joined #code |
07:31 | | AnnoDomini [annodomini@Nightstar-4f367c0c.adsl.tpnet.pl] has joined #code |
07:31 | | mode/#code [+o AnnoDomini] by ChanServ |
07:43 | | eckse [eckse@Nightstar-4690640a.dsl.sentex.ca] has quit [Client closed the connection] |
07:54 | | Eri [Eri@Nightstar-3e5deec3.gv.shawcable.net] has joined #code |
08:09 | | Reaper [Z@Nightstar-3602cf5a.cust.comxnet.dk] has quit [Ping timeout: 121 seconds] |
09:32 | | Attilla [Obsolete@Nightstar-acbd4833.as43234.net] has joined #code |
09:37 | | Attilla [Obsolete@Nightstar-acbd4833.as43234.net] has quit [Ping timeout: 121 seconds] |
11:23 | | AnnoDomini [annodomini@Nightstar-4f367c0c.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds] |
11:28 | | AnnoDomini [annodomini@Nightstar-9908b807.adsl.tpnet.pl] has joined #code |
11:28 | | mode/#code [+o AnnoDomini] by ChanServ |
11:53 | | Attilla [Obsolete@Nightstar-acbd4833.as43234.net] has joined #code |
12:06 | | AnnoDomini [annodomini@Nightstar-9908b807.adsl.tpnet.pl] has quit [Operation timed out] |
12:09 | | AnnoDomini [annodomini@Nightstar-1ea57b75.adsl.tpnet.pl] has joined #code |
12:09 | | mode/#code [+o AnnoDomini] by ChanServ |
12:29 | | AnnoDomini [annodomini@Nightstar-1ea57b75.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds] |
12:37 | | AnnoDomini [annodomini@Nightstar-f70895d2.adsl.tpnet.pl] has joined #code |
12:37 | | mode/#code [+o AnnoDomini] by ChanServ |
13:11 | | Rhamphoryncus [rhamph@Nightstar-5697f7e2.abhsia.telus.net] has quit [Client exited] |
14:23 | <@ToxicFrog> | Ok. The MET value in the file is ignored when loading; it is recalculated as (UT - LCT) on every load. |
14:24 | <@ToxicFrog> | Changing LCT won't change the orbit. Making LCT > UT just causes the mission timer to count down instead of up. |
14:24 | <@ToxicFrog> | On the other hand, changing UT -will- affect the orbit. |
14:25 | <@ToxicFrog> | Ok. Looks like EPH == epoch == "timestamp at which this ship entered the orbit" |
14:26 | <@ToxicFrog> | So - in order for the orbital positioning to be consistent across saves - we need to store EPH as the difference between UT and EPH. |
14:26 | <@ToxicFrog> | ...what happens if EPH is negative? |
14:27 | <@Tamber> | Aliens. |
14:27 | <@ToxicFrog> | Still works fine. Alright. |
14:28 | <@ToxicFrog> | So. The server stores UT=0, and foreach flight, EPH and LCT as the difference between the original values and the UT of the game they came from. |
14:28 | <@ToxicFrog> | (these should, in a normal game, both be negative) |
14:28 | <@ToxicFrog> | When merging them into a client game, EPH = UT + EPH, and likewise for LCT. |
14:29 | <@ToxicFrog> | MET we can ignore except as a way of resolving conflicts, since it's recalculated by the game on load anyways. |
14:49 | <@ToxicFrog> | Wait, shit. |
14:49 | <@ToxicFrog> | LCT is currently used for deduplication. |
14:49 | <@ToxicFrog> | I can't change LCT without breaking that. |
14:50 | <@ToxicFrog> | But if I don't change LCT, the MET changes, and I'm using that to resolve conflicts. |
14:50 | <@ToxicFrog> | Shit. |
14:56 | | gnolam [lenin@Nightstar-0fcc80a0.tbcn.telia.com] has joined #code |
15:08 | | Reaper [Z@Nightstar-3602cf5a.cust.comxnet.dk] has joined #code |
15:26 | | gnolam [lenin@Nightstar-0fcc80a0.tbcn.telia.com] has quit [Ping timeout: 121 seconds] |
15:32 | | celticminstrel [celticminst@Nightstar-5d22ab1d.cable.rogers.com] has joined #code |
15:39 | <@ToxicFrog> | Oh, wait. The LCT changes, but the LCT delta with respect to UT doesn't. |
15:58 | | symbol [symbol@Nightstar-58fa4b17.cable.teksavvy.com] has joined #code |
16:08 | | Noah [noah@Nightstar-c74807e7.pools.spcsdns.net] has quit [Ping timeout: 121 seconds] |
16:09 | | Noah [noah@Nightstar-c74807e7.pools.spcsdns.net] has joined #code |
16:11 | | gnolam [lenin@Nightstar-0fcc80a0.tbcn.telia.com] has joined #code |
16:12 | <@ToxicFrog> | Agh damn |
16:12 | <@ToxicFrog> | Yes, the LCT delta with respect to UT damn well does change if the save is loaded at all |
16:13 | | Derakon[AFK] is now known as Derakon |
16:14 | < celticminstrel> | I found another April Fool's. |
16:16 | < celticminstrel> | https://blogs.oracle.com/darcy/entry/upcoming_jep |
16:17 | <@ToxicFrog> | Hmm. I can put arbitrary data in the landedAt field, but it gets rewritten if the vehicle actually lands. |
16:19 | <@ToxicFrog> | (if the vehicle does not land, on the other hand, it is left intact) |
16:20 | | Kindamoody is now known as Kindamoody|out |
17:16 | <@ToxicFrog> | Ohohohoho yes. |
17:17 | <@ToxicFrog> | I can store the ID in the vehicle name using nonprinting characters. |
17:18 | <@ToxicFrog> | If a name starts with SOH, that is immediately followed by the ID (using characters in the 0x10-0x1F range) terminated with STX. |
17:20 | <&Derakon> | SOHCAHTOA |
17:20 | < celticminstrel> | Heh. |
17:22 | < Reaper> | What is TF building? |
17:23 | < Vornotron> | I believe he's still working on his multiplayer extension to KSP |
17:28 | < Reaper> | Ah. |
17:29 | < Reaper> | How would that work? You launch a server everybody connects to, then when everybody has pressed the "ready to launch" button everybody launches simultaniously and it's a race to the mun? |
17:29 | <@ToxicFrog> | Reaper: asynchronous multiplayer. |
17:30 | <@ToxicFrog> | Stuff other people launched appears in your save file next time you run the game. |
17:30 | <@ToxicFrog> | Stuff you launched appears in theirs. |
17:30 | < Reaper> | Oh. |
17:30 | <&Derakon> | TF's trying to make space junk a reality in KSP, too~ |
17:30 | < Reaper> | I guess that'd be a lot easier to implement, yeah. |
17:33 | <@ToxicFrog> | Yes. |
17:33 | <@ToxicFrog> | There's a team working on synchronous multiplayer, but that's a much thornier problem and requires using the C# modding API. |
17:36 | <&Derakon> | Ugh, C#. |
17:36 | <&Derakon> | Why do people feel the need to use these languages that require special frameworks to be installed before they can be used on OSX/Linux? :( |
17:38 | | * Vornotron gives Der Python |
17:39 | <@Tamber> | s: on OSX/Linux:: |
17:39 | <&Derakon> | Python has py2app for OSX, py2exe for Windows, and apt-get for Linux. |
17:40 | < Vornotron> | A lot of things you need a framework to do, even if that framework is technically called "video drivers" |
17:40 | <@ToxicFrog> | Derakon: in this case, because the developer is two guys in a garage using the Unity engine, which is C# based. |
17:40 | <&Derakon> | Unity supports other languages too! |
17:41 | | * Vornotron considers the romantic notion that these two guys are actually developing this in a garage. |
17:41 | <@ToxicFrog> | If by "other languages too" you mean "C++, kinda" and given the choice between C++ and C# I blame them not at all for choosing C#. |
17:42 | <&Derakon> | I was looking at Unity earlier, and it has a Python dialect available. |
17:42 | <&Derakon> | And, uh, javascript. |
17:42 | <@ToxicFrog> | Specifically, it has the CLR versions of those languages available, for in-game scripting. |
17:42 | <@ToxicFrog> | These have the same objections C# itself does. |
17:43 | <&Derakon> | Yeah, but I know them already. >.> |
17:43 | <&Derakon> | Also, not Microsoft. |
17:45 | <@ToxicFrog> | Well |
17:45 | <@ToxicFrog> | Given the whole CLR interoperability thing, you probably could write mods for KSP in any CLR language |
17:48 | <@ToxicFrog> | But the whole game is written in C#, so that's an easy choice for modding |
17:49 | <@ToxicFrog> | Especially since "the documentation" is "the C# API information automatically made visible by the IDE" |
17:55 | < celticminstrel> | Unity has JavaScript too I think. |
17:56 | < celticminstrel> | Oh wait, that was mentioned. |
17:59 | <@ToxicFrog> | Hmm. Ok, so now I need to make a bunch of upgrades to the server. |
18:06 | | Kindamoody|out is now known as Kindamoody |
18:10 | < Tarinaky> | Does anyone have etymology on driving a refactor tractor? |
18:10 | < Tarinaky> | Or did you guys just make that up? |
18:11 | < gnolam> | One of jerith's cow orkers, IIRC. |
18:11 | < Tarinaky> | Ah. |
18:14 | <&jerith> | It's nicely alliterative. |
18:15 | < gnolam> | It rhymes, but it isn't alliterative. |
18:15 | <&jerith> | And lends itself to a wide range of farming metaphors. |
18:15 | <&jerith> | Yeah, that. |
18:15 | <&jerith> | Alliterative is the wrong word. |
18:16 | <&jerith> | It has a pleasing rhythm to it. |
18:16 | < gnolam> | Also, makes it so you can insert East German musical references into your code. |
18:16 | <&jerith> | Howso? |
18:18 | <@ToxicFrog> | Oh god, this code is so filthy |
18:18 | <&jerith> | Refactor tractor with emergency irrigator! |
18:19 | <@ToxicFrog> | Referential opacity feels like centipedes in my brain now |
18:19 | < gnolam> | jerith: "Fritz, der Traktorist" in particular. |
18:20 | <&jerith> | Ah. |
18:20 | | * jerith sadly lacks East German musical context. |
18:20 | <@ToxicFrog> | Hmm. |
18:21 | <@ToxicFrog> | Is there a mathmatical equivalent to the bash |? |
18:21 | <@ToxicFrog> | That is to say, a character | st x | f | g = g(f(x)) ? |
18:22 | <@ToxicFrog> | (I know about the functional composition operator, but that puts everything in the wrong order) |
18:31 | <@ToxicFrog> | Incidentally, the reason I want this is this: |
18:32 | <@ToxicFrog> | class Pipe[A](x: A) { def |>[R](f: A => R) = f(x) }; implicit def toPipe[T](x: T) = new Pipe[T](x) |
18:32 | <@ToxicFrog> | Which is delicious, but x |> f |> g is, in addition to being hard to type, ugly. |
18:42 | | symbol [symbol@Nightstar-58fa4b17.cable.teksavvy.com] has quit [Operation timed out] |
18:44 | | * Derakon makes a change to his basic Container class, somehow causes the entire map to be filled with people instead of terrain. O_o |
18:45 | <&Derakon> | Ah. |
18:45 | <@ToxicFrog> | Oops. |
18:45 | <&Derakon> | def __init__(self, foo = set()): ... |
18:45 | <@ToxicFrog> | Ooooooops. |
18:45 | <&jerith> | Yeah. |
18:45 | <&Derakon> | Means that every single instance of that class you create with default argument for foo will get the same set. |
18:45 | <&jerith> | Mutable default params... |
18:48 | <@ToxicFrog> | Augh |
18:48 | | * ToxicFrog thrashes around violently |
18:49 | <@ToxicFrog> | I want to rewrite this whole thing to not be terrible |
18:49 | < celticminstrel> | XD |
18:50 | < celticminstrel> | Same effect if you use set literals? |
18:50 | < celticminstrel> | ...wait, that's a dictionary though. |
18:50 | < celticminstrel> | Bah. |
18:50 | < celticminstrel> | No empty set literal. |
18:50 | <@ToxicFrog> | celticminstrel: the issue is that the default arguments are evaluated only once. |
18:50 | <@ToxicFrog> | Although I forget exactly when. |
18:51 | <&Derakon> | The proper way to do this is to make the default be None, check for that, and create a new set() if needed. |
18:51 | <@ToxicFrog> | So that's analogous to: |
18:51 | <&Derakon> | Presumably it's done the first time the function is called. |
18:51 | <@ToxicFrog> | default_foo = set(); def __init__(self, foo = default_foo): ... |
18:51 | <@ToxicFrog> | And since sets are mutable, the wheels come off as soon as init gets called more than once. |
18:52 | <&jerith> | They're evaluated when the function definition is executed. |
18:54 | | * ToxicFrog fiddles around with scala.collection.immutable.ListMap |
18:59 | <&Derakon> | It's kinda weird, but also neat, that I get the weapons a creature is wielding by doing "self.equipment.getIntersection(gameMap.getContainer(container.ITEMS_MELEE))" |
18:59 | <&Derakon> | That is, get the intersection between the items in the creature's equipment and the items in the global container of melee items. |
19:01 | < celticminstrel> | How efficient is that? |
19:02 | <&Derakon> | Not hugely, but the size of the containers in question is such that it's not a big deal. |
19:02 | <&Derakon> | Even at its most excessive the game won't have more than a hundred melee items in existence at one time. |
19:04 | <@ToxicFrog> | aaaaaaaaaaaagh |
19:04 | <@ToxicFrog> | Working in Scala for so long has completely rewritten how I approach problems like this |
19:04 | <@ToxicFrog> | And now it's not working (due entirely to bad design decisions made earlier) |
19:04 | <@AnnoDomini> | True to the Easter spirit, my vikings are coming back from the dead if conditions improve. |
19:05 | <&Derakon> | Though I ended up replacing the set intersection with a filter operation, since I didn't have access to gameMap in that place. |
19:13 | <@AnnoDomini> | Anyone know where I could find a decent rendering of the FF victory tune? The one I found is the Most Annoying Sound On Earth. |
19:13 | <&jerith> | AnnoDomini: ocremixes? |
19:14 | <@ToxicFrog> | The FF victory fanfare is simple enough that I'm not sure anyone's remixed it. |
19:14 | <@AnnoDomini> | RSN? What is this strange format? |
19:14 | <&Derakon> | http://www.youtube.com/watch?v=5c2Vb7CqTdc |
19:14 | <@ToxicFrog> | AnnoDomini: each FF has a different version of it, so just check all the FF OSTs. |
19:14 | <&Derakon> | There's a bunch more on YouTube. |
19:15 | <@AnnoDomini> | I need one in something convertable to OGG. |
19:15 | <&Derakon> | I'm guessing you're looking for a ringtone. |
19:16 | <@AnnoDomini> | Nah, just a placeholder. |
19:16 | <@AnnoDomini> | Aha! An MP3! |
19:19 | | Noah [noah@Nightstar-c74807e7.pools.spcsdns.net] has quit [Ping timeout: 121 seconds] |
19:20 | <@AnnoDomini> | This is better. Much less annoying. |
19:20 | <@AnnoDomini> | Thanks, Derakon. |
19:21 | <@Alek> | the Most Annoying Sound on Earth is the windows startup sound. XD |
19:22 | <@AnnoDomini> | Yeah, like that, only louder and longer. |
19:22 | <&Derakon> | AD: when in doubt, Google or YouTube search. |
19:22 | <@AnnoDomini> | I did a google search which turned up the previous piece. |
19:22 | <@AnnoDomini> | I did not check youtube. |
19:26 | | Kindamoody is now known as Kindamoody[zZz] |
19:29 | <@ToxicFrog> | YUM |
19:29 | <@ToxicFrog> | Some(v("name").tail.takeWhile(_ != STX).map(_.toInt - 0x10).reduce(_ * 16 + _)) |
19:31 | <&Derakon> | That's completely illegible. |
19:31 | < Vornotron> | I got it |
19:31 | <@ToxicFrog> | Derakon: it is kind of ugly, but it would have been much uglier in anything else I might have implemented this in, so~ |
19:32 | < Vornotron> | He's taking the tail end of an object's name, pulling off pieces until he hits an STX, and using them as hex digits |
19:33 | <@ToxicFrog> | Yep. |
19:33 | < Vornotron> | I'm not entirely sure what Some does. |
19:33 | <@ToxicFrog> | Some is half of Option[T] |
19:33 | <@ToxicFrog> | It's equivalent to Haskell's Maybe |
19:33 | <&Derakon> | STX? |
19:33 | <@ToxicFrog> | Start of Text. ASCII 0x02. |
19:33 | <&Derakon> | Ah. |
19:33 | < Vornotron> | A record separator in A |
19:33 | < Vornotron> | dammitall |
19:34 | <@ToxicFrog> | This function returns Option[Int], meaning it either returns Some(n) or None |
19:34 | <@ToxicFrog> | Specifically, it extracts the hidden ID number from an object's name |
19:34 | <@ToxicFrog> | Which, if present, has the form SOH digit+ STX, where digit is a character in the range 0x10-0x1F (only the low four bits are used) |
19:34 | <&Derakon> | So, what, returning 123 when handed "foo123"? |
19:35 | < Vornotron> | approximately |
19:36 | <@ToxicFrog> | Except the ID number is at the start of the string. |
19:36 | < Vornotron> | But instead of 123 you have an STX and then some nonprintables |
19:36 | <@ToxicFrog> | You have SOH, then some nonprintables, then STX, actualy. |
19:37 | <@ToxicFrog> | v("name") // the vessel name |
19:38 | <@ToxicFrog> | .tail // drop the first character, which is SOH, indicating that there's an ID code embedded in it |
19:38 | < Vornotron> | I still don't know what Some is doing here, I'm very confused |
19:38 | <@ToxicFrog> | .takeWhile(_ != STX) // grab everything up to the first STX character |
19:38 | <@ToxicFrog> | .map(_.toInt - 0x10) // replace '\x12' with 2, etc |
19:39 | <@ToxicFrog> | .reduce(_ * 16 + _) // turn (0xF, 0x3, 0x8) into 0xF38 |
19:39 | <@ToxicFrog> | Some just wraps it for typesafe return. |
19:40 | <&Derakon> | Behold, my roguelike: http://derakon.dyndns.org/~chriswei/games/pyrel/1.png |
19:40 | <@ToxicFrog> | For operations that can fail nonfatally, it's common to return Some(value) on success and None on failure |
19:40 | <@ToxicFrog> | (as opposed to, say, returning value on success and null on failure) |
19:41 | <&Derakon> | Two creatures, one wanders at random (but doesn't walk through walls!), the other is controllable by the player, and can pick up items, equip them, look at their inventory and equipment, and attack the wanderer, doing variable damage depending on equipment. |
19:41 | <&Derakon> | Also there's a scrollable message buffer and a resizable main view. |
19:41 | <@ToxicFrog> | The whole function is basically: if (name.head == SOH) { /* there's an ID! */ Some(...) } else { /* No ID... */ None } |
19:42 | <@ToxicFrog> | Vornotron: does that clarify at all? |
19:42 | < Vornotron> | I think, maybe? |
19:43 | < Vornotron> | mmmm, yeah, okay I see what's going on now |
19:59 | <@ToxicFrog> | Hmm. |
20:00 | <@ToxicFrog> | I think I need another layer of abstraction here, and possibly a heavy redesign of ksp._ to make everything referentially transparent. |
20:06 | | * Derakon cackles madly as he implements unequipping and dropping items with ease. |
20:06 | <&Derakon> | The framework is working! |
20:06 | <@Alek> | add drop-held-on-death, -ko, -stun :P |
20:07 | <@ToxicFrog> | eeee |
20:07 | <@ToxicFrog> | Iterable has a partition operator |
20:07 | <@ToxicFrog> | Life is good |
20:14 | < celticminstrel> | What language? |
20:18 | <@ToxicFrog> | Scala |
20:20 | <@ToxicFrog> | val (updates, adds) = incoming groupBy (_.id) partition (flights contains _._1) |
20:43 | <&Derakon> | 962 lines of code so far, of which 202 are comments and 190 are whitespace. |
21:07 | | Reaper [Z@Nightstar-3602cf5a.cust.comxnet.dk] has quit [Ping timeout: 121 seconds] |
21:10 | <&jerith> | Derakon: What are you writing? |
21:10 | <&Derakon> | Jerith: awhile back I spent some time coming up with an object model for a roguelike, so of course I had to implement it to see how well it actually worked. |
21:10 | <&jerith> | Ah, cool. |
21:11 | <&Derakon> | So far Pyrel will make a mostly-empty map with walls, a monster, the player, and an item the player can pick up and equip and use to smack the monster around with. |
21:11 | <&jerith> | Shiny. |
21:35 | | RichyB [MyCatVerbs@Nightstar-f677b3be.bb.sky.com] has joined #code |
21:45 | | mode/#code [+o rms] by ChanServ |
21:49 | | Rhamphoryncus [rhamph@Nightstar-5697f7e2.abhsia.telus.net] has joined #code |
21:56 | | Reaper [Z@2C3C9C.B2A300.F245DE.859909] has joined #code |
22:08 | | * McMartin reads backscroll |
22:08 | <&McMartin> | Nitpick: Mono is a default install these days on Linux so any modern distro should run CLR stuff as easily if not more so than Java |
22:08 | <&McMartin> | This is presently the one service GNOME does for the community =P |
22:09 | | * AnnoDomini becomes interested in some kind of versioning system. What would recommend for a C project, McMartin? |
22:09 | < celticminstrel> | It's not default on Mac though. ;P |
22:10 | <@rms> | Or Arch |
22:10 | <@Tamber> | tamber@na $> grep -i mono /var/lib/portage/world | wc -l |
22:10 | <@Tamber> | 0 |
22:10 | <&McMartin> | Mac is now outnumbered, and since you can't interface to half the OS there *at all* without using an Objective-C variant specific to it, Mac people have no real grounds to complain =P |
22:10 | <&McMartin> | Tamber: From this I conclude that you don't have any recent version of GNOME installed. |
22:11 | <@Tamber> | Indeed I do not. |
22:11 | <&McMartin> | Were you to do so, you would find mono on that list |
22:11 | <@Tamber> | Probably. Somewhere in the /mountains/ of shite it drags in. |
22:11 | <&McMartin> | And you probably would not complain overmuch, anymore than you would upon finding that installing some other application all drew in libocaml. |
22:12 | <&McMartin> | OK, so, since my point appears to have been lost: "C# is a core implementation language for the GNOME desktop environment and has been for some time. It's actually not accurate anymore to say it's MS specific." |
22:12 | <@Tamber> | Last time I looked, it was only used for their time-tracker and a notes app, or something like that. |
22:13 | <&McMartin> | AnnoDomini: It's almost impossible to go wrong if you're versioning C; C is kind of what they were built around. |
22:13 | <&McMartin> | Mercurial and git are both the current state of the art, and probably the most suitable for a single end-user. |
22:13 | | * rms seconds git |
22:14 | <&McMartin> | If you plan on using it to also share code across machines, the older client/server systems such as Subversion become viable options |
22:14 | | * TheWatcher generally recommends git, but finds it laregely a matter of personal choice |
22:14 | <&McMartin> | I personally use git, but it is the fourth system I've used. |
22:14 | <&McMartin> | I'm not sure I would recommend it as a *first* system |
22:14 | <@TheWatcher> | (also git bare repos serve as good replacements for svn client/server setups) |
22:15 | <&McMartin> | Especially since it was created with "hatred for all things vaguely related to subversion" as an explicit design consideration while, uh, also having a complete git-svn compat layer. |
22:15 | <&McMartin> | TheWatcher: I believe Mercurial can do similar tricks? |
22:15 | <@Tamber> | McM: Well, you can't expect mere mortals to convert everything overnight, can you? |
22:15 | <&McMartin> | AnnoDomini: What OS are you running on. |
22:15 | <&McMartin> | Tamber: INSUFFICIENT HATRED |
22:15 | <@Tamber> | :) |
22:15 | <&McMartin> | Also, we only care about people converting from real things like Perforce right |
22:16 | <@Tamber> | Hehe |
22:16 | <@TheWatcher> | McM: Almost certainly, although I;ve never personally used mercurial for more than cloning other's code, so. |
22:16 | <@AnnoDomini> | I remember Subversion from Uni. It didn't go well. We resorted to sending compressed project directories by email. |
22:16 | <@AnnoDomini> | McMartin: Debian 6. |
22:16 | <&McMartin> | It has since improved a fair amount. |
22:16 | <&McMartin> | Though Debian probably hasn't taken the changes =P |
22:16 | <&McMartin> | OK, git is probably a decent choice then |
22:16 | <&jerith> | To be fair, svn is better than nothing. |
22:17 | <@TheWatcher> | (unless your last name is Torvalds~) |
22:17 | <&McMartin> | It's also better than cvs by about three orders of magnitude. |
22:18 | <&McMartin> | Git's two biggest weaknesses are "it's commands are the same as subversion's but they do different things" and "the Windows support remains incredibly terrible, basically 'install MSYS'" |
22:18 | | * McMartin shoots the second apostrophe |
22:18 | < Tarinaky> | egit in eclipse is okay. |
22:18 | <&McMartin> | svn checkout is, more or less, git clone |
22:18 | <@TheWatcher> | McM: I note that a couple of my MSc students are currently using WinGit without any problems, but it could be their use is avoiding any issues. |
22:19 | < Tarinaky> | Although you still need MSYS for advanced features. |
22:19 | <&McMartin> | TheWatcher: Oh, it *works* |
22:19 | <&McMartin> | It's just insanely clunky compared to SVN |
22:19 | <&McMartin> | Because SVN/Windows integration is as good as desktop versioning integration can get, at this point. |
22:19 | < RichyB> | Wasn't svn written by the same people who wrote cvs originally? |
22:19 | <@TheWatcher> | You mena "compared to tortoisesvn" |
22:19 | <@TheWatcher> | *mean |
22:19 | <&McMartin> | Mmm, sort of |
22:20 | | * AnnoDomini creates a free account on GitHub. |
22:20 | < RichyB> | Naturally, "TortoiseGit" is a thing which exists. |
22:20 | <&jerith> | github is <3 |
22:20 | < RichyB> | GitHub is pretty okay. |
22:20 | < RichyB> | It's trendy, which helps. |
22:20 | <&McMartin> | RichyB: And which, last I checked, doesn't actually integrate with Windows Explorer beyond "spawn bash process in this directory and let you type commands" |
22:20 | <&McMartin> | Perhaps it has since improved |
22:21 | <&McMartin> | But it was Not There Yet in any sense when last I checked. |
22:21 | <&McMartin> | Also, even nonTortoise SVN installs let you put svn commands inside normal Windows batch files, which WinGit, again, the last I checked, does not. |
22:21 | < RichyB> | I haven't tried it, hence I'm not going to say more about it than, "exists." |
22:21 | <&McMartin> | A project by that name exists. |
22:22 | <&McMartin> | Actual integration of Git into the file explorer did not, the last time I looked at it~ |
22:22 | | * McMartin goes to check~ |
22:22 | < Tarinaky> | I'm not sure integration with the windows file explorer is the right thing to do though >.> |
22:22 | <&McMartin> | Tarinaky: It's not *sufficient* |
22:23 | <&McMartin> | But yes, actually, you do want some way to point at something in your file viewer and say "sync this now" |
22:23 | <&McMartin> | Which it appears that TortoiseGit now has |
22:23 | <&McMartin> | This is somewhat recent; it didn't have it this time last year or so or whenever I was setting up my repos. |
22:26 | <&McMartin> | I would not *trust* TortoiseGit yet, based on its changelog |
22:37 | | * AnnoDomini follows the instructions on GitHub. So far, so good. These are fairly clear. |
22:50 | <@AnnoDomini> | Can I add multiple files with 'git add <file>'? |
22:50 | <&McMartin> | Yes |
22:50 | <&McMartin> | Note that this also is for marking files to eventually commit |
22:51 | <&McMartin> | Because "commit (filenames)" would be... |
22:51 | <&McMartin> | ... what SVN does |
22:51 | <&McMartin> | https://www.youtube.com/watch?v=7g9WjcGdxuM |
22:53 | <&McMartin> | "git commit -a" will pre-add everything that's changed and already part of the repo, though. |
22:53 | <&McMartin> | So normally you only need to "add" files the first time, unless you do broken-up commits. |
22:54 | <@AnnoDomini> | Uhuh. |
22:55 | | * McMartin will admit that this digression was primarily an excuse to link that YouTube. |
22:57 | <@rms> | git add . |
22:57 | <@rms> | That'll add everything |
22:58 | < Tarinaky> | That's seldom what you want to do though. |
22:58 | <&McMartin> | You can also do the * stuff. |
22:58 | | * rms uses it for note-repos |
22:58 | < Tarinaky> | Fair enough. |
22:58 | < Tarinaky> | I'm thinking in terms of needing to exclude compiled binaries and the like. |
22:59 | <@rms> | <McMartin> You can also do the * stuff. <-- that doesn't include hidden files though |
22:59 | <@rms> | You use .gitignore for that. |
23:01 | < Tarinaky> | Again... why would you want to add hidden files :p |
23:01 | <@rms> | Because I also have a repo for rc files |
23:01 | < Tarinaky> | Touche |
23:11 | <@AnnoDomini> | Okay. I think I got the hang of this: https://github.com/AbuDhabi/Viking-Trail |
23:18 | | Eri [Eri@Nightstar-3e5deec3.gv.shawcable.net] has quit [Ping timeout: 121 seconds] |
23:44 | <&jerith> | AnnoDomini: Isn't there traditionally a makefile or something with these things? |
23:46 | <@AnnoDomini> | There's a Code::Blocks project file or two. |
23:47 | <&jerith> | I don't see those in the repo. |
23:47 | <@AnnoDomini> | Probably a good idea to include the one that has the library inclusions. |
23:47 | <@AnnoDomini> | Because I didn't add them. |
23:47 | <&jerith> | Ah. |
23:48 | <&jerith> | It's generally a good idea to have all the bits you need to build a thing in the repo. |
23:48 | <@AnnoDomini> | Just build, or run too? :P |
23:48 | <@AnnoDomini> | 'Cause I have a few Mb of sounds and pictures. |
23:49 | <&jerith> | Yeah, those should probably be included. |
23:51 | | * AnnoDomini gets to uploading. |
23:55 | <@AnnoDomini> | Okay, I think that's everything necessary. |
--- Log closed Mon Apr 09 00:00:07 2012 |