<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Nistur</title>
	<atom:link href="http://nistur.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://nistur.com</link>
	<description>Diary of a Slacker</description>
	<lastBuildDate>Fri, 11 May 2012 08:36:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>On the subject of GUI</title>
		<link>http://nistur.com/on-the-subject-of-gui/</link>
		<comments>http://nistur.com/on-the-subject-of-gui/#comments</comments>
		<pubDate>Fri, 11 May 2012 08:36:35 +0000</pubDate>
		<dc:creator>Nistur</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://nistur.com/?p=469</guid>
		<description><![CDATA[Finding the right way to do your user interface is always a sticky problem (I&#8217;m sorry, I couldn&#8217;t resist the pun) But it&#8217;s true. I&#8217;ve now had the (dis?)pleasure of working with several GUI systems both through work and outside of it. There have been a great many people who have attempted to tackle &#8220;The [...]]]></description>
			<content:encoded><![CDATA[<p>Finding the right way to do your user interface is always a sticky problem (I&#8217;m sorry, I couldn&#8217;t resist the pun)</p>
<p>But it&#8217;s true. I&#8217;ve now had the (dis?)pleasure of working with several GUI systems both through work and outside of it. There have been a great many people who have attempted to tackle &#8220;<a href="http://www.shamusyoung.com/twentysidedtale/?p=15633">The GUI Problem</a>&#8221; online. I believe I have the reason why there are so many different solutions, but they&#8217;re all awkward to use.</p>
<p>GUI is easy.</p>
<p>It&#8217;s just 2D. We work in 3D now, the 2D stuff is no problem.</p>
<p>Right?</p>
<p>NO!</p>
<p>Getting a nice GUI system is very difficult. The system itself should take just as much care, architecting and design as a physics solution. On top of that, usually, you don&#8217;t want programmers just tweaking values, so you have to spend a good deal <span style="text-decoration: underline;">more</span> time on top of that making an artist/designer interface. These things seem to have been overlooked.</p>
<p>Let&#8217;s take a step back and look at the different types of GUI solution available at this point, in particular for games. I will attempt to not use names to protect the guilty (ha!)</p>
<p>Firstly we have the most basic of basic, an <a href="http://en.wikipedia.org/wiki/Immediate_mode">Immediate Mode</a> system. This is very quick to develop, and pretty quick to prototype. It&#8217;s straight forward. It&#8217;s clean. You tell it to draw a button and it draws a button. So what&#8217;s the problem here? Well, unless you are one of the incredibly rare crossbread of programmer/designer/artist, you will find this incredibly cumbersome. Yes, you can throw together a layout pretty quickly, but you actually have to do the throwing together in code, and it usually ends up with the GUI code being spread throughout the project, as different things might need to display things at different times. If you plan this well, you can consolidate all the GUI code in one place, but even then it becomes unsightly and awkward.</p>
<p>I will skip the more standard code driven system as it has many of the same shortcomings as Immediate Mode, apart from, for the most part, you can init and forget, instead of manually drawing every image every frame. But that leads me nicely onto a data driven system. For the most part these work in a very similar init and forget way, but there can be little to no actual GUI code written. The GUI layout is loaded in as data files. The benefit here is that you can quickly change the GUI without recompiling. This is actually a very good system, as long as it doesn&#8217;t take 30,000,000 XML (yeuch!) files to be written before you can display anything.</p>
<p>Before I go on, I should say that at no point, yet, have we seen an editor. It&#8217;s even safe to say that for the code driven systems, it&#8217;s near impossible to make one (unless you want to make an editor which outputs code, which I guess is an option&#8230;) This displays one of the biggest issues with GUI systems. Editors are always an afterthought. GUI systems are written by programmers, so they have programmer interfaces first and foremost. Editors come after if/when there&#8217;s time and they seem even more of a tacked on addition to the tacked on feel of the GUI system itself.</p>
<p>Finally, the most favourable option right now, is to use an existing format for GUI. The &#8220;industry standard&#8221; is using Adobe Flash through Scaleform. I myself have used something similar. Artists love it. They can design the GUI in an environment that they are familiar with and they can have access almost straight away to a lot of shiny features and animations. Leaving any prejudice of Flash behind, the IDE is possibly the pinnacle of what could be considered GUI editor design.</p>
<p>Am I saying we should all be using several thousand dollar flash libraries for our GUI? Definitely not. This causes a lot of issues, if you take a moment to think about it, it becomes obvious. Flash is designed to be entirely standalone. True, you can send things across the net to have your flash application talk to other things, but in general, it doesn&#8217;t expect to be communicating with anything else.</p>
<p>Very usefully, flash actually is quite flexible. You can try to call a function in actionscript which doesn&#8217;t exist. Most languages, if you tried to do this, at best you get a message our assert saying it can&#8217;t find the function, after which behaviour may be a little unexpected. At worst the program crashes, that&#8217;s if it&#8217;s allowed to compile. Flash shrugs it&#8217;s shoulders and continues as if nothing happened.</p>
<p>This means that within your game, you can implement some new magic functions and when you do any testing add a standalone flash application, it will just ignore it. This works absolutely great for menus as they can be, for the most part, pretty self contained. When it comes to in game GUI, you usually require a much tighter link with game code to make it feasible.</p>
<p>Basically, what I&#8217;m getting at is that the best solution right now can only be a series of hacks.</p>
<p>I&#8217;m not denying that they are good hacks, but they are hacks. And hacks are almost always the weak point.</p>
<p>There is one more solution that&#8217;s come up more recently which is to use a 3D editor to lay out the GUI in 3D, then draw it using an orthographic camera. This is a great idea in principle, it makes the GUI part of the actual game world so it makes tying into game code almost trivial. It allows you to use whatever editor software you already have set up for game design. I <span style="text-decoration: underline;">still</span> have issue with this. The best 2D artist/designers I know are just that, 2D designers. Sure, we can ask them to learn 3D tools, but it&#8217;s a workflow that they&#8217;re not necessarily most comfortable with.</p>
<p>There are a great many things to consider here. Am I just going to sit back and complain? Well, I&#8217;m tempted now. But I can make a couple of suggestions. Most of which I am attempting to address in the <a href="http://nistur.com/engine2/">combination</a> of <a href="http://maratis3d.org">Maratis</a> and <a href="http://love2d.org">Löve2D</a>. First of all, the system should be pretty easily integrated with any game code. This will come down to the API I expose on either side of the interface but as the interface can be entirely open (unlike the flash layer) then that shouldn&#8217;t be an issue at all. Secondly, the editor. I would absolutely love to be able to use an existing and proven editor, but that would probably end up as another series of hacks. The main thing is that, from the word go, the editor should be planned for. Finally. One incredibly important thing which I haven&#8217;t mentioned yet, and possibly should have, is flexibility. No GUI solution is ever complete. There are always bespoke things that the game you&#8217;re working on will need. Making the system flexible enough to extend is fairly easy, making the editor accept and respect the extended features is a little more complicated, but should be do-able.</p>
<p>Anyway, I think I&#8217;ve ranted enough about this topic. I would love to hear if someone has any experience with GUI systems, especially if they think they&#8217;ve found a good one. Also, with more user interfaces now moving into 3D, is this even relevant any more?</p>
]]></content:encoded>
			<wfw:commentRss>http://nistur.com/on-the-subject-of-gui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finally getting somewhere</title>
		<link>http://nistur.com/finally-getting-somewhere/</link>
		<comments>http://nistur.com/finally-getting-somewhere/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 22:28:53 +0000</pubDate>
		<dc:creator>Nistur</dc:creator>
				<category><![CDATA[Maratis]]></category>
		<category><![CDATA[MParticle]]></category>

		<guid isPermaLink="false">http://nistur.com/?p=464</guid>
		<description><![CDATA[Having textured particles seems like a very important thing to have. It&#8217;s been a slog to get there though. I really don&#8217;t know why it was so difficult.I&#8217;ve had particles spraying out in pretty patterns for a while, but I couldn&#8217;t figure out why I couldn&#8217;t get textures on the sprites. The first issue was [...]]]></description>
			<content:encoded><![CDATA[<p>Having textured particles seems like a very important thing to have. It&#8217;s been a slog to get there though. I really don&#8217;t know why it was so difficult.<span id="more-464"></span>I&#8217;ve had particles spraying out in pretty patterns for a while, but I couldn&#8217;t figure out why I couldn&#8217;t get textures on the sprites. The first issue was that I had a planned holiday. I was going to spend a week visiting family. So I set up a laptop for development work. I made sure I had everything up to date and that Maratis ran smooth enough on it.</p>
<p>I failed to notice the supported version of OpenGL.</p>
<p>The Intel i915 chip meant that it only supported OpenGL 1.4.</p>
<p>OpenGL prior to 1.5 would only support one texture coordinate per point.</p>
<p>So yes. I got one texel per particle.</p>
<p>While trying to figure out what I was doing wrong, I made some headway in terms of allowing the particle system to not only have point sprites. As I&#8217;ve spent all this time trying to get point sprites to work, you might think &#8220;why bother&#8221;. Well, the thing is, point sprites are very limited. You can&#8217;t really do arbitrary rotations per particle, from what I can see. You can&#8217;t specify different sizes per sprite. You can&#8217;t have animated textures. But what you can have is a great many particles, very very cheaply. I really have to start tying the profiler into this, but I&#8217;m pretty sure that, even with my pretty simple calculations in the update, it&#8217;s still more likely to be a bottleneck than the rendering. Hopefully soon I will have empirical evidence as to what the performance is like. Before I do that, though, I think it might be a good idea to know what sort of numbers I would aim for. I will probably start thinking about that within the next week.</p>
<p>It turned out that I did end up that my netbook, which I also had with me, did support OpenGL 2.1, unfortunate that I didn&#8217;t realise until the last day, after I&#8217;d spent a day reformatting and setting it up.</p>
<p>Anyway. I did finally make some breakthroughs when I got back home. It turns out that, for some reason, I cannot specify a colour array for a vertex array of point sprites. I was either getting it drawing everything in black, or not drawing at all. Things started working a bit better when I removed the colour array altogether. I&#8217;m not entirely sure what I can do in this case, because, with the way things are set up, I need the colour array to hide the inactive particles.</p>
<p>But, I have textures. And I made a little <a href="http://www.youtube.com/watch?v=i20skmd_zi0">video</a> to show it. So that&#8217;s a start.</p>
<p>What is left to do then? Well, a great deal. As I&#8217;ve said, I want to do some profiling. The reason is that potentially I still would like to move the update functionality to the GPU. Any GPU work would not be done any time soon, but need to be considered with any data/design decisions. There&#8217;s still the standard billboard quad sprites which need to be implemented, along with extra features for them, like rotations, and growth. Finally there&#8217;s the world interaction, I want to be able to block out a room, and get particles to fill it with smoke, then drop an object into it and have the smoke swirl around it. I don&#8217;t think that needs a lot of physics work. In fact, I think we can probably get away with AABBs for the most part of world collision, maybe a couple of spheres, and simple sphere collision between particles.</p>
<p>There&#8217;s still a lot to do, and unfortunately a lot still to think about and plan, so, while I try to make decisions about some of them I will tidy up the interface, tidy up what&#8217;s exposed to the editor, and maybe make some examples of what currently works. See how things go.</p>
]]></content:encoded>
			<wfw:commentRss>http://nistur.com/finally-getting-somewhere/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Light at the end of the tunnel</title>
		<link>http://nistur.com/light-at-the-end-of-the-tunnel/</link>
		<comments>http://nistur.com/light-at-the-end-of-the-tunnel/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 23:03:28 +0000</pubDate>
		<dc:creator>Nistur</dc:creator>
				<category><![CDATA[Maratis]]></category>
		<category><![CDATA[MParticle]]></category>

		<guid isPermaLink="false">http://nistur.com/?p=461</guid>
		<description><![CDATA[I sure as hell hope it&#8217;s not the death star exploding. I have to admit, I&#8217;ve not done anything overly interesting with the particle system as of yet. It&#8217;s still just spraying out a few hundred black dots. I unfortunately haven&#8217;t really had time to sort the textures for the point sprites, nor have I [...]]]></description>
			<content:encoded><![CDATA[<p>I sure as hell hope it&#8217;s not the death star exploding.<span id="more-461"></span></p>
<p>I have to admit, I&#8217;ve not done anything overly interesting with the particle system as of yet. It&#8217;s still just spraying out a few hundred black dots. I unfortunately haven&#8217;t really had time to sort the textures for the point sprites, nor have I had time to add any new features. It&#8217;s been a lazy day. I have, however, done some research into OpenCL.</p>
<p>Now. At this stage, OpenCL is overkill. I don&#8217;t even have a fully functional particle system. However, it&#8217;s something I don&#8217;t know much about, and it&#8217;s definitely interesting. Plus, I think it would be a nice feature at some point to be able to have an options menu somewhere and say &#8220;High Quality Visuals&#8221; or something&#8230; anyway, I&#8217;m getting ahead of myself. I will be from for the majority of this next week, I&#8217;m going to take my netbook with me, but it isn&#8217;t designed for anything particularly heavy. I have, however, been trying to set it up so I can easily develop on it, so I&#8217;ve been pulling all my projects, making sure they compile, run etc and that I have the latest version of Maratis for them to compile against. After this was all sorted, as well as non-computer related tasks, I had myself a couple of hours, so I thought I would dip into OpenCL briefly. Actually, that&#8217;s not strictly true, I had a random urge to look at functional programming languages. After I scraped what was left of my brain up, I attempted to look at OpenCL.</p>
<p>I had a couple of things in mind when I was looking into what I can do. Firstly and most importantly for me, how good is the documentation/support. A library can be the best thing since computers made beeping noises to connect to the internet, but without some clue as to what to do with it, it&#8217;s near to useless. I don&#8217;t have time to practically reverse engineer things. So, what did I find. Well, to be honest, I was a little let down. There are certainly books and tutorials and everything you&#8217;d expect, but not the plethora of choices I&#8217;m used to when I type in <em>&lt;something&gt; tutorial</em> into Google. On the other hand, I didn&#8217;t have to wade through too much useless garbage to find what I wanted, so I guess I can&#8217;t complain too much. Secondly, how easy was it to install and set up. I would give it a little flexibility here as there are 3 major GPU manufacturers, and one organisation trying to write a standard. I got pretty much what I was expecting. Everything installed smoothly and I had an empty project linking to the newly installed libraries within a matter of minutes. Finally, the API itself. Now, I definitely haven&#8217;t spent enough time to be able to tell you how much I like or dislike it, but it seems decently structured. Everything is in the <em>cl</em> namespace, and then neatly sorted within that. I was a little disappointed to see that &#8220;Hello World&#8221; was 93 lines long, plus the kernel, but having sorted through the code, the majority is aggressive error checking and boilerplate code.</p>
<p>So, my current opinion? Well, I wasn&#8217;t horrified by anything I found. I was quite happy with the API and I think adding OpenCL support to MParticle would be a worthwhile investment at a later date. It will be a considerable amount of work so before I begin working I think I will wait until I know that what I am wanting to do with the particles is definitely too much for the CPU.</p>
<p>There is one more thing that I would like to add before I finish up tonight. As MPlugin slowly gains more functionality, I would appreciate some feedback as to how people would use it. Unfortunately with the plugin code not being even in the upstream Maratis svn repository, I can&#8217;t realistically expect people to test a plugin that they&#8217;d have to totally recompile Maratis from an unofficial source for. However, if someone is interested, feel free to send me a message and we can try to arrange things to be set up in a more comfortable manner.</p>
<p>So, what do people think? Am I aiming too high too early with even considering OpenCL now? Have I forgotten something in my research? Can you suggest some way to make testing MParticle a bit nicer? Whatever it is, I&#8217;d like to hear your thoughts.</p>
]]></content:encoded>
			<wfw:commentRss>http://nistur.com/light-at-the-end-of-the-tunnel/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Skipping ahead</title>
		<link>http://nistur.com/skipping-ahead/</link>
		<comments>http://nistur.com/skipping-ahead/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 14:03:50 +0000</pubDate>
		<dc:creator>Nistur</dc:creator>
				<category><![CDATA[Maratis]]></category>
		<category><![CDATA[MParticle]]></category>

		<guid isPermaLink="false">http://nistur.com/?p=454</guid>
		<description><![CDATA[I&#8217;ve still not got point sprites working, but I&#8217;ve looked into it and it should be possible fairly easily, but I&#8217;ve finally made a fountain. It may not look like much, indeed, it&#8217;s not much at all really. It sprays out 1 particle every 5ms with a random spread up to a maximum of 20 [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">I&#8217;ve still not got point sprites working, but I&#8217;ve looked into it and it should be possible fairly easily, but I&#8217;ve finally made a fountain.<span id="more-454"></span></p>
<p>It may not look like much, indeed, it&#8217;s not much at all really. It sprays out 1 particle every 5ms with a random spread up to a maximum of 20 degrees. It also has &#8220;gravity&#8221; acting on it. Although, MPhysicsContext doesn&#8217;t allow you to retrieve the world gravity, so I have hard coded that. Everything else is exposed to the editor.</p>
<p><a href="http://nistur.com/wp-content/uploads/2012/04/Screenshot-2012-04-06_14.20.18.png" rel="lightbox[454]"><img class="aligncenter" title="The beginning of great things" src="http://nistur.com/wp-content/uploads/2012/04/Screenshot-2012-04-06_14.20.18.png" alt="" width="621" height="480" /></a></p>
<p>So far, the particle emitter will only create 1,000 particles. I&#8217;ve attempted to increase the emitter to 10,000, but it takes a long time, then hangs. Not quite sure why at this point, but that shouldn&#8217;t be too much of an issue really.</p>
<p>What&#8217;s next for the particle system? There&#8217;s still a lot to do. I think, potentially, the next logical step is to actually texture the points, so we can start creating pretty particles. After that, there&#8217;s quite a few other things to do, like semi-physics collision between the particles (I see a significant framerate sink here) and also allowing for some more fancy features, like spinning particles.</p>
<p>Which leads me onto the next point. We can&#8217;t use point sprites for everything. They will be ideal for displaying a large amount of particles, as they&#8217;re cheap, but they don&#8217;t allow for things like rotating the sprites. Which means for some particle emitters, we might want to add a flag to draw the particles as tri lists. That would mean we not only have 6 points per particle, but we also have to maintain a separate array for this, possibly create or update it every frame. I am willing to bet that this will have a reasonable performance hit, but we can then also only draw the active particles. Particle emitters which have rotations will probably have to be kept to a smaller amount, but that shouldn&#8217;t be too much of an issue. Non-rotating particles can be kept as point sprites.</p>
<p>Anyway, that&#8217;s it for now. Now it&#8217;s time for lunch. Then probably attempting to texture the particles. Wish me luck?</p>
]]></content:encoded>
			<wfw:commentRss>http://nistur.com/skipping-ahead/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Planning</title>
		<link>http://nistur.com/planning/</link>
		<comments>http://nistur.com/planning/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 14:35:38 +0000</pubDate>
		<dc:creator>Nistur</dc:creator>
				<category><![CDATA[Maratis]]></category>
		<category><![CDATA[MParticle]]></category>

		<guid isPermaLink="false">http://nistur.com/?p=448</guid>
		<description><![CDATA[So, I&#8217;ve been doing some planning. Trying to work out how exactly I want this particle system to come together. I&#8217;ve looked over a couple of different particle systems and guides on various things and tried to come up with a simple, clean way to sort this. I don&#8217;t think it exists. What I mean [...]]]></description>
			<content:encoded><![CDATA[<p>So, I&#8217;ve been doing some planning. Trying to work out how exactly I want this particle system to come together. I&#8217;ve looked over a couple of different particle systems and guides on various things and tried to come up with a simple, clean way to sort this.<br />
<span id="more-448"></span></p>
<p>I don&#8217;t think it exists. What I mean is. I don&#8217;t think there&#8217;s a &#8220;nice&#8221; way to organise the data, at least for what I&#8217;m planning. I would like to be able to, potentially, have multiple particle emitters interacting with each other. A direct example is, in my game, I want to have a smokey room. Potentially I can put an emitter near the ceiling which will create a smokey ceiling. That should work reasonably well. But I also would like to have someone walk into the room and have them smoking, and their smoke join with the smoke on the ceiling. I guess I could just have separate emitters and them not actually effect one another, it would probably look alright, but I think, if possible, I&#8217;d like the ability to have particle systems merging.</p>
<p>So, what that suggests is splitting the code into 3 different classes, at least initially. The first will be the emitter itself, this will be a behaviour and be able to attach onto any object. I would like to have a derived MObject3d, but I don&#8217;t think that it&#8217;s possible at this stage, so I&#8217;ll make do. The second is a particle system. I&#8217;m playing with the idea of having multiple systems, but I think I&#8217;m probably going to stick with a singleton. This will be in charge of updating and managing the particles. Finally, the particles themselves. As far as I can see, they don&#8217;t need to be much more than pure data.</p>
<p>But, with one &#8220;system&#8221;, we can maybe have crazy things happening, like water getting blocked by smoke and stuff, right? Well, yes and no. I&#8217;m hoping to put in some sort of rudinemtary physics, probably bounding spheres on the particles, and then give each one a mass, so water should, theoretically, be able to push the smoke aside in a semi-realistic manner. Whether this is going to work or not is a different matter. Secondly, you could easily add flags to each emitter, stating different emitter types it doesn&#8217;t interact with, so the smoke wouldn&#8217;t be affected at all. That would obviously be a lot cheaper and might avoid nasty effects of cheap physics. We&#8217;ll see how this goes.</p>
<p>So, my issue from the previous post. Where does the positional data live? Indeed, where is the ownership of any data at all? Does the particle manage it&#8217;s own lifetime? Does the particle system? Or the emitter that created it? This is where I feel it really gets messy. When you start thinking of the fact that you could potentially have thousands of particles to manage every frame, some newly created, some about to die, you don&#8217;t really want a huge load of reallocations. So, it&#8217;s probably best to keep a pool of particles within the system. That way we can  just have a giant array within the particle system that we can use. But the issue still stands about the positional data. We really want one big array of positions in the emitter, so we can draw it as one array of point sprites. So we have to have a similar pool within the emitter of positions, then, when we emit a particle, we give it the address of it&#8217;s own position. For both these pools, we also need to keep some sort of list of the available free data which we can use for allocating new particles.</p>
<p>It&#8217;s sort of nasty having the particles themselves being managed by one thing and their position being owned by the emitter, but I can&#8217;t think of a much nicer easy to do it. At least with this plan, the particles are being managed separately so we can make them interact, but don&#8217;t have to build a new vertex array every frame.</p>
<p>What about dead particles though? Well, nonactive ones can be skipped from updates with a simple flag. Removing them from being drawn is a slightly bigger issue. Ideally, we don&#8217;t want them in the vertex array at all, so they won&#8217;t take up draw time. However, as we probably want random lifetimes fort particles (within a range) then there&#8217;s no simple easy to guarantee which ones will be alive, again without rebuilding the vertex array every frame. The solution I will try is to also have a colour array. Usually this can be set by the particle definition, our even interpolated over time, but dead particles will then be able to be made totally transparent. They are still being drawn, which isn&#8217;t great, but I hope, as I would like to be using point sprites, that this overhead will be less than the alternative. There will be further investigation, I&#8217;m sure.</p>
<p>So, all this talk, no action? Not at all. I haven&#8217;t pushed anything to github yet, because I have nothing much to show, I&#8217;m still in a planning phase really. I do, however, have the majority of what I&#8217;ve got mentioned above. I don&#8217;t have any physics or rendering, but I have the majority of the framework in place to do these things. And thanks to debuggers, I can verify that everything is working pretty well.</p>
<p>I just hope I haven&#8217;t overlooked anything major.</p>
<p>Please let me know what you think. Do you think this is likely to work or had something I&#8217;ve suggested got a much larger overhead than could be usable?</p>
<p><em>Edit: So, I&#8217;ve got the particles moving &#8220;up&#8221; and also rendering. I&#8217;ve already noticed two problems. The first is that I can&#8217;t seem to be able to set the alpha on the particles. Not too big an issue, I probably don&#8217;t have alpha blending on or something, I&#8217;m sure that&#8217;s solvable. The second is that, from what I can tell, Maratis doesn&#8217;t support Point Sprites as a primitive type (yet). I guess this means that I&#8217;m going to be modifying Maratis code some more. Code will be uploaded to github presently though</em></p>
]]></content:encoded>
			<wfw:commentRss>http://nistur.com/planning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>One step forward and two steps back</title>
		<link>http://nistur.com/one-step-forward-and-two-steps-back/</link>
		<comments>http://nistur.com/one-step-forward-and-two-steps-back/#comments</comments>
		<pubDate>Wed, 04 Apr 2012 18:12:54 +0000</pubDate>
		<dc:creator>Nistur</dc:creator>
				<category><![CDATA[Maratis]]></category>
		<category><![CDATA[MParticle]]></category>

		<guid isPermaLink="false">http://nistur.com/?p=446</guid>
		<description><![CDATA[Unfortunately, I&#8217;ve been having rather more trouble with the Particle Systems API (PAPI) than I was expecting. As such I&#8217;ve given up on that particular avenue of investigation. It would be different if it was under active development, but as the website doesn&#8217;t seem to have been updated in 4 years, I don&#8217;t think I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>Unfortunately, I&#8217;ve been having rather more trouble with the <a href="http://particlesystems.org/">Particle Systems API</a> (PAPI) than I was expecting. As such I&#8217;ve given up on that particular avenue of investigation. It would be different if it was under active development, but as the website doesn&#8217;t seem to have been updated in 4 years, I don&#8217;t think I&#8217;m gaining enough to keep on with the library.</p>
<p><span id="more-446"></span></p>
<p>Having said that, not everything is a loss. I mean, I have written a (small) particle system before, but I definitely think I&#8217;ve learned from prying into PAPI. Hopefully I can make a better system now than I did a couple of years ago.</p>
<p>So, what was the problem with PAPI? It seems like only yesterday I wrote about it. Am I giving up on it too soon?</p>
<p>Woh. What&#8217;s with all the questions? Right, so. It wasn&#8217;t yesterday, it was actually exactly a week ago I wrote about it, but I&#8217;ve actually been wrestling with some of the PAPI stuff for a few days before I wrote anything. As such, I think I&#8217;ve given it more than enough time and it&#8217;s come up with a lot of little perculiarities which caused problems.</p>
<p>The main problem is one I&#8217;m going to have to overcome at some point myself. I&#8217;m not saying the solution that PAPI had was incorrect, but it definitely wasn&#8217;t suited to what I want to do. The problem is that each particle is it&#8217;s own entity. It has it&#8217;s own age, mass, velocity, position. That&#8217;s all absolutely correct. It makes perfect sense to bundle these up together, in a struct for example. But then, when you get around to render them, you don&#8217;t need all this information. All you need is the position. In fact, to do the fastest rendering, you need all of the positions in one big array which you can pass to the GPU.</p>
<p>The way that the PAPI examples worked is that they just gave an array of Particle structs to the GPU and then used the stride to skip the bits that it didn&#8217;t need. I checked the size of these structs, 144 bytes. A position is 3 floats. 4 bytes each. Assuming a particle system of, let&#8217;s say 1000 particles, that works out at a little over 140kilobytes for the array in place of a little under 11kilobytes. Now, I haven&#8217;t checked whether OpenGL is clever enough that, when you give it a vertex array, tell it that you&#8217;re using floats, but give it a stride of 144, it would not send the data that isn&#8217;t needed to the GPU. If it does that, I&#8217;m impressed, but even then, it&#8217;s probably extra overhead, having to seek. Either way, I don&#8217;t like it.</p>
<p>I said that it&#8217;s the main problem even though I don&#8217;t know if it actually caused any problems. The reason for that is quite simple. I spent a while looking into the code and, much as I understand roughly how the system works, a lot of it just seems to spring out of nowhere. Like the vertex array, it took me a little while to figure out why the stride was 144, for example. Hopefully, if I try and write one from the engine side, rather than writing a system from the particle side and trying to make it generic, it might be clearer, at least in the context of Maratis. A particle system isn&#8217;t overly hard to write, after all.</p>
<p>So, if I&#8217;m going to start writing this myself, how am I going to start? Gah. To be honest, I have no idea. I&#8217;ve been looking into different things and trying to decide what the best plan of attack is. As I&#8217;ve mentioned in the previous post, I would like the posibility of moving the bulk of the calculations onto the GPU at some point, if they become too heavy. I haven&#8217;t done any GPU programming yet though. I also like the idea of potentially tying it in with Bullet. Although that would probably remove all chances of GPU work.</p>
<p>I have yet to do a little more planning on this before I get started, but, so far, my proposed plan of attack is to read up on the GPU stuff, but not intend to implement anything at this stage. With some extra knowledge, I should be able to write it in a way that leaves it open for that later. I can then start working on a simple particle system, just working with some simple trivial physics calculations. At that stage, I should be able to assess performance and what has the greatest potential. I expect, what I would probably end up doing is to add some very basic physics shapes as particle blockers of some form. Probably even keeping them axis aligned. Then they can be added to objects in the world that particles are meant to interact with. In that way, I don&#8217;t rely on the whole Bullet collision system, and I&#8217;ve got some physics to get some collision objects that I can have particles interact with.</p>
<p>I don&#8217;t suppose anyone has any experience with this at all? I&#8217;d love to hear what you&#8217;ve got to say about any of this.</p>
<p>More updates once I&#8217;ve done some more planning.</p>
]]></content:encoded>
			<wfw:commentRss>http://nistur.com/one-step-forward-and-two-steps-back/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How fast can we go?</title>
		<link>http://nistur.com/how-fast-can-we-go/</link>
		<comments>http://nistur.com/how-fast-can-we-go/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 21:38:17 +0000</pubDate>
		<dc:creator>Nistur</dc:creator>
				<category><![CDATA[Maratis]]></category>
		<category><![CDATA[MProfiler]]></category>

		<guid isPermaLink="false">http://nistur.com/?p=391</guid>
		<description><![CDATA[Ok, so this might not be the most glamorous plugin in the world, but it&#8217;s useful. The idea of this plugin is that it will be able to create a profile of the engine and game (and other plugins) in order to tell you how much time is spent in what parts, helping to identify [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, so this might not be the most glamorous plugin in the world, but it&#8217;s useful.</p>
<p><span id="more-391"></span></p>
<p>The idea of this plugin is that it will be able to create a profile of the engine and game (and other plugins) in order to tell you how much time is spent in what parts, helping to identify bottlenecks.</p>
<p>So, let&#8217;s talk about the aim of this little beast. Starting at the beginning of the minimum functionality then.</p>
<ul>
<li>Simple plugin that, when found in the Maratis &#8220;plugin path&#8221; will spew the time spent in each function in Maratis Engine/Core/Gui/Editor/Player to stdout.</li>
<li>Simple config file and ability to output to stdout and/or file (on close)</li>
<li>MGui popup window with profiling information displayed in real time</li>
<li>Ability to track memory usage, creating a second tab for the MProfiler window</li>
<li>If I get to this stage, might be nice to generate graphs, have config options in another tab etc.</li>
</ul>
<p>Now, for something which doesn&#8217;t add directly to the game I&#8217;m making, this seems like a lot of work. However, it&#8217;s something I think will will be both useful for the game, but also for testing the plugin architecture and workflow. Things like working out a standard way to sort the plugin UI, doing a relatively easy plugin, seem like a good way to start things.</p>
<p>Starting at the beginning then, it&#8217;s probably quite obvious that I haven&#8217;t split up how to make the profiler at all. There&#8217;s a very simple reason for this. That is that I don&#8217;t plan on writing one. In fact. I&#8217;ve basically already completed this stage. I have chosen to use <a href="http://code.google.com/p/shinyprofiler/">Shiny Profiler</a> as the base for this plugin. It claims to be lightning fast and well documented. We shall see.</p>
<p>So, the way that Shiny works is that it requires tags to be put into the source code, they are macros which will automatically interact with the profiler. In itself, it&#8217;s very simple to add to an existing project, the issue is that it&#8217;s not quite the design I had in mind. For this to work, shiny would have to be a library, compiled into Maratis. As we&#8217;re making a plugin which shouldn&#8217;t always be available, this seems like a bad plan.</p>
<p>I have had to do a little bit of surgery on the Maratis source code to get it to work, which I will explain in the next post, but the basics is that there is a MProfilerContext in Maratis Engine which is null by default and a series of macros which evaluate to nothing in release builds, but in debug builds look for a MProfilerContext and send information to it. The plugin then registers itself as the current profiler, when loaded, and awaits information to be poured it&#8217;s way.</p>
<p>Once that&#8217;s hooked up, every function within the Maratis code has to have these tags put at the beginning of them. This is a LOT of tedious work. I could probably write a script that does it, but I haven&#8217;t yet. I&#8217;ve done the majority of Maratis Editor and tested it to get some sensible numbers coming out. Just have all the other tags still to put in, then I can move onto part 2.</p>
<p>Shiny Profiler doesn&#8217;t sort memory profiling. I&#8217;ve found no libraries which would do that actually. That&#8217;s not too much of an issue, although it will take further Maratis source butchery. I&#8217;m also not sure, at this point, how the best way to do it is. Of course the way to sort it is to implement a custom new/delete. These can then do a similar thing to the tags and check if there is a current profiler. This has the main problem that there are potentially a lot of new/delete calls before the plugin gets initialised. I guess it&#8217;s not too much of an issue as, in general, people would be most interested in profiling the memory usage in their game, rather than the engine. Also, as it will be using the tags to provide the scope in the profiler and the engine will most likely be compiled without the tags, it&#8217;s only going to be relevant for the game-side stuff anyway.</p>
<p>If you want to grab the code, it&#8217;s up on <a href="https://github.com/nistur/MProfiler">Github</a>, as usual, but it currently won&#8217;t work without some Maratis changes. Let me know if anyone&#8217;s interested and I&#8217;ll package them up for you and stick them somewhere.</p>
<p>Well, that&#8217;s about it for now. Does anyone have any comments? Much as I&#8217;ve done a little of this at work, I&#8217;ve been using systems that have already been set up, so I&#8217;m pretty much flailing in the dark here. But doing so happily.</p>
]]></content:encoded>
			<wfw:commentRss>http://nistur.com/how-fast-can-we-go/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sparkles Ahoy!</title>
		<link>http://nistur.com/sparkles-ahoy/</link>
		<comments>http://nistur.com/sparkles-ahoy/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 13:54:08 +0000</pubDate>
		<dc:creator>Nistur</dc:creator>
				<category><![CDATA[Maratis]]></category>
		<category><![CDATA[MParticle]]></category>

		<guid isPermaLink="false">http://nistur.com/?p=386</guid>
		<description><![CDATA[So, this is probably redundant, as I seem to remember Anaël mentioning that he&#8217;s got some code for a particle system already written, but I thought it would be a good test of the plugin system to try and have a particle system and editor plugin. I&#8217;ve written a small particle system before. It wasn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>So, this is probably redundant, as I seem to remember Anaël mentioning that he&#8217;s got some code for a particle system already written, but I thought it would be a good test of the plugin system to try and have a particle system and editor plugin.<br />
<span id="more-386"></span><br />
I&#8217;ve written a small particle system before. It wasn&#8217;t overly impressive but it was functional. I didn&#8217;t think I could very easily write a flexible one though, so why not do what I&#8217;ve been doing recently for a few other things, piggyback off an existing library. Unfortunately there aren&#8217;t an awful lot of particle system libraries which are freely available (everyone rolls their own?) but I did come across <a href="www.particlesystems.org/">Particle Systems API</a> which seems to do a lot of what I want. The rendering ended up being incredibly simple and implemented in the example program, rather than the library itself, which is nice.</p>
<p>I have begun work on attempting to integrate it with Maratis/MGui as a &#8220;behavior&#8221; in a dll. Unfortunately, at this point, it doesn&#8217;t seem to work. Ok, more than that, it crashes. Still, I&#8217;m happy that it actually compiles with the minimal work I&#8217;ve done. I will look into why it crashes and fix that. If anyone wants to take a look at the code, it&#8217;s up on <a href="https://github.com/nistur/MParticle">github</a> for all to see.</p>
<p>So, what are the goal of this particle system. A quick list to see what we&#8217;re wanting to do:</p>
<ul>
<li>Be able to place multiple particle emitters around the level. Probably as a behaviour is easiest.</li>
<li>Be able to tweak emitter variables from within Maratis Editor and see things update within the editor without running the game.</li>
<li>Potentially use MPhysicsContext (Bullet) for particle behaviour.</li>
<li>Potentially move particle behaviour onto GPU.</li>
</ul>
<p>Now, it&#8217;s unlikely that we can do both using physics for the behaviour and moving it onto the GPU (although Bullet now can do calculations on the GPU). It just depends how things look, how it will evolve I think.</p>
<p>The thing I would really love is to be able to create a particle system which emulates a cloud of smoke and reacts to the player moving through it, swirling around them. I&#8217;ve looked into fluid dynamics and I think, in order to model this on the scale of a particle system, it really should be on the GPU, but using a physics system might be able to approximate it well enough.</p>
<p>What do people think? Any experiences at all with this?</p>
]]></content:encoded>
			<wfw:commentRss>http://nistur.com/sparkles-ahoy/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Engine^2</title>
		<link>http://nistur.com/engine2/</link>
		<comments>http://nistur.com/engine2/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 12:43:53 +0000</pubDate>
		<dc:creator>Nistur</dc:creator>
				<category><![CDATA[Maratis]]></category>
		<category><![CDATA[MLove]]></category>

		<guid isPermaLink="false">http://nistur.com/?p=379</guid>
		<description><![CDATA[So, I&#8217;m using Maratis. It&#8217;s a great little 3D engine, it does everything I want, or close enough. Why would I be considering integrating an existing 2D engine with it. Surely that is a lot of work for no real reason. Well, yes and no. Maratis does one thing really well and that is that [...]]]></description>
			<content:encoded><![CDATA[<p>So, I&#8217;m using Maratis. It&#8217;s a great little 3D engine, it does everything I want, or close enough. Why would I be considering integrating an existing 2D engine with it. Surely that is a lot of work for no real reason.<br />
<span id="more-379"></span></p>
<p>Well, yes and no. Maratis does one thing really well and that is that it&#8217;s very easy to set up a 3D scene and have something working. I would even say it does it more or less as well as much more mature engines like UDK. What it doesn&#8217;t seem to do well is 2D.</p>
<p><em>&#8220;You&#8217;re making a 3D game, why are you worried about 2D at all?&#8221;</em></p>
<p><em></em>I&#8217;m not as such. But almost every game, whether 2D or 3D has 2D in it somewhere. Menu systems and heads up displays (HUD) are two common offenders. Maratis has an inbuilt UI system for user interface, but it&#8217;s currently not exposed to (game) plugin development and also, it&#8217;s entirely code driven. That&#8217;s great, if you have a coder who is also the artist and designer, but, anyone who has seen my art would understand, I&#8217;m no artist.</p>
<p>The other option in Maratis is to do the UI in a 3D scene and render it without perspective on top of the actual 3D scene. This is actually an acceptable solution as it&#8217;s more or less how any 2D system would do it anyway, but having to do the layout in a 3D editor seems more than a little clunky, and a lot of 2D designers/artists are unfamiliar with 3D stuff, making it a pain in the neck to use for all concerned.</p>
<p>Having said that, I&#8217;m actually pretty good at UI layout. But it&#8217;s usually a tedious to-ing and fro-ing between the person who made a mockup and myself <em>&#8220;move this 2px up and 1px to the right&#8221;</em> etc. What would be ideal is if the artist/designer who made the art in the first place could just save what they&#8217;ve done in some sort of format that the engine could open up and use. Then a programmer can tie in any functionality into the game, either before or after the 2D work has been done.</p>
<p>The first thing that I should mention is that this has been done a lot of times. A lot of AAA games use <a href="http://gameware.autodesk.com/scaleform">Scaleform</a>, which basically renders a Flash swf on top of the game. That, in itself is derived from the public domain <a href="http://tulrich.com/textweb.pl?path=geekstuff/gameswf.txt">gameswf</a> library which I&#8217;ve had some experience with. I decided, much as flash is widely used, I would keep away from it for now.</p>
<p>Enter <a href="https://love2d.org/">löve2d</a>. It&#8217;s an amazing little 2D game engine. All the development is done entirely in lua. It already has several pretty nice looking UI libraries. Now, it&#8217;s more complete than we &#8220;need&#8221; for a UI system in Maratis, it&#8217;s unlikely that UI will ever need Box2D for example, but there&#8217;s no reason to take it out as such. If we could get love2d integrated into a Maratis plugin, we could then maybe use love files for our UI, or maybe even do something a little more fancy.</p>
<p>Now, the astute reader will notice that we&#8217;ve not actually solved the problem here. A programmer will still have to write all the love UI code, right? So why not just do it in MGui in the first place? And we&#8217;re involving another language which we potentially wouldn&#8217;t have a dependency on. (ok, Maratis already has lua inbuilt and all the examples are lua, but you could do the entire development in C++ if you wanted) So again, why integrate this whole engine, when it&#8217;s not making any difference?</p>
<p>Well, I think it will. Right now, every love UI library requires the layout to be done in lua. Which is no good. I recently set myself a little task to see how difficult it would be to write a data driven UI system in lua. I have to admit that it&#8217;s not very nicely written, yet, and that it&#8217;s nowhere near complete. However, it&#8217;s a proof of concept at this stage. I even started working on an editor, although, I&#8217;m still in the design stage of how that should work. If anyone wants to check this out, I&#8217;ve stuck the work onto <a href="https://github.com/nistur/love-gooey">github</a>. Would love to get feedback on it.</p>
<p>The main thing that I think is a really great thing for this is that, on every project I&#8217;ve been on, we&#8217;ve needed custom UI elements. It&#8217;s unlikely that any UI system has covered every possible option for what you would need. If it has an editor, the chances are it&#8217;s also not flexible enough to allow you to create your own elements. If the UI code is all in lua, as lua is interpreted, the editor can load the standard UI elements itself, then look in the project and add the definitions for any custom elements. Basically the editor becomes as flexible as the UI system itself. That&#8217;s the idea anyway.</p>
<p>The other benefit of lua is that it&#8217;s incredibly quick to prototype things in. When I&#8217;ve written custom element definitions in C++, it&#8217;s required anything up to a few hundred lines in source and header files as framework, before it actually did anything. Ok, that might be a bit of an exageration, but when I was creating new elements in lua it was much quicker.</p>
<p>So, in summary. Using Löve2D within Maratis is overkill. It&#8217;s also likely to be the quickest and most flexible solution to 2D UI layout, without resorting to Flash.</p>
<p>Or does anyone else have any other thoughts</p>
]]></content:encoded>
			<wfw:commentRss>http://nistur.com/engine2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The problem with libraries</title>
		<link>http://nistur.com/the-problem-with-libraries/</link>
		<comments>http://nistur.com/the-problem-with-libraries/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 22:33:32 +0000</pubDate>
		<dc:creator>Nistur</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://nistur.com/?p=253</guid>
		<description><![CDATA[I have had mixed successes with other people&#8217;s code. I know most of the people who write libraries and things are much more experienced than me, so I am definitely not complaining about that. But&#8230; some of the decisions just leave me wondering why&#8230; I always have a design, even if it&#8217;s just in my [...]]]></description>
			<content:encoded><![CDATA[<p>I have had mixed successes with other people&#8217;s code. I know most of the people who write libraries and things are much more experienced than me, so I am definitely not complaining about that. But&#8230; some of the decisions just leave me wondering why&#8230;<br />
<span id="more-253"></span></p>
<p>I always have a design, even if it&#8217;s just in my head, of how I want things to work. My design is usually coherent with itself and, when coded, should make a reasonably decent, clean, efficient application.</p>
<p>Libraries don&#8217;t always agree with my design.</p>
<p>This is why I usually end up reinventing the wheel and trying to write everything from scratch.</p>
<p>My current pet peeve is libraries for file loading, such as image and model loaders and in particular, currently, the FBX SDK. My resource management design is that I have a resource manager that loads the files and copies the data into file classes, created from factories, which then know what to do with the data. The reason behind this is that at a later date it will be easy enough to replace/extend the resource manager to load the files from an archive, decompressing the data into the buffer in the file classes. This means it&#8217;s only the resource manager that would need to change, nothing else cares where it comes from, and the resource manager only has to change one code path. I could even stream data over the internet or by sampling electromagnetic waves around the computer, it wouldn&#8217;t matter.</p>
<p>I&#8217;ve talked to other programmers, and they agree, this is a reasonable design. So I set up my file loading framework and made it load, and parse my config files. No problem. All my code. Nice and simple. Next, I wanted to load an image to display on screen. libjpeg is open source. So is libpng. I took a quick look at these and found there was no simple way to load from a data buffer, they just took filenames and FILE*. Sure I could hack this and either inject the data into a FILE struct, or use a temp file, or even fix the libjpeg source code myself if I so wanted&#8230; but this seems like far too much work for something which seems such an obvious thing. In the end I went for <a href="http://freeimage.sourceforge.net/">FreeImage</a> which did allow for loading from a data buffer. My model loading so far is stuck with hacking in FBX.</p>
<p>Here&#8217;s the thing, FBX does animation, texturing, lighting, model loading, everything. It&#8217;s awesome and amazing in the amount it does. It&#8217;s free. It would be perfect for my engine to use. But it breaks my design. This has got me so worked up that on several occasions I&#8217;ve thought of just ditching FBX and writing my own model loader for something simple and starting from there but I&#8217;ve stuck with it.</p>
<p>Another thing that pains me about libraries which offer &#8220;solutions&#8221; such as FBX, or actually SDL for that matter, is that they can very often do a lot of different things. SDL is actually a better example here as it does window management, input, 2D graphics etc. However you have to use them in precisely in the way they expect, and if you use one component, you almost always have to use everything. What I&#8217;m referring to here is SDL, again breaking my design in a way I&#8217;ve ranted about before. I begun using SDL to create my windows, as it was nice and portable. However, since I wanted all of my modules to be as uncoupled as possible, I didn&#8217;t approve of SDL requiring me to use it for the input handling. Sure I could have written my input handler module to use SDL, but then I couldn&#8217;t replace it later on for something that had better support for joypads or something. I don&#8217;t know, it might seem pedantic, but I would really _really_ like it if you could just turn off features in some of these things. If I had the choice whether or not to use SDL for input, I&#8217;d probably be using it.</p>
<p>No matter how amazing your design, if you build your palace out of other people&#8217;s work, it will look patchy, uneven and will make you wonder why you made a nice design in the beginning.</p>
<p>On the other hand. If you designed a great pyramid and tried to build it single handedly, you&#8217;d drive yourself insane&#8230; so I guess when needs must&#8230; enlist slaves.</p>
<p>Has anyone else had any interesting arguments with libraries? Some design ideas that make you wonder what the original writer was thinking? I&#8217;d love to hear them, especially if they don&#8217;t affect me</p>
]]></content:encoded>
			<wfw:commentRss>http://nistur.com/the-problem-with-libraries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

