Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
UraniumAnchor
May 21, 2006

Not a walrus.
Not a screenshot, but who's counting?

https://www.youtube.com/watch?v=91gDdIJPcFQ

UraniumAnchor fucked around with this message at 00:07 on Nov 12, 2014

Adbot
ADBOT LOVES YOU

LP0 ON FIRE
Jan 25, 2006

beep boop

UraniumAnchor posted:

Not a screenshot, but who's counting?

Really impressive! Congratz on the great work.

Some questions if you don't mind me asking:

-How did you handle the geometry of creating the levels? Are the polygons that automatically fill a texture?
-It mentions a sequel in the description. Is this the sequel?
-What platform(s) is this for?

Is this finished or still in development? I think it could use a bit more life added to the graphics, like animated scenery and background. The ball hero could also squish a little bit when jumping/landing and anything to give it some more character.

Volte
Oct 4, 2004

woosh woosh
Not a screenshot since it's just a library, but I found myself needing to test fairly complex JSON responses in a Python web application, and drilling down into a tree that may contain lists of trees or whatever gets hairy, so I made a little structural matching library. I have no idea if something like this already exists but I couldn't find it. It can be used to match any kind of object but the most interesting part is the Tree pattern which lets me match dict-like objects against tree strutures.

For example:

code:
testdict = {
    'key1': 'hello',
    'key2': 123,
    'key3': {
        'nested': [1, 2, 3, 4],
        'list': [
            { 'boo': 'poo' },
            { 'doo': 'koo' }
        ]
    }
}

pattern = Tree(
    Tree.KeyValue('key1', 'hello'),
    Tree.KeyValue(Regex(r'key\d', name='matched_key'), Tree(
        Tree.KeyValue('list', Predicate(lambda x: x[1]['doo'] == 'koo', name='foo'))
    )),
    Tree.KeyValue(Any(name='123_key'), 123)
)

print pattern.match(testdict)
code:
Match({
    '_self': {'key3': {'list': [{'boo': 'poo'}, {'doo': 'koo'}], 'nested': [1, 2, 3, 4]}, 'key2': 123, 'key1': 'hello'},
    '123_key': 'key2',
    'foo': [{'boo': 'poo'}, {'doo': 'koo'}],
    'matched_key': 'key3'
})
Still very rudimentary (only a couple of hours old) but I thought it was pretty cool since it's barely 150 lines of Python and I can't think of any structure it wouldn't be able to match. You can compose patterns into a single pattern (with either alternation or concatenation) using Concat(a1, a2, ...) and Alternate(a1, a2, ...) higher-order patterns too so you basically get short circuiting && and || as well.

I'm thinking of cleaning it up and making it into a real package if it seems useful.

SupSuper
Apr 8, 2009

At the Heart of the city is an Alien horror, so vile and so powerful that not even death can claim it.

LP0 ON FIRE posted:

Is this finished or still in development? I think it could use a bit more life added to the graphics, like animated scenery and background. The ball hero could also squish a little bit when jumping/landing and anything to give it some more character.
Seconding this, it's really jarring how everything looks so cute and animated but your player character is completely static.

Volte
Oct 4, 2004

woosh woosh
I've actually integrated the above into my unit tests now and it works really well.

code:
    @app_context
    def testFetchUnowned(self):
        json_data = _fetch(self, datetime.datetime.fromtimestamp(0), headers=AUTH_TOKEN(self.user))
        self.assertIsNotNone(
            tree(
                kv('objects', sequence(
                    exclude(tree(kv('_id', str(self.unowned_object.id))))
                ))
            ).match(json_data)
        )
This says "ensure that the JSON data is a dictionary that contains an 'objects' key which is a sequence, but that the sequence does not have any elements with the id of the unowned object". I'll throw it up on github at some point.

Volte fucked around with this message at 00:19 on Nov 12, 2014

UraniumAnchor
May 21, 2006

Not a walrus.

LP0 ON FIRE posted:

Really impressive! Congratz on the great work.

Some questions if you don't mind me asking:

-How did you handle the geometry of creating the levels? Are the polygons that automatically fill a texture?
-It mentions a sequel in the description. Is this the sequel?
-What platform(s) is this for?

Is this finished or still in development? I think it could use a bit more life added to the graphics, like animated scenery and background. The ball hero could also squish a little bit when jumping/landing and anything to give it some more character.

-The texture fill is an arbitrary polygon that lines up the texture coordinates according to the grid. The actual collision is tile-based, but we have some really detailed collision outlines for the tiles, as you can see by the curves.
-There are two Bounce On games already (Bounce On and Bounce On 2), and this is the third one. It's not called Bounce On 3 for... I suppose you could call them legal reasons? It's complicated but basically the original creators (only some of whom are involved in this) want to save the name Bounce On 3 for later.
-iOS first, Android shortly thereafter. Mostly because I need to redo the way Android handles the options menu.

It's 98% done. But the last 2% is always the hardest. There's a lot of visual polish we had to shelve that will hopefully be something I can add over the next month or so. Barring any last minute showstoppers we'll be submitting it to Apple by the end of the week.

Edit: You'll be pleased to know that I spent about an hour and made it so he visually wobbles when you hit a wall hard enough. Or when you jump. Most of that tuning was just getting the numbers to a point where it didn't look too silly. It was on my list of "eventually" but after seeing the result I'm glad I went ahead and stuck it in, it looks a lot better now!

UraniumAnchor fucked around with this message at 02:56 on Nov 12, 2014

aerique
Jul 16, 2008
Working in the little spare time I've got in the evenings on procedurally generating rocks for the #procjam.

Because of its short format (10 days or so) this jam got me to do one thing I rarely do: use whatever is available to get results. Seems like a useful skill, since I am usually very prone to NIH and wanting to write everything myself (and thus getting nothing done).

Locus
Feb 28, 2004

But you were dead a thousand times. Hopeless encounters successfully won.

aerique posted:

Working in the little spare time I've got in the evenings on procedurally generating rocks for the #procjam.

Because of its short format (10 days or so) this jam got me to do one thing I rarely do: use whatever is available to get results. Seems like a useful skill, since I am usually very prone to NIH and wanting to write everything myself (and thus getting nothing done).



Those rocks look great!

The NIH thing is crazy in all forms of creativity. As an absolute amateur hobbyist when it comes to development, I have a lot of trouble balancing that, both emotionally, and trying to figure out what's the best tact for learning. :iiam:



This week I'm forcing myself to take a sort of vacation and actually do a drat game jam for once. I started two days into #7DFPS, so it's more like 5DFPS, but I think it's coming together:



I've got level generation and A* pathfinding from the Pro-D package, which the developers are giving away for free during #procjam. Right now the killbot just lurks, but I'm hoping to get movement and non-omniscient sensors put in today.

kayakyakr
Feb 16, 2004

Kayak is true

Locus posted:

Those rocks look great!

The NIH thing is crazy in all forms of creativity. As an absolute amateur hobbyist when it comes to development, I have a lot of trouble balancing that, both emotionally, and trying to figure out what's the best tact for learning. :iiam:



This week I'm forcing myself to take a sort of vacation and actually do a drat game jam for once. I started two days into #7DFPS, so it's more like 5DFPS, but I think it's coming together:



I've got level generation and A* pathfinding from the Pro-D package, which the developers are giving away for free during #procjam. Right now the killbot just lurks, but I'm hoping to get movement and non-omniscient sensors put in today.

that robot looks like it needs a hug.

(also, pretty cool stuff)

Sagacity
May 2, 2003
Hopefully my epitaph will be funnier than my custom title.
I've always dabbled in the demoscene and one thing I never got around to building was a GUI that allowed me to create a node graph with every node containing properties that could potentially be animated. The graph is something I could then use to render my demo.

This is what I have so far, after about 1.5 week of hacking in my spare time:


I can create and remove nodes and connections, cut, copy and paste them. Also a node can have editable properties (no animation yet).

It's been pretty fun to work on. I'm using C++11 for the core engine and I've built the UI using Qt5 and QtQuick which is really insanely powerful. Having done a lot of frontend Javascript for my dayjob (using Knockout) it's delightful to be able to have MVVM and two-way bindings in my native application as well. Also, thanks to CMake I'm developing on Windows but I've been able to get it to build on Ubuntu as well.

Not sure when I get around to building an actual demo yet. There's no rendering *at all* yet, it's just the node graph. But at least the foundation is pretty solid. Having unique_ptr and move semantics to clearly manage object ownerships is great.

RoboCicero
Oct 22, 2009

"I'm sick and tired of reading these posts!"
Missed the boat on Tegan & Sara concert tickets so I stayed in and smoked a cigarette

Shalinor
Jun 10, 2002

Can I buy you a rootbeer?

RoboCicero posted:

Missed the boat on Tegan & Sara concert tickets so I stayed in and smoked a cigarette


Not a bad ribbon particle! How much of that is custom procedural code VS art?

EDIT: VVV Sweet!

Shalinor fucked around with this message at 18:51 on Nov 16, 2014

RoboCicero
Oct 22, 2009

"I'm sick and tired of reading these posts!"
It's 100% procedural code -- it's just a LineRenderer in Unity with the Sprite material applied (I didn't look too hard for anything else :V) and some settings with regards to start width/color and end width/color. Most of it is me generating a set of points that mimic particles drifting in the air and passing those into the LineRenderer.

Medieval Medic
Sep 8, 2011
Working on a tile map editor just for funsies.



Those tile textures though.... :gonk:

No idea what to do to improve them.

octan3
Jul 10, 2004
DoNt dO DrUgs
An early part of a game I've been working on required creating buildings in a 'sims-like' grid where you can drag the size of the building out.



Have prototyped a few options and the above current approach is working well enough to be able to move on to the next item before coming back and cleaning this one up!

Pentecoastal Elites
Feb 27, 2007
Probation
Can't post for 11 hours!

Medieval Medic posted:

Those tile textures though.... :gonk:

No idea what to do to improve them.

There are a bunch of free tiles at places like opengameart.org, but check this out, especially if you want to make more in the future:
http://androidarts.com/pixtut/pixelart.htm#Example

The whole page is pretty good, but the section I linked is especially relevant

cowboy beepboop
Feb 24, 2001

octan3 posted:

An early part of a game I've been working on required creating buildings in a 'sims-like' grid where you can drag the size of the building out.



Have prototyped a few options and the above current approach is working well enough to be able to move on to the next item before coming back and cleaning this one up!

This is cool. Is the grid 2x triangles for each little square or one giant square and grid texture?

xezton
Jan 31, 2005

No ultimate goal for this... the result of me forcing myself to learn the most basic path-finding and queuing possible.



Both green dudes were given the same three target coordinates to path to.

Like me in real life, when they run into an obstacle, they simply ram their heads into it until a solution appears.

octan3
Jul 10, 2004
DoNt dO DrUgs

my stepdads beer posted:

This is cool. Is the grid 2x triangles for each little square or one giant square and grid texture?

Thanks! Right now the grid is using the 2x triangle approach but I'm making no use of the triangles themselves so it'll soon be moved over to just a single giant square with the grid texture on it to speed things up :)

UraniumAnchor
May 21, 2006

Not a walrus.
Implementing dithering is fun.

Original, 24-bit:



No Dithering, 5-6-5 16-bit:



F-S Dithering, 5-6-5 16 bit:

Centripetal Horse
Nov 22, 2009

Fuck money, get GBS

This could have bought you a half a tank of gas, lmfao -
Love, gromdul

UraniumAnchor posted:

Implementing dithering is fun.

Original, 24-bit:



No Dithering, 5-6-5 16-bit:



F-S Dithering, 5-6-5 16 bit:



That looks good. I'd like to see the results of a pixel-by-pixel fitness comparison to see how close the 16-bit is to the original.

NorthByNorthwest
Oct 9, 2012
More shader fun, this time with some inversion effects.

Winty
Sep 22, 2007

octan3 posted:

Thanks! Right now the grid is using the 2x triangle approach but I'm making no use of the triangles themselves so it'll soon be moved over to just a single giant square with the grid texture on it to speed things up :)
Someone please correct me if I'm wrong, but isn't it true that most graphics cards only render triangles anyway, and quads are just internally split into triangles? I don't think you'd get a speed improvement doing that, in that case. I like the building interface - reminds me of those good games like Theme Hospital and Startopia.

octan3
Jul 10, 2004
DoNt dO DrUgs

untilted posted:

Someone please correct me if I'm wrong, but isn't it true that most graphics cards only render triangles anyway, and quads are just internally split into triangles? I don't think you'd get a speed improvement doing that, in that case. I like the building interface - reminds me of those good games like Theme Hospital and Startopia.

Ah, didn't want to go into the details of it in the previous post but the triangle approach I had was from a previous prototype that stuck around and got 'disabled' internally, but it still has a lot of additional controllers / event bindings built into it that are no longer used and still being fired.

So the speeding up as such will actually be me cleaning up old code :D, Theme Hospital has certainly been one of the inspirations too.

Tavistock
Oct 30, 2010




I made a fractal thing after seeing someone tweet the something similar. It's pretty fun to mess around with but slow and rough around the edges

NorthByNorthwest
Oct 9, 2012

Tavistock posted:


I made a fractal thing after seeing someone tweet the something similar. It's pretty fun to mess around with but slow and rough around the edges

I love the flat shading and isometric camera. This looks amazing, and reminds me of Monument Valley.

LP0 ON FIRE
Jan 25, 2006

beep boop

Tavistock posted:


I made a fractal thing after seeing someone tweet the something similar. It's pretty fun to mess around with but slow and rough around the edges

That looks amazing. Hope you are able to make it faster (I bet you can) because that will look even cooler with more iterations.

e: Actually I just noticed you can make it as complex as you want. But yes, it is a little clunky for placing a block.

NorthByNorthwest posted:

This looks amazing, and reminds me of Monument Valley.

I thought the same exact thing!

LP0 ON FIRE fucked around with this message at 16:59 on Nov 20, 2014

hendersa
Sep 17, 2006

The preliminary work on the Beagle Entertainment System (BES) is finally making some decent progress:



We have Gameboy Advance:



... Gameboy/Gameboy Color:



... and the original NES:



All rendering is using EGL and OpenGL ES 1.1 to render to textures, which are then mapped to two triangles to make a quad. This wasn't feasible with the older BeagleBone Black kernels, but the move to the 3.14 kernel has re-enabled hardware-accelerated graphics. Internally, the GUI is rendering at 720x480, but I reduced the resolution of the actual screen to 512x384 to take the images. The 720x480 rendering looks fine when scaled down to 512x384 by GLES. This frees me up from having to hardcode raster rendering coordinates for all of the various resolutions, making it easier for people using different displays and LCD capes to get it up and running. I can also make the pause/snapshot dialog another quad that can be placed anywhere on the screen without interfering with the various emulator render buffer logic pieces.

All of the emulators and the GUI front-end are in the same binary, so I bypass a lot of the setup/shutdown logic of each emulator. I have also decoupled the GUI logic from the emulator more thoroughly. BeagleSNES was pretty tightly tied into the SNES9X codebase. Because SNES9X has a more restrictive license than the GPL'd NES/GBA/GBC emulators, I can't pull it into the main binary. If I end up including the SNES emulator, I'll have to fork()/execve() the emulator from the GUI, waitpid() on the emulator from the GUI, and pass a bunch of command line args to the emulator to get it on the same page as the GUI front-end.

Neurion
Jun 3, 2013

The musical fruit
The more you eat
The more you hoot

Tavistock posted:


I made a fractal thing after seeing someone tweet the something similar. It's pretty fun to mess around with but slow and rough around the edges

Reminds me of the Tower of Kagutsuchi from SMT Nocturne, which is pretty awesome.

Azazel
Jun 6, 2001
I bitch slap for a living - you want some?
Sorry, not a screenshot, but here's a video of my game in action:

https://www.youtube.com/watch?v=W6oBrkVtR1c

Still about 2+ months of development to go before release.

kayakyakr
Feb 16, 2004

Kayak is true

Azazel posted:

Sorry, not a screenshot, but here's a video of my game in action:

https://www.youtube.com/watch?v=W6oBrkVtR1c

Still about 2+ months of development to go before release.

Looks neat.

aerique
Jul 16, 2008
A few more screenshots from my Procjam 2014 entry. It's a really limited utility since I could only spent a couple of evenings on it. However, it was good fun to play with procedural generation again.



HappyHippo
Nov 19, 2003
Do you have an Air Miles Card?
I made a webgl thing to plot julia fractals using shaders for speed. By moving the mouse you select the c value which changes the shape of the fractal.

hendersa
Sep 17, 2006

I have completely tied in the GBC/GBA emulator to the BeagleSNES framework. I added in a new dialog to select between different pre-tuned emulation settings to optimize for audio/timing or video quality (since the BeagleBone Black can't emulate at full speed without skipping frames):

https://www.youtube.com/watch?v=W15_aTr7Rwo

The OpenGL ES support on the BBB is turning out to be fairly decent. Color me surprised.

baka kaba
Jul 19, 2003

PLEASE ASK ME, THE SELF-PROFESSED NO #1 PAUL CATTERMOLE FAN IN THE SOMETHING AWFUL S-CLUB 7 MEGATHREAD, TO NAME A SINGLE SONG BY HIS EXCELLENT NU-METAL SIDE PROJECT, SKUA, AND IF I CAN'T PLEASE TELL ME TO
EAT SHIT

You're a ridiculously productive hobbyist, the amount of stuff you get done is amazing. How come you're going with ES 1.1? Wouldn't 2.0 give you better performance, or doesn't the chipset support it?

hendersa
Sep 17, 2006

baka kaba posted:

You're a ridiculously productive hobbyist, the amount of stuff you get done is amazing. How come you're going with ES 1.1? Wouldn't 2.0 give you better performance, or doesn't the chipset support it?

The SGX core in the AM3359 processor of the BBB supports both 1.1 and 2.0. The 1.1 API is closer to the OpenGL API, which makes it more convenient for me because I have passing knowledge of OpenGL. With GLES 1.1, I can't use glBegin()/glEnd() and I don't have GL_QUADS, but I can use glVertexPointer() and glTexCoordPointer() with glDrawArrays() to get to where I need to be just as well. My understanding is that with 2.0, I can use a framebuffer object to get the same type of thing working, but that whole programmable shader pipeline thing isn't something that I'm that keen on digging into at the moment. I have plenty of other things to do to keep me busy. 1.1 has FBOs and pbuffers and stuff, so I can still dig into it a bit further, too.

When I looked around for a comparison of 1.1 versus 2.0 performance, I can't get a straight answer. It varies from implementation to implementation, and there just aren't people doing GLES stuff on the BBB. I probably won't be able to find out which is faster unless I take the measurements myself. I find that to be the sort of thing that happens to me with the BBB all of the time. The Raspberry Pi folks don't know how nice they have it! Anyway, 2.0 might be faster than 1.1, but I'm actually doing so little with it (rendering either 2 or 4 texture-mapped triangles) that I am assuming that the difference in performance is probably really tiny.

shodanjr_gr
Nov 20, 2007


Cross-posting from the chip-8 thread (http://forums.somethingawful.com/showthread.php?threadid=3634812), I've been working on a CHIP-8 interpreter for iOS written in Swift.

Got most of the interpreter core implemented (missing a couple of timer and audio instructions) and finally got something to show up on the screen today. Pretty cool way to pick up a new language!

Centripetal Horse
Nov 22, 2009

Fuck money, get GBS

This could have bought you a half a tank of gas, lmfao -
Love, gromdul

Do you have a website, or a summary of the project, somewhere I can read it? I've been following your work on this off and on since the beginning, but I lost my way somewhere along the line. You're using existing emulation software, right? Are you just coding the interface, or are you modifying the emulators at the code level, or some combination of those? I recall a lot of hardware talk, but it seems to be interspersed with software and coding, and now I feel confused. I am really interested in what you've been doing, but it's been going on a long time, and it's all jumbled up in my brain. Help a dummy out and give a recap, or tell me where to find one.

hendersa
Sep 17, 2006

Centripetal Horse posted:

Do you have a website, or a summary of the project, somewhere I can read it? I've been following your work on this off and on since the beginning, but I lost my way somewhere along the line. You're using existing emulation software, right? Are you just coding the interface, or are you modifying the emulators at the code level, or some combination of those? I recall a lot of hardware talk, but it seems to be interspersed with software and coding, and now I feel confused. I am really interested in what you've been doing, but it's been going on a long time, and it's all jumbled up in my brain. Help a dummy out and give a recap, or tell me where to find one.

I don't have a centralized location for this stuff. I should probably start a thread in the project log forum...

BeagleSNES started as a class project for a graduate course in embedded system design. My goal was to turn the BeagleBoard-xM ARM-based SBC into a stand-alone Linux appliance that mimicked an SNES. I started by building the SNES9X emulator on that platform, but I quickly found out that the kernel was missing some things that I needed. I ended up hacking on the bootloader and kernel a lot:



I customized the OS a bit and profiled/optimized the emulator for optimal performance. To make the system more appliance-like, I wrote a GUI front-end for it. I also wrote a 35 page manual to turn in for the project's final report. I ended up getting an "A".



Time spent at this point: 4 months.

I had a random person mail me and request that I port my work to this new BeagleBone Black board that was coming out. The BBB was a third of the cost of the BB-xM and had a higher clock speed, so he was eager to play SNES games on the thing. I told him that I'd think about it, and then he Paypal'd me some money and requested that I went to go buy one ASAP. So, I felt guilty and got to work.



A guy from TI contacted me and requested a bunch of features (second controller, better front-end GUI) so that he could show it off at an internal event:



Done and done. Time spent at this point: 10 months.

Some TI interns contacted me and asked for my help in making BeagleSNES portable. I fixed a few bugs and added some options to make it portable. They designed a portable unit based on it:



Time spent at this point: 12 months.

I made my own version using standard BeagleBone capes:



Time spent at this point: 14 months.

Around this time, I had the bright idea to spend some time getting Android running well on the BBB using more recent kernels. I sunk about six months into setting up build processes and answering thousands of mails on how to do it. I still maintain a BBB port of the Android Open Source Project for the BBB (bbbandroid.org). I also wrote a few magazine articles on the BBB.



Time spent at this point: 18 months.

Around the holidays, I pushed out another BeagleSNES release with a better GUI and some bug fixes.



Time spent at this point: 22 months.

I began playing around with augmented reality (AR) stuff with an eye towards augmenting an emulator with AR for use on the BBB (once the kernel's hardware-accelerated OpenGL ES worked again):




I asked via the BeagleBoard community about moving the BBB features from the older, stable kernel (3.8) to newer ones (3.13, 3.14). I was laughed at and told to "do it myself". I began hacking on the newer kernels to retrofit cape overlay support into it. I showed that it worked and was told to stop, since others were working on it and trying to get it into the mainline kernel. To this day, I think I'm the only one with a 3.13 kernel with cape support in it. And it's mine. ALL MINE.



Time spent at this point: 27 months.

I hacked in savestate and GPIO input support for BeagleSNES. The manual was up to about 50 pages by this point.



I began designing a controller cape that would turn the BBB into a proper video game console:



I also began looking at other emulators (VBA-M and FCEUX) and rolling them into the codebase. Unfortunately, VBA-M and FCEUX are GPL and SNES9X has its own license, so they can't all live in the same codebase. I realized I'd have to break it out into an emulator for GBC, GBA, and NES that also could spawn another process for SNES.

I also wrote and presented a research paper at the International Symposium on Software Testing and Analysis. The paper shows a software framework that I developed that uses whole-system emulation to analyze malware samples:

http://lcs3.syr.edu/faculty/yin/pubs/issta14.pdf

In the very loosest sense, you can say that I'm getting a PhD in emulation. For all those family members that said that I was wasting time playing video games all of those years: Suck it.

Time spent at this point: 30 months.

I experimented with a variety of different BBB kernels and began sending back patches and bug reports to fix various things. I really wanted to get OpenGL ES working on that thing. I started hacking together my texture mapping stuff for hardware scaling with OpenGL ES.

An acquisitions editor for a publisher sent me a mail out of the blue and said that his company would like me to write a book on Android and hardware interfacing on the BBB. I didn't have time, but I agreed anyway because I am an idiot. I wrote that whole drat book in six weeks. I'd work all day, come home, and then write for four to five hours each night. I'd get about 20 hours of writingin in each weekend. Rough drafts are in to the editors and are out for technical review right now. It will probably be out in print in January. Here is the example circuit from chapter 6:



Time spent at this point: 34 months.

And here we are. I don't know about you guys, but I feel really drat tired. I need a nap.

Adbot
ADBOT LOVES YOU

Suspicious Dish
Sep 24, 2011

2020 is the year of linux on the desktop, bro
Fun Shoe
I want to read that book. If I buy the book, will you get royalties or paid in some way? I want to make sure you get some cash for all this effort.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply