[News] January 2017 - Handmade Dev Monthly

Abner Coimbre Jan. 9, 2017, 3:06 a.m.
Happy New Year!

With 2016 behind us, I want to lay out the Big Picture for Handmade Network 2017. The core activities such as hosting software projects, doing the Handmade Dev Show, and engaging in the forums will not go away; we're merely expanding on what we do. Let's actually start off with things we've completed in just this first week of January:

Submit a Project

This was developed by our very own chronaldragon, so I'll let him discuss the new feature:

On Handmade Network, one of our goals has been to build a virtual space that allows the breadth of software development occurring in our community to shine forth. Until this point, access to that space has been limited by an opaque and somewhat inaccessible submission process that involved individual correspondence with a member of the staff and an ad-hoc set of criteria that fluctuated as our own notions of what our platform should be have changed. But no longer; at long last, I've had the leisure of enough free time and mental energy to sit down and write a complete project submission pipeline that allows anyone who has an account on the site to easily apply for access to the features and platform we're building to share their project with the community and join the Network. This has been a long time coming, and we're happy that it's finally ready so that all of you can share your awesome projects with us in a more intuitive, consistent, and transparent way.

There you have it! He tested it with his new library, and we've received some new submissions already. We're in the process of establishing submission guidelines (of how we go about approving a handmade project), but you can still submit right away. However, until those guidelines are public we'll have to approve or reject based on how it lines up with the spirit of the manifesto, and to a significant degree, our personal judgement.

URL Unfurls and more!

This was done by Jeroen van Rijn (Kelimion), and again, I'll let him explain things:

This past month has seen a partial rewrite of the backend to make it easier to maintain going forward, and also enable us to add remaining features more easily.

In addition, I've added unfurling of project and member profiles, forums, blogs, threads and a few other pages. This means when linking to them on Slack, Twitter and a number of other websites, you'll get a succinct summary of the content of the page along with a logo or avatar.

Forum and blog threads now also have their title as part of the URL (optionally - old-style URLs still work). Together with unfurling, this will additionally make our content easier to find going forward.

Upcoming: RSS Feeds

This week we'll be working on RSS feeds and that'll be a great feature to have, especially since most users have requested it. We're on it!

Formalizing Monthly Update

December was considered a free month, so we did not expect project owners to give the community any updates. We do ask that you keep users informed this month onward however if you can!

We don't really have a formal way of explaining what we expect out of project owners. Informally, it's to drop a quick line or making a blog post each month about your current progress (and if you can't write anything, to let us know). It's a not-too-annoying way to keep the community informed of your project progress.

Even so, many questions arise: "What if I completed my project?", "What if it's a library and I'm just doing maintenance?", "What if I'm posting on Twitter and I don't want to write anything here on this website?". All of those are reasonable questions, and the team will be explaining how it's going to work once it's all formalized on paper. Most of all, we want updates to be a fun, unobtrusive experience for project owners and caring users alike.

Plans for 2017

I'll need a separate post for this later this month, so I can go into details, but this year we're focusing on a Handmade Wiki as well as creating educational materials. These things would be an expansion of Handmade Network, living alongside the handmade software projects.

  • Wiki - It will be very important to have a place where we can document API irregularities (e.g. MSDN might not explain that one call is synchronous on Win XP, but is asynchronous on another OS version), discuss build systems (with their gotchas and tips from users), and essentially write down many of the things learned from series such as Handmade Hero. Any other ideas welcome (comment below or send us an e-mail).

  • Educational Materials - I am actively reaching out to experts, educators, or generally users willing to volunteer their time to help with programming lessons, tutorials, and educational content in line with handmade. If you know anybody willing to help out, drop me a comment. This is perhaps the biggest thing for this year, and I won't be able to do it alone.

  • Thanks

    Expect more updates as we move along, especially since we're ending the beta (finally!) for the website by the end of the month. From there, we can work on the new systems that will help host the Wiki system and find a home for authors and programming teachers. As always, you can support our efforts at Patreon if you have a monthly dollar to spare.

    Appreciate your time in reading this. Let's grow the network!


    [News] Handmade Dev Monthly

    Abner Coimbre Dec. 7, 2016, 1:44 a.m.
    Happy Holidays!

    It is now freezing cold for many users this December, but the Handmade online community remains warm and cozy (at least I'd like to think so!) Let's see what's been happening.

    TheHappieCat Interview

    A talented developer, Anne, will be with me on The Handmade Dev Show live on Twitch this Saturday at 5PM EST. Please join in!

    EDIT: Post your questions for TheHappieCat here :)

    Handmade Con 2016

    I still ask people to post their pictures here (hundreds of you took lots; don't be shy!). It was a great conference and the talks will be uploaded to YouTube at some point.

    Please be aware that Casey Muratori has permanently disabled Twitch Auto-Saves of his broadcasts; it was not a mistake. You'll just have to wait for YouTube uploads if you missed any live streams. You may follow progress on the Conference Talks here.

    Matter Most

    According to our Lead Dev, Jeroen, while load-testing MatterMost with 12.5 times the recommended number of users in a team, it still does pretty well. Under this hypothetical scenario, the user list in the chat interface takes 2.5 seconds to show up now, and the user list in the admin section becomes a bit interesting to navigate, but the @autocompletion during chat is still instant. This means it should do pretty well in a more real life scenario and give us room to scale.

    "So now I just have to finish adding an OAuth provider to the website, test the IRC gateway, and try out some integrations.", observes Jeroen. This is happening this week, after which we'll be ready to release it. Again, thank you for your patience, but there's a reason Slack charges so much money—hosting "your own Slack" is no easy feat. We hope this efforts invites more beginners to interact more with some of the experienced programmers here.

    Code of Conduct

    The Code of Conduct and the Community Guide are now in effect. Please give these guidelines a read, as they are part of an ongoing effort to encourage participation by underrepresented groups, as well as expressing what we believe is the spirit of the Handmade community. Ban decisions will primarily be based on Community Guide violations, typically escalating from admonishment, temporary ban, and if left no choice, permanent ban.


    If you feel you derive any benefit from us, and are in the Holiday spirit, a $1 pledge helps us immensely. We've updated our link; it is now patreon.com/handmade_dev since it is the Handmade Dev Team that's developing Handmade Network. Thank you for supporting the site!

    Until next year,

    [Feedback] Handmade Code of Conduct

    Abner Coimbre Nov. 13, 2016, 11:36 p.m.
    Code of Conduct v1.0

    Communication Guidelines v1.0

    EDIT: Commenting period now closed.

    [Notice] Surfing with style

    Andrew Chronister Nov. 5, 2016, 12:35 a.m.
    Greetings, everyone,

    It's no secret that the current site style suffers from a few issues (slow repaint time in some browsers, visually distracting backgrounds, and a fair share of strange behaviour/bugs with resizing). We've been hinting at a redesign in the works for a while, and though we are still waiting on consultation in terms of design direction for that, I have decided to go ahead and start iterating on the design now rather than put off changes much longer.

    Starting tomorrow, I will be pushing design iterations to the site, live. Comments, suggestions, and tips should be posted to the Feedback forum, which I'll be monitoring as I work on the design. We've opted to do it this way rather than deploy the iterated design to a subset of users because of two main considerations.
    1. We don't yet have infrastructure in place to deploy alternate versions of the entire site to certain users or over a different URL/port. This would not take terribly long to set up, but we are prioritizing other work more highly at the moment.

    2. We are still formally in Beta until the v1.0 release hits with all of the features we originally planned to include, and an iteration on the public design before launch does not seem entirely out of line with that in mind.

    Some things to keep in mind as design changes roll out:
    1. If something looks off, first try refreshing (be sure to use your browser's cache-clearing refresh to ensure that old styles/images/fonts aren't being used) before reporting in the Site Feedback
    2. Your brain/computer might work differently from ours! If something becomes significantly less readable, harder to navigate, or harder to find, this is a bug we need to fix. We want the site to be usable by everyone across as many devices and browsers as possible. (We make no guarantees about old noncompliant versions of IE, but will attempt to make the style degrade somewhat gracefully).
    3. I, the main frontend dev, am doing this in the free time I can spare from university, so it may take me a while to address feedback. That doesn't mean I'm not listening!

    Again, please give us feedback and as always, donating on our Patreon makes it easier for us to improve the site.


    [Notice] Sunday Twitch Stream

    Abner Coimbre Nov. 12, 2016, 3:23 a.m.
    This Sunday at 5:00PM EST I will be programming live on twitch.tv/abnercoimbre as well as making important Handmade Network announcements. I hope you may join me then.


    [Notice] Community Chat

    Abner Coimbre Nov. 1, 2016, 1:28 p.m.
    The team and I have looked at how to provide an enriching chat experience for our existing users (and incoming ones). I found many competing services, each with their tradeoffs, and we've chosen MatterMost

    Why Mattermost?

    It didn't have to be this one; anything that met the following five criteria would've worked:

  • Self-hosting
  • No constraint on number of users
  • Message retention
  • Built-in support for code snippets, easy file transfers (without XDCC), and persistent sessions (without a bouncer like ZNC)
  • Mature IRC bridge. We started as an IRC community, and we won't ignore this protocol. Is it old? Yes, but so is HTTP.

  • I surveyed the handmade community, and these are the core desires that bubbled to the surface. Stable services like Slack, Gitter, rocket.chat, and IRCCloud are awesome but don't simultaneously meet all five criteria, or they are gated with per-user pricing. That is prohibitively expensive; we're a community, not a small team.

    Mattermost satisfies the community's five requirements and is conveniently FOSS; it also has a web client and a desktop app. The Handmade Dev Team believes everyone will be at least not-angry with this solution, and I personally enjoy it. We're working towards login credentials to be the same as the website, too!

    Expect an update from Jeroen as to how to access the new community chat, once it's ready.

    [News] Handmade Dev Monthly

    Abner Coimbre Oct. 22, 2016, 3:27 p.m.
    Dear reader,

    With Hurricane Matthew threatening my state and having to stabilize again afterwards, October has been terrifying even before Halloween. Thankfully we are good to go; the team and I met this past Thursday and our news await!

    Handmade Network on the News

    You may have seen Handmade Network on the news, with the piece still on their front page. We thank them, and what I can say confidently is the Handmade Dev Team will continue its prime directive to support personal handmade software projects. If you're interested in posting your work without becoming an official project, go here. If you feel ready to become a proper project, e-mail us at [email protected]

    -Casey likes his fans-

    Handmade Con 2016 Approaches!

    Handmade Con 2016 is roughly a month away! It is the place to meet programmers who care deeply about their craft, and want to learn or share their expertise. This is the year we get booths, too! Game companies, SpaceX, and others will be attending. If you're still looking for discounts or ways to room with members from the community, post here.

    -You're still on time to meet amazing programmers-

    We will have our own table, as well as 4coder and other projects from the community. If you want to meet the people behind Handmade Network, this is the chance to talk to us! Interested in hosting a project or joining the team? Let us know. Want to just say hi to us? That works too; and we wouldn't say no to a glass of wine after hours (or is that just me?).

    Website Features

    As always, we underestimated the work needed to wrap up version 1.0. Improved registration workflow is complete (no more need for access codes), and we're dangerously close to having moderation tools in place. We've been testing e-mail notifications with our own mail server and it's looking really good. RSS and the rest of the features discussed last time are trivial after this, and the new plan is to complete all of this by Handmade Con next month. As always, take that with a grain of salt, but there's a light at the end of this development tunnel.

    Updating the Community

    Speaking of moderation tools, please welcome MikeDX and ZedZull, our new moderators! They will make sure our community guidelines are met, and report spam or abuse. We thank them very much for volunteering their time to keep Handmade a civil place.

    Once again, I urge the project owners to let us know you are alive at least once a month in accordance with our Monthly Update mentioned a few news articles ago. It may not always be possible, but try your best. Our moderators will let us know of dead projects after a month or more, in which case we just push the project down the list and eventually flag it with "Stale" or "Hiatus". I started updating everyone with Ave last month, and will try to do so every month. Again, something like a simple reply to a user question on your forums would be enough. Anything to let us know you're kicking around with us :)

    Support Us!

    I thank you for reading this, and the team thanks you for supporting Handmade. Can't exist without ya, can we?

    Like I always bother everyone with, your $1 pledge keeps the developers motivated and pays for the site upkeep, as well as growing server costs and the new features such as e-mail notifications; ongoing work for an online chat system, etc.

    See you in Seattle!


    [Notice] Alive and Well

    Abner Coimbre Oct. 13, 2016, 6:28 p.m.
    Fellow programmer,

    As you saw from my Monday tweet, we Floridians survived the hurricane. It was rough, but not nearly as catastrophic as predicted. This week I'm getting back in the groove of things.

    We're having a meeting this Sunday, after which I'll post the monthly site news (albeit a couple weeks late). See you soon!

    [Notice] Hurricane Matthew

    Abner Coimbre Oct. 5, 2016, 6:52 p.m.
    I live near Orlando, Florida and hurricane Matthew approaches. My friends were already evacuated and I may be next. Expect the Handmade Dev Monthly after this all passes. Sorry!


    [Notice] October Updates

    Abner Coimbre Oct. 1, 2016, 8:39 p.m.
    I hope everyone's enjoying the start of the spooky month. Expect the Handmade Dev Monthly News in the coming days. Keep programming, project owners! And to those contributing to the site with pledges, written content, or even just lurking, we wouldn't exist without you :-)

    [Article] Behind the Scenes: Unread post markers

    Jeroen van Rijn Sept. 4, 2016, 11 p.m.
    Space exploration, you say?

    Abner and Andrew recently wrote space exploration themed blog posts, and as such I couldn't really stay behind. Thankfully I'd already planned to do a write up on a new feature.

    As you may have noticed, a long-awaited feature has recently emerged: the indication of whether or not a thread contains new posts. You might think this a trivial feature to add, but you'd be mistaken. Let me take you through the considerations, (some of) the possible ways to do it, and the way I ended up implementing it and why I did it this way.

    So, without much further ado I explore the problem space in this Behind the Scenes post, hopefully the first of many.
    A word of warning, though: it's 14.5kB worth of text and there's no illustrations, yet.

    First, let's state the problem so that we might explore its space.

    The landscape:
    1. There are some 1800 Handmade.Network members (since I last checked)
    2. We have 42 forums and 37 blogs
    3. Which have between them approximately 1500 forum threads and blog posts
    4. Those contain on the order of 8500 posts between them
    These members will want to know when a new thread appeared or a previously read thread gained new entries, and preferably in such a way that if they move from one device to another, this read status is synchronised. In other words we'll want to keep this state on the server, not on the client.

    You could store this information in a number of ways, each with their pros and cons.
    What we need to store depends on the method we want to use. We'll get to the how of it.

    Here's what we need for two naive ways to track the information we need:
    1. You could keep track of a timestamp or last post ID per thread per member, or around 2.7 million pieces of information in the current situation
    2. You could keep track of every thread (or blog post) a member has ever read and not store information for unread threads

    Case 2 looks attractive at first blush, but what happens once a member has either read every thread or hits the 'mark all threads as read' button?
    Right, it devolves into case 1 as time goes on. At best it's of temporary benefit. At worst it might fool you into believing you've implemented an efficient scalable solution, right up until the point where a good number of members have marked everything as read.

    And even then, it's not that efficient or scalable to begin with. Why?
    Well, consider what happens when someone, say you, wants to mark everything as read.
    In each of these scenarios the site would have to iterate over all 1500-odd threads, get the date (or ID) of its last post and then update or create a row for each of them that pairs the member with that thread and the timestamp (or ID).

    That's a lot of work that we'd obviously like to avoid if we can help it. Even more so because we'd like to see all those numbers mentioned under 'landscape' grow without it making the site burst at its seams.

    So, how could we minimise the impact of this feature?

    One way would be to keep track of the read state on the client side, but apart from the state not being shared between devices, that's just moving the problem around. Their browser would have to store all this data somehow, in either a massive cookie or in local storage.

    Okay, you might say, but what if we also store a piece of data that says "everything before this timestamp is considered to have been read", and the only threads we track the state of are those with posts newer than that? Let's call it a watermark, below which everything is considered to have been read (or of no interest).

    Now we're getting somewhere! But let's keep doing that server side and let's see what else might be useful to minimise the amount of data we need to consider.

    What happens if you want to mark just a particular forum as read but still want to browse the other forums and see if something new has appeared since your last perusal?

    I think you see that a global watermark won't cut it, because then we'd still have to update or create an entry for each of the threads in that particular forum. Indeed, extrapolate a bit further and you'll see that if threads are marked as read forum by forum, the global watermark doesn't gain you much until you've marked the very last forum as read. Meanwhile we've more or less devolved to the old scenarios again.

    See, it's not as straightforward a feature as you might have assumed out of hand. Or rather, it's a simple enough feature, but if implemented without considering all these scenarios, you'll find that simple solution blow up in your face.

    So we've seen that this global watermark doesn't help us very much. We can't even unconditionally move it if we mark one forum as read because one of the other forums might have older unread posts. If only we knew what the oldest unread post in each forum was, then we could move this global watermark safely to whatever the oldest was between them…

    So a per-forum/blog watermark, then?

    Indeed! You know what's funny? If we keep track of per-forum watermarks for each member, we no longer even need this global watermark. Good riddance, it didn't appreciably constrain the problem space to begin with.

    So, how much do we have to keep track of now?

    Now we only need to keep track of the threads in each forum or blog that has a last post newer than its category's watermark. As an aside, internally we call forums and blogs categories and its type determines where on the site you find it and how it's presented to you. More on that in another Behind-the-Scenes post another time, perhaps.

    If someone marks the entire site as read, we only need to update or create 80 rows in the database, which is a 20x improvement over having to do the same for each thread. Better, the number of forums isn't likely to scale as explosively as the number of threads will, so the benefit will only grow as time goes on.

    But what about those per-thread markers?

    Those are still around of course. However, once you mark a category as read, all those thread markers can be deleted. Sure, we could keep them around in case an old thread sees some action, but as newer threads see more replies than older threads, that's just baggage in most of the cases.

    Wait... Doesn't that mean we have to iterate over each thread in a category, see if we have an entry for it for this member and then delete that entry in our marker table? Not quite. This is why the thread marker table has a somewhat redundant field that says what forum or blog the thread belongs to. We don't need it most of the time, but it makes deleting all thread markers for a category a piece of cake. We don't have to iterate over the threads themselves to mark everything as read.

    Marking everything on the site as read is even easier. In addition to updating those category markers, we can now delete all of that member's thread markers. (And we already paired each member to a thread in these markers because you won't have necessarily last read something when I have, it wasn't even an extra field we added for convenience).

    There's two more optimisations to be had.

    Optimisation: Conditional thread marking

    Since we're in the business of not having the site do more work than is strictly necessary, let's see if we can find a reason not to make an entry when a thread is read. Heck, let's see if we can find several such reasons not to do any work.

    1. According to the category watermark, this thread's last post is old.
    2. According to the thread watermark, this thread's last post is old.
    3. The member reading this thread is also the author of its last post.

    In case 1, we've already read all there is to read. Until such time that a newer post appears, we don't need to record this last post's timestamp as the newest thing for this thread.

    Case 2 is essentially the same as 1, except you've explicitly read this thread since the last time the category watermark moved. Nevertheless, the thread's last post's timestamp and the thread marker are in agreement, so there's no need to update it, let alone create the thing we've just compared.

    As for case 3, I'm no Sherlock Holmes, but I think we can consider you having penned the post, you've also read it. If not, perhaps we should hold you to a higher standard… ;-)

    If all goes well and conversation flows back and forth on the forums (and blogs), case 3 won't hold long. But still, it saves an action. And if conversation does go back and forth and you're replying to someone else again, you'll again be its last author.

    We really only need to know about new posts made by others, because when searching for the last unread post in a thread, we really only need to know about the first post after a given timestamp that wasn't authored by you. Thankfully, that's a very cheap thing to ask a database if you have a sane data model.

    Optimisation: Coalescing the thread markers

    But wait, there's more?

    Indeed. We have this per-category watermark, don't we? Can't we exploit that thing some more?

    Sure... how about when you browse a forum, apart from it showing you which threads have new entries or not, we see if we can't move the watermark a bit.

    To do that all we'd need to know about is threads whose last post is older than the category watermark, so under normal circumstances there's not a lot of data to consider. But, consider them we shall, in reverse chronological order, even.

    Of the threads under consideration, some will have their own marker and some won't. What we want to know is if the thread immediately 'adjacent' the category watermark has one. If not, we can bail out early.

    If it has one, we can move the watermark to its last read date and delete its marker. And again we loop through the now shorter list as long as we can keep coalescing like this, and early out when we can't.

    What all of this means when put together

    - We store the read status of threads in a sparse manner
    - This sparse storage cleans itself up, removing redundant entries where it can by moving the category watermark

    And not altogether unimportant: Even in the very unlikely worst case scenario, it behaves no worse than the original common case in the naive scenarios. Indeed, it's more well-behaved in the worst case.

    Where it really shines is the practical case where someone reads the threads of interest to them in one sitting, leaves a few as unread for the next sitting and marks all threads in forums of lesser interest to them as read from time to time.

    Put differently: If you use the forums as most people read forums, or alternatively only scan the titles, read those of interest and then mark the entire site as read, a.k.a. the common case(s), the impact of all of this bookkeeping is essentially negligible.

    But why didn't you such and so?

    For one because 'such and so' isn't a very well defined thing to do and you'd need to clarify what you meant by that.
    For another, the above is very efficient and has several benefits to some of these suches and soes.

    Consider an alternative:
    We could have just serialised all of that information in a blob per member.

    Sure, we could've done that, but that doesn't consider the serialisation cost. I'll give you a hint: It wouldn't outperform the well-indexed queries used by the above, bloats memory usage for no benefit and has another important drawback.

    If in the future we want to move a thread to another forum, all it would take in our scenario: 1 query to update all the thread markers for that thread, regardless of whom they are for, to update the category field to point to the new forum.

    I think you can see where I'm going with this: We'd have to iterate over all members' 'read marker' blobs, deserialise them, update the field in question, serialise it and update the blob. That's a heck of a lot more work.

    You might counter that this isn't something that happens every day, moving a thread. Not yet, no. But like mentioned at the start, we hope to grow this community, and we'd prefer not to have 'stop the world' scenarios happening a few times a day where the site slows down because every member's 'read blob' has to be updated when a thread moves.

    And before you say, "But you could store just the thread id without the category, then there would be no need to update the category when you move the thread." Certainly, but then you're doing more work again when marking a whole category as read. Where previously you could just delete that entire branch from your tree in one go, now you'd have to iterate over all threads and match them up against the data from the blob.

    Can you say amplification? You'd still be grinding the site to a halt.

    And yes, there are ways to mitigate it by keeping the pertinent information for all threads in memory at all times, that's a few MB worth of info after all. Guess what? That applies to the scheme I've implemented as well. It too can benefit in that way and perform even fewer queries, but it still doesn't have any of these downsides. ;-)

    That's neat!

    I know :) Web technology may not be my favourite thing in the world, but I'm still going to implement data models and algorithms that work well in spite of this domain's problems. I'm somewhat strangely even looking forward to version 2 of this website, to be made public in around a year from now, hopefully. We'll see how much more of a performance non-issue we can turn this feature in when it's implemented in C with all data kept in memory as much as possible. :D

    Can you use the description above to implement your own version of this algorithm in other forum software, or use it in another problem domain altogether? Sure, why not. Software patents are patently obvious most of the time and patently ridiculous always*.

    If you've made this far, you've earned the right to a yourname++ on HMN IRC. Just ping me there and you'll get a free one-time imaginary internet point boost. Also, I'm impressed. What started as a medium long BTS post turned into quite a feature on this feature. :D

    If you did and want to read more of these Behind the Scenes posts, feel free to leave a comment. You're still welcome to leave a comment even if you thought once was quite enough, thanks.

    Until next time, perchance!
    - Jeroen

    * This is my personal opinion, it does not necessarily represent the position of the Handmade Dev organisation. Not that I expect it to be materially different.

    [Article] A Space-filled Summer

    Andrew Chronister Sept. 2, 2016, 8:27 a.m.
    Hey folks, Andrew here. Gonna depart a bit from our usual site updates and do a longer form post. Hold onto your hats!

    If you're a regular in the Handmade community, you might have noticed I've been a bit less active over the last few months. And if you follow me or abner on Twitter, you probably got a glimpse at what I was doing in that time. So I'll confirm right now, all the stories are true -- I was down in Florida, working at an internship for NASA.

    Let me give you a little background on NASA's internship programs. There are One Stop Shopping Initiative (OSSI) opportunities, and there are Pathways opportunities. OSSI internships are what you might think of as a more typical internship, lasting for a semester or summer (or occasionally a whole year), where you work in one particular area of NASA for the duration and then you leave. Pathways internships are longer-term, putting you through several rotations (periods of one or more semesters where you leave off school-work to work full-time hours at NASA) during which you can and likely will move around between different parts of NASA, exercising different parts of your area of expertise (or in some cases acquiring new ones!). Pathways internships only end once you've graduated from your university with a degree, and usually result in an offer for full-time employment.

    I applied for and was accepted to an OSSI internship this summer, and it was one of the best experiences of my life. It was also one of the more stressful and difficult things I've ever done.

    For one, there's the sheer distance. Kennedy Space Center (KSC) is situated on the east coast of central Florida, right on a large wildlife preserve. It's about an hour's drive out from Orlando, which is a six-hour flight from my home city of Seattle. It's one of the longest trips you can make in the continental United States, and I had to figure out how to get everything I needed for 10 weeks there into a suitcase and a duffel bag.

    For another, there's hurdles that must be leapt. It was one thing after another -- by the time I left for Florida, I'd already had to submit myself for a background check, have three teleconferences with the staff of the Education Office, complete an online cybersecurity training, and fill out a project plan detailing the work I would be doing over the summer with the aid of my mentor. Once there, I was subject to the long and bureaucratic process of getting the badge I was required to have in order to even enter KSC. Once I was finally on center, I had to sit through almost a full day of "orientation", i.e. speeches, admonishments about what not to do, forms to sign, letters to read... and that was the abridged version!

    But all this was worth it, because once I had passed through these hoops, I was free to begin work at NASA.

    There's a lot going on inside the American space agency. Many employees are hard at work figuring out the technical challenges of the Space Launch System (SLS) rocket -- the biggest ever launched -- and its Orion payload. Others are carefully planning the long and arduous road to Mars, and the difficult questions that must be answered before human beings can stand on its surface. Some are working on satellite systems and logistics, some on robot explorers and scientific systems, some on the software to interface with rockets on the launch pad. They process payloads destined for the International Space Station (ISS), they prepare probes for asteroid encounters, and create next-generation materials and tools to make all these things happen. And all this with one of the smallest budgets (less than one percent of US GDP) the agency has ever had.

    Yet the tight financial constraints leave little room for experimentation and blue-sky research. I saw dozens of promising projects, amazing and groundbreaking seeds of technical brilliance, lying on laboratory counters and leaning on dusty cabinets because their funding had dried up.

    Despite this, my mentor had managed to eke out enough money to pursue his own vision of the future of NASA operations. Nestled in a corner of the IT directorate, in a small branch for advanced computing concepts, he created the AVR lab: a small room filled with as many of the latest AR and VR gadgets and off-the-shelf mixed reality devices he could get his hands on with the trickle of funds coming in from internal kickstarts and one-off funding opportunities. And it was here, an old room in an old building with new devices and new ideas, that I spent my summer.

    You might expect that an internship for an organization as large and bureaucratic as NASA would mostly involve desk work and pencil-pushing. Or, perhaps knowing less about US government organizations, that most of the work would be centered around launching rockets. Neither of these expectations quite matches the reality, though they are both true to certain extents. Yes, there are a lot of people whose jobs are more or less to move the forms and crunch the numbers to allow spaceflight to happen. And yes, especially at KSC, most of the work orbits around the launching of rockets and the development that will affect how they are launched in the future. And of course, by taking an internship at NASA, and at KSC especially, there's a good chance you would end up doing one or both of those things as part of your responsibilities.

    But depending on your position and depending on your mentor, you might have a very different experience. Civil servants at KSC -- the mentors, supervisors, and coworkers that guide you -- understand the zeal of spaceflight. They know that you want to help make a difference, that you want to be a part of things. So there's no coffee-fetching and there's no busy-work. The focus of the internship is on helping materially advance some piece of the machinery around NASA's multifaceted mission, however small. And hopefully, your mentor can help you understand how your work advances that piece.

    For me, that piece was my mentor's vision of what developments NASA could push forward in the area of human-computer interaction. Ideas about the ways augmented and virtual reality devices could change how ground operations work, how in-flight operations are conducted, how semiautonomous vehicles are controlled. My work was building some of the prototypes that would prove the physical potential of these ideas.

    Because of the nature of the lab -- secluded, very small (occupied only by my mentor and myself, during the time I was there), under-the-radar, and experimental -- most of the typical constraints of software development work at NASA were invisible to me. My mentor gave me only a goal and the groundwork he'd been building up for a few years now, and I was free to build towards that goal within the resources I had available. There were some implicit constraints, to be sure: I was dealing with VR devices, so whatever I wrote had to be fast. It had to interface with the Unity game engine, which was running the virtual environment, so I'd have to have some C# scripts at least as a go-between. And I'd have to be able to pass it on to another programmer when my 10 weeks were up, so I would have to keep it simple and document it well.

    By the end of the internship, I had written about 1000 lines of C++ code, 800 lines of C, and 500 lines of C# scripts for Unity. This volume, small though it may be by the standards of some, would shock programmers from other branches of NASA, who might struggle to get 3 lines of code pushed into the production branch in 10 weeks' time. Indeed, I'm certain that my code was not bug free, not optimal, and if its purpose had been to launch rockets, would most certainly launch investigations into NASA's quality assurance practices. But luckily, it was only the stomachs of the users of the VR system that were at stake, and to the extent I was able to test and bugfix it during my short time there, it worked. And I'm happy to say I was able to see its effects played out even before I left, as my mentor was able to give several demos of a fully coordinated and working system to potentially influential people.

    From a purely pragmatic and self-interested perspective, my internship was an invaluable experience in a real-world programming environment. I had practical constraints, I had to document everything, and I had to keep it simple and make sure it worked. I learned a lot about VR technology, about working with existing systems, and about keeping careful notes. And on top of that, I got an amazing and thorough inside look at one of the foremost centers of NASA development effort.

    But for the people working for one of the agencies central to extending humanity's reach beyond Earth, self-interest is rarely considered and pragmatism is only an implementation detail. I most enjoyed my internship because it felt like it really mattered -- yeah, I wasn't working directly on rocket systems or launch control; yeah, maybe in 10 years time my code will be sitting on a dusty hard drive in a forgotten filing cabinet somewhere; but I helped show people at NASA the potential capability of a new piece of technology, and that might have lasting effects. And that's what will stick with me.

    If I so choose, I am likely to be able to secure a co-op position at KSC in the near future. Chances are I'll be able to go back and, perhaps in a slightly different role, continue pushing on my small piece of NASA's mission. I'm not sure yet if that's where I want to go, but I know that the opportunity is there and I'm keeping it very close to my considerations about my future. No matter where I end up, however, Handmade Network is going to continue being an important part of my off-work mission. NASA benefits from well-made software as much as anyone, especially in times like these where funding is low and they are forced to turn to off-the-shelf products for many of their needs.

    So to all the programmers out there, keep coding amazingly. And to all the other students, think about where you can make a difference. If you're an American citizen, NASA might be the place for you.

    Cheers, and happy coding,

    [News] Handmade Dev Monthly

    Abner Coimbre Sept. 2, 2016, 4:39 a.m.
    Greetings community,

    Jeroen has done amazing work, as well as the rest of the team. The new projects have gained some traction as well. Let's go in-depth as to what's been happening.

      Site Improvements & Future Plans

  • New features

  • - Post Previews

    - Context posts, showing you the forum or blog post you're replying to and up to 4 other older and newer posts

    - Read/Unread status

  • Improvements

  • - Blogs' new post button and pagination are now more conveniently located.

    - Blog posts can now be quoted.

    - Aesthetic improvement on quote tags.

    - Sort posts on HMN landing page by date only.

  • Bug fixes

  • - Registration verification mistakenly disallowed some characters in a name that were accepted when signing up.

    - Nested quote tags didn't work.

    - A regression that stripped certain characters from post titles.

    - BBcode parser was overhauled.

    - If you edit a post and remove its title, the site will now restore the old title.

    - Formatting oversight on the cover page was fixed.

    - On a forum's thread list, an empty Full Name mistakenly showed a blank instead of the member name.

    - Long titles on breadcrumbs no longer vanish.

  • Planed September Features

  • - Improved registration workflow

    - Addition of password reset (no need to contact webmaster anymore)

    - Ability to report spam or other abuse

    - Moderation tools

    - RSS feeds

    - Email notifications (individual and digests)

    - New Project Application Page

    - Stealth projects (a formalization of the hidden project feature, so approved projects can work on their project's profile page that only they and the staff can see until they flip the switch)

  • Small fixes

  • - Preview currently doesn't seem to include a certain css file, which left the [size] tag looking like it has no effect even though it adds the correct html class.

    - Update Mozilla's Bleach so the new TLDs, including .network, are recognized in URLs.

    - MotionBox (featured): "MotionBox accesses videos directly via DuckDuckGo. It streams video files, Youtube, Dailymotion and Vimeo. All of this inside multiple tabs and without ever showing an ad."

    - ES Visual Debugger: "For the time being i'll target projects that were compiled to windows 64 bit with MSVC as it's what i use. supporting 32 bit means also supporting different calling styles, which should be done, but not on the prototyping step of the project."

    - CDbg: "CDbg is a debugger for executables that are produced by Microsoft C/C++ compiler. This debugger focuses on speed, flexibility, and providing to programmer as much useful information as it is possible."

      Handmade Dev Team uses Linux

    We've been asked a few times what kind of OS the team uses for developing. I've switched from Windows 10 Anniversary back to the Arch-based Manjaro Linux. Andrew has chosen Manjaro as well. Jeroen uses many variants, but Arch Linux is becoming his main OS. Miblo is probably one of the most competent Arch users in the community. Martin Cohen does design work on his Mac, but also uses some Linux distros on the side.

    It's counterproductive to deride Windows or any other operating system. Each developer tends to have interesting personal reasons for choosing one system over another, and we have our own. Handmade Network is more keen on developing quality software for our target platforms than discussing which OS is best. You'll find very talented Windows developers here, as well as for OS X, Linux, or some of the more esoteric systems.

    The Planned September Features mentioned above are the last set before the site is in stable 1.0 release. Kill Screen will be doing a piece on Handmade Network and we are on our way to showing the software development community we mean business when it comes to caring and technical excellence.

    We cannot do this without your support, as we rely 100% on Patreon Funds to exist. A dollar makes the difference. If you get any value out of the community, your contribution will help pay for all the services requires to run this site, and for me to provide the leftovers to the site developers for their hard work (we all have access to the Patreon for transparency).

    Whew! Can't wait to see what the October news will bring.


    [Notice] September Updates

    Abner Coimbre Sept. 1, 2016, 5:24 p.m.
    We're excited to give you the news from the Handmade Dev Team this month. They should be posted sometime tonight (EDT).

    [August 2016] HMN Gitlab

    Abner Coimbre Aug. 23, 2016, 8:27 p.m.
    At this point, each project owner should have received an e-mail from me about the upcoming roll-out of handmade gitlab accounts. Your login credentials should be the same as the one you use here, and they will be integrated in the project page so visitors can quickly access it just like with your Patreon!

    Our goal is to provide the whole community access to git.handmade.network so everyone can follow along all of the open-source goodness on the same site.

    Lastly, if you are a regular member who wants a repo with us, e-mail me at [email protected] Stay tuned for more updates.


    [Question] Everything in moderation, or: Damn, I wish those spams offered Handmade sneakers.

    Jeroen van Rijn Aug. 6, 2016, 5:59 p.m.
    Hi all,

    I think we can count ourselves lucky in having only seen around 10 spams so far in the lifetime of this site. For some peculiar reason only known to spammers, our little community is held to be part of the demographic eagerly in search of new Nike sneakers. Hardly Handmade* merchandise, as I think you'll agree.

    Thoughtful as they are, these spams usually come in pairs: a post in English and one in French. Just like sneakers if you will. I'll leave it to the reader to determine which of the two languages is the left and the right shoe.

    Nevertheless, as site admins we don't feel these shoes fit. For that reason we're working on a patently obvious system and a method ;-) to combat these nuisance posts. First I'll outline what this will look like initially, then I'll outline how we want to improve on this going forward. Lastly there's a few questions to project owners and the community at large.

    Sometime soon, hopefully next week, posts will gain a new button letting our members flag it for moderation.
    This button will bring you to a form with a few reasons to choose from as to why you want to report this post, along with a field for optional feedback.

    By default we'll have "Spam" selected as the reason. If you believe a post to be spam, all you have to do to report it is hit the report button on the post, then hit the report button on the form that submits it to the moderation queue. Note that we may streamline this in the future and incorporate this into the thread view itself, but in the first iteration it'll take you away for a moment and then return you to the thread after you're done.

    Even so, for something that's obviously spam, it'll take maybe 5 seconds at most to hit the button and then confirm it on the next screen.

    So why this interstitial form? Isn't one click enough? Well, it would be if moderating forums was all about weeding out spam. Like it or not, we have to consider the possibility that someone might post inappropriate material that's not what you or I would consider spam. Think hateful rhetoric for example. If all someone does is post hateful screed, we may as well treat them as if they were spammers. Nevertheless, it's a different form of speech.

    Other examples why you might want to report a post when it's not spam:
    - Someone instead posts relatively decent quality material, but it's sprinkled with invective.
    - A debate turns a stack of ad-hominem attacks overflowing and drowning out an otherwise good thread.
    - You believe a post to contain plagiarised material, whether text or code.

    If you have a good faith reason to question a post and want us to caution its author, and/or edit the post to remove the offending language/material, you can also use this button. In this case you'd flick the reason from Spam to the otherwise most appropriate reason why you believe action should be taken. The optional field mentioned earlier is where you could then elaborate on why you believe the author should be cautioned and what if any action should be taken in your opinion.

    So, having submitted a moderation request, what then happens? I'm glad you asked.
    An email will go out to the site team (Abner Coimbre, Andrew Chronister, Matt Mascarenhas, Martin Cohen and yours truly). It'll be roughly formatted like so:

    So and so reported a (blog/forum) post by Such and Such titled Say what now? to project Ah, right.
    With the following comments:
      Spam (or other reason and elaboration)
      Post contents
    Member details (Such and Such)
    Registered on: today
    Number of posts: 1
    Email: spammer@spam.spam
    Quick actions:
    - Perma-ban its author and delete all their other posts.
    - Temporarily ban its author.
    - This was misreported. Unflag the post and send a message to the reporter.
    - Visit the thread and decide from there

    By the way, in case it isn't clear: We will allow flagging a post more than once, once by every member. This is mainly in case different views exist on a controversial post. To avoid being deluged in reports when spam appears, however, we'll only send an email the first time a post is reported.

    For posts that clearly don't fall into this category and have been flagged for other reasons, we'll be able to check if more than 1 report was filed before we make a decision. No worries :)

    We'll try and find a clear way to communicate to you that a post has been flagged already, so that you don't have to. In fact, for posts flagged as spam we may even remove the report button. We'll see what turns out to be the sensible thing to do here.

    What we probably won't do is hide the post from view until the moderation request has been reviewed. We may do so and trust our members not to abuse this power, in the full knowledge Abner will have a stern word with them if this ability is used on posts that clearly had no business being reported.

    Edit: d7samurai suggests that a post that's flagged by more than n number of members can be given the doubt of the benefit and be hidden. It can always be restored if it turns out multiple members (or sock puppets) are in collusion against an otherwise upstanding member.

    That's one thing we'd like feedback on. While I think the membership at large will behave honourably, we are approaching a time where we'll become more visible to the world and attract newcomers. Not all those newcomers may be as mature as our present community has shown itself to be.

    So, do we hide reported posts from view in the knowledge that if they were misflagged, we can restore it and reprimand the reporter. Knowing that a troll might one day come along and report one of your posts, no harm, no foul? Erring on the side of caution.

    Or do we - and by this I mean all of us as the community - instead trust that between the 5 site staff members, anything truly obnoxious will be gone the same day, and more likely than not within a few hours at most. Erring on the side of free speech.

    We wouldn't mind some feedback on this.

    Also, not unimportantly: Once this functionality goes in, project owners will gain a setting along these lines:
    - Notify me of reported posts, I'll take action
    - Notify me of reported posts, but let HMN staff decide what to do
    - I trust the HMN staff to moderate my forums and blogs on my behalf

    The difference being - because accounts are shared across the entire network - project owners won't be given the ban hammer, but they can if they want delete the post to their part of the site. Once using that quick action, they'll be given the chance to send a mail off to the staff asking them for followup action, all from the same page.

    That is how we see phase one of the upcoming moderation ability.

    One of the future enhancements we're thinking of adding down the line will be the ability for a project owner to ban somebody just from their neck of the woods without it affecting that member's ability to use the rest of the site.

    In addition, here's a few things we have thought of but haven't decided on yet.

    Should posts by new members (and existing ones with no history of posting) go in a moderation queue automatically, hidden from view until released? This would inconvenience newcomers but would effectively stop spam dead in its tracks. Do so only if the post contains links? Or leave things as is and trust the first person to come across spam to flag it, therefore being more welcoming to newcomers who might otherwise be caught in this net temporarily through no fault of their own.

    Those are questions again we pose to you, our community and project owners. What type of community do you want to be is essentially the question. :) We'll obviously take your feedback under advisement. Incidentally, this is also something we can let project owners decide on a per project basis. Some of them may want to enable the moderation queue for new posters, others might want to trust that any nuisance posts will be flagged and dealt with quickly enough.

    With that I think I've bored all of you for long enough. Please leave your feedback here, or in confidence in an email to [email protected]


    [News] Handmade Dev Monthly

    Abner Coimbre Aug. 3, 2016, 4:07 a.m.
    Handmade Community!

    Roughly a year ago, we sprang to life as a result of being inspired by Handmade Hero. Even though The Handmade Dev Show has been in hiatus, it should be back on the air nearing the end of this month, especially since we need to celebrate Handmade Dev's 1-year anniversary! Stay tuned for more updates on Twitter.

    On with the news.

    Improvements to Site


    o You no longer lose a post if no title is set
    o Thread titles are updated when editing original post
    o Fixed wrong link in breadcrumb when editing or replying
    o Quote button would sometimes not work
    o Quoted text now links to original post
    o Enabled some nested quotes functionality
    o Better redirects from old Handmade Hero forums


    o Forum tools (delete, close thread. Create forum)
    o Spam report
    o Post Preview
    o Draft
    o New blog post button position
    o Search
    o More discoverable second page of projects
    o Image reordering on project page
    o Profile preview

    Jeroen is working hard on these, and he's typically on IRC if you need to provide feedback on things needed.

    New Projects

    We welcome 8 new projects to the site:

    1. Cipher Drive - cipher.handmade.network

    2. CxxProfile - cxx.handmade.network

    3. DungeonBuilder - dungeon-builder.handmade.network

    4. GbLibraries - gblibs.handmade.network

    5. PhotoCog - photocog.handmade.network

    6. SoLoud - soloud.handmade.network

    7. Storyboard - storyboard.handmade.network

    8. YAVE - yave.handmade.network

    In addition, there are 3 projects pending review, and 2 have recently been accepted.

    HMN Gitlab Integration

    Indeed, Handmade Network has its own GitLab, privately in use by a few project owners and internally by the Handmade Dev team.

    It's time to open up the GitLab for all HMN users (read-access), so I'll be contacting all project owners interested in hosting their codebases there. Closed-source devs may create private repos and only they would be able to access it. And much in the same way project owners with a Patreon have the following on their profile:

    so will it be with their public GitLab repository.

    Monthly Update Policy

    All projects here are hosted free of charge, and what we ask now is a monthly update from all project owners (*). It can be a blog post, forum post, or a simple message saying "Hey, I'm alive!". After a few strikes, they'll be pushed down the list of projects and eventually flagged to hiatus until project activity is noticeable again.

    There are obvious cases where projects may already have self-sustaining communities, or where the owners explicitly announced they will be gone for X amount of time. We won't flag projects in cases like those. This is just a way to make sure handmade projects are not abandoned. The policy won't be enforced by any kind of tracker. Moderators will determine inactivity on a case-by-case basis.

    * Projects featured when the site launched will be grandfathered in.

    Exciting Future

    We're almost done fixing all bugs and the new features are coming in, slowly but surely. Please continue supporting us on Patreon, thank the staff, and don't forget to help out the people working diligently on their projects.


    [Article] NASA notices Handmade Dev

    Abner Coimbre July 19, 2016, 11:46 p.m.
    As we all know, NASA retired the shuttle, and so Kennedy has been transforming into a commercial spaceport, partnering with private space companies to lease the land, "rent" launch pads, and provide launch operations support. The workforce model has been updated too, allowing us civil servants to shift around different jobs (that we prove we're qualified for) rather than being tied to a specific role. These recent endeavors have changed the face of NASA here on Florida. The organization and its day-to-day operations is not the only thing transforming—buildings and launch pads are getting their share of facelifts, and that includes our main headquarters building. Let’s have a look at the one we have right now:

    Fig. 1 - Current Kennedy HQ

    As you can see, old bricks are not the future, and the architects knew this. After apparently watching some good scifi movies, a new concept for the central building emerged.

    Fig. 2 - Picture I took of the new HQ design

    And I am happy to say the building is already in construction, and badged individuals visiting the center may see its progress:

    Fig. 3 - Picture of new HQ in construction, taken from inside the old HQ building looking through the window.

    Peachy. Now, how does this tie in with developers, handmade dev, or anything with this site? Surprisingly, the man leading the design & construction of these new buildings is not only a fan of Handmade Hero, but follows Handmade Dev and the site very closely. His name is Scott Hunt, and Andrew and I had the pleasure of meeting this humble individual for lunch last Friday. During said lunch, Scott gave us a brief history of his time at NASA and it was fascinating. Hopefully he can give us a better background on a post of his own one day, but he is a mechanical engineer who has taken advantage of the opportunities presented to him, always looking out for the hard challenges. Starting as a co-op in 2003 or 2004 at around 17, he went from a student to a lead engineer—designing our most important buildings—at 29 years old (under 30 omg). In his spare time, he has programmed feature-rich game engines and has gotten fairly far with them, but he always felt at the back of his mind that he might be “doing something wrong” whenever his code wouldn’t meet some criteria prescribed by idioms or the patterns provided in books. Like so many of us, that sense of inadequacy quickly dissipated after seeing Casey Muratori’s blog posts or following Jon Blow’s musings. And of course once Handmade Hero started, and Handmade Network springing up a year later, he feels immense satisfaction again with his hobby programming and reading up on like-minded developer's thoughts.

    Fig. 4 – From right-to-left: A full-time NASA engineer, a co-op student, and a promising intern.

    After a tour of his office (and the selfie with the new HQ building in the back), the three of us discussed the value of caring about your work. Scott lamented the influx of young STEM people taking their jobs for granted, and not having a burning desire to accomplish tasks the right way, and figuring out what that right way means in context. But Scott saw hope in Andrew, who has shown to be a hard-working intern, and he saw hope in me (I hope? He hasn’t seen any of my streams yet), and most of all Scott saw hope in the handmade community. Let that sink in, please? It is you guys creating these projects, you guys caring about the best possible way to do things, you guys posting well-thought-out technical posts, you guys being unafraid to ask all the burning questions in your heart on these forums that’s beginning to attract the attention of seemingly unlikely allies. Scott has offered his time and support to the degree that he is able to in order to advance our mission.

    Let’s make Scott proud, shall we?


    [Hiatus] The Handmade Dev Show

    Abner Coimbre July 11, 2016, 2:03 a.m.
    I've gotten pokes from viewers asking about the Handmade Dev Show. It's awesome to have awesome viewers, thank you for that. There's an uncomfortable but necessary transition happening in my life, and in the spirit of ongoing transparency (which was further fostered by approaching strangers with #PokemonGo), my story follows:

    This summer of 2016 is an important rotation at work because I have to fulfill many obligations by the end of it. I've been away from school for a couple years, pursuing internships until getting into the NASA co-op program. Now I need to return (Monday, August 22nd) for a year and finish my degree so that full-time conversion can occur. Before returning, there are panels, showcases, and infamous government forms to fill out, as well as performance reviews. That's the reason I haven't been streaming... I'm exhausted by the weekends. In addition, the one and only Andrew Chronister is here at NASA for a summer internship! I like to be around to help him out when I can, although he's doing just fine independently. Perhaps he'll be willing to share a blog post of his own, detailing all his space adventures here as a programmer.

    Thus, the right time to continue the show would be after the summer—perhaps the day before school starts. I have a feeling streaming on weekends will be the best way to let off steam after a week of programming school. To the extent that classes don't get in the way of course. I want to stay on Kennedy Space Center. Once I'm older and in a higher position, the agency will be a great place to inspire future programmers to "give a f#ck" about developing software, which is my new definition of handmade.


    [News] Handmade Dev Monthly

    Abner Coimbre July 7, 2016, 12:33 a.m.
    Public Beta

    Yes folks, it continues. I always joke that the only time you can be sure a deadline is met by Handmade Dev is if there's a countdown timer behind it (because that is how we launched the beta site by a set date). It will continue to be that way, because we don't want to mess this up.

    Incidentally, at the staff meeting our lead developer has said it's a pretty safe bet the bugs will be dwindling to the point of officially moving to a stable version by the end of this month. Take that with a grain of salt, but his level of certainty was inspiring.

    New Projects to be Added Tomorrow

    Yes folks. Approved projects will be coming in by the end of July 7th, 2016! We generally expect all the new projects to provide monthly updates, and I will disclose what that means in details with the project owners. I ask the community to please support these new handmade projects with feedback and support, as we have done for some of our bigger projects here.

    Personal Thoughts

    Yes folks, personal thoughts.

    Many well-meaning users are always wanting new features or shiny things very fast. I hope you're aware how invested I am in Handmade Dev, as is Andrew Chronister, Jeroen van Rijn, Miblo, Martin Cohen and most of the community. This is a long-term initiative (10-20 years?) and so it is not the end of the world for me if there are a good number pauses, delays or hiccups—at least, of course, until we figure out what works, what doesn't, and to establish the best rhythm to move forward.

    As you're aware, most of my work is behind-the-scenes and involves getting new projects, resolving (many) disputes, and performing outreach with well-known developers (for interviews, PR, having them join the cause, etc.). Establishing long-distance friendships takes an exceptionally long time, mostly consisting of actually gaining access to the developer, exchanging long-winded e-mails and doing hangout calls with broken Linux audio. So even if you don't see me around as much as I would like, please know I'm around.

    And that this is going to take a while.

    [News] Handmade Dev Monthly

    Abner Coimbre June 9, 2016, 1:19 a.m.
    Extended Public Beta

    The fixing of the bugs has led Jeroen to redesign some key aspects of the data model and further improve efficiency. We've extended our beta until the end of June.

    New Projects

    We've had over 10 new project requests so we can host them here on Handmade Network, many of them already ahead in development. We're currently reviewing each one and plan to add them by the end of the month.

    New Staff Member

    Martin Cohen has joined the team! He will be exploring new design options as we work hard to release a stable, fully-featured version of the site. He's made some tweets regarding his current concepts such as this and that (note: totally subject to change).

    Return of the Handmade Dev Show

    It's true folks! The show that brought you Casey Muratori, Won Chun, Jonathan Blow and others for one-on-one interviews returns! And now we divorce ourselves from the game industry for a while and begin a search for handmade programmers in hard real-time industries where lives may depend on your code, such as in space exploration.

    Join us this upcoming Sunday on Twitch at 5PM EDT.


    As always, feedback is appreciated.

    [News] Handmade Dev Monthly

    Abner Coimbre May 23, 2016, 9:51 a.m.
    Since these are the early days of Handmade Network, I want to explain where we want to be headed.

    Public Beta

    It's been one month since the Handmade Dev Team made this site public in order to get feedback. The praise has been great, but so has the amount of bug reports and feature requests. After careful review, we don't anticipate moving from beta to stable release until mid-June. If you're new, the bug list is here, and to submit feedback, go here. We also have major plans to do significant design improvements with the help of developers who just so happen to be professional designers (more on who they are on future updates). For expert people to volunteer their time suggests Handmade Network has some appeal. Which leads me to our next item.

    What Handmade Network (HMN) is About

    HMN wants to be the de-facto home for caring programmers. That is to say, programmers who are dedicated to learn and share. Programmers who test and re-test, and who try all possibilities themselves. For those who ask all questions and put the given answers to the test until they feel they have real data on which path is the best or simplest one to meet their goals. Goal(s) could be optimal performance, exceedingly pleasant UX, easy-to-deploy builds or easy-to-configure libraries. Programmers who develop metrics that, to their understanding, meet these goals. Programmers who know to test their approaches against these metrics and—you guessed it—redo everything if necessary. Programmers who don't settle for the first answer given by a search engine because they don't know if, out of all the known solutions, that that's the right one for them. Their project is less about a job and feels more like a handmade endeavor.

    Anywhere else, developing software is either a greedy business or some strongly-held ideal from the early 90's. Those who host their software here, though, are interested in providing the best possible game or application through very personal metrics, and they do so for the sake of what that program provides as an end-result. The software is not self-conscious, it just is whatever the programmer made it to be.

    If you are that kind of programmer, we'll go out of our way to give you a platform, version control tools, forums, blogs, chat system, and all the support necessary to make your project a success.

    To summarize,

  • If you want to make a game as fast as posible to make some money, try a gamedev subreddit.

  • If you want to make a game that attempts to be the best in some specific axis, and you're willing to do the research and engage with a community of hard workers to make it happen, you're welcome with open arms (whether you're a beginner or not).

  • Notice I'm not narrowing "handmade" to good performance because, although obviously encouraged, there are too many dimensions to programming and not everyone values the same thing. In fact, the projects on the site right now are already heavily focused on improving very different aspects to software.

    Everything I've said is a little vague on purpose as to allow as much diversity of content as we can (e.g. different languages, platforms, software genre, etc.) What we won't accept is someone who is not mindful or wants the easy way out while developing.

    Handmade Dev Foundation

    This "software craft mall" has resonated with kindred spirits, and people will crave caring applications as software becomes even more commonplace or bloated. This is why I am working on founding Handmade Dev: an independent organization established as a 501(c)(3) non-profit. Handmade Network is a non-profit project and the crowning jewel of Handmade Dev, but I see the Handmade Dev Foundation pursuing other initiatives such as educational outreach some years down the line.

    What We're Looking For

    We're looking for more projects to add, and the method is to currently e-mail me at [email protected] This week I'll provide a simpler way to do this, and after the end of our public beta we'll actually have an automated system here on the site. Regardless, myself or staff will always review the submitted project and it's possible that it'll be rejected. This is to prevent HMN from becoming a GitHub repository. We want to have handmade projects with an individual or team behind it. It can't be anonymous, and they must be programming something uniquely their own.

    We're also looking for volunteers and moderators in the future, because we don't want assholes. I am OK with being the asshole that kicks out other assholes to keep the nice guys happy, but notice that nice != softy. Negative feedback from a nice member on your specific project is potentially more useful than a feel-good lie.

    Anyway, e-mail me if you want to support the site somehow!


    Speaking of support, the simplest way you can help us is by pledging on Patreon. A dollar helps us upgrade our services or make development go faster.. I provide any monthly leftovers to the staff as a "Thank You" for their work, so the more money that comes our way, the more compensation I can provide to those making this site a reality.


    Thanks for reading! And thanks for supporting us, truly.

    [Tutorial] Handmade Network IRC

    Abner Coimbre April 26, 2016, 4 a.m.

    Server: irc.handmade.network
    Port: 7777 (SSL) 7666 (Plain Text)

    Using a Web Client

    Use our beta client if logged in.

    We also recommend Kiwi IRC. Remember to change the server name to irc.handmade.network, port number to 7777 and that SSL is enabled.

    Common Channels

    #hero — concerning Handmade Hero

    ...and more (inquire within)


    1. Keep topics related to the #channel you are in. Randomly arguing the finer points of Salsa music on #dev would break this rule.

    2. Programmers are known to curse and engage in flame wars. This is fine in channels like #random, but it's to be kept at a minimum elsewhere.

    3. Comply with channel operators. They will time out or ban users who are visibly out of line, at their discretion and interpretation of what that means in context.

    In the end, we want a toxic-free server with caring programmers helping each other.

    Simplified History

    IRC stands for Internet Relay Chat (RFC 1459), and it's a protocol designed to dictate to a programmer the rules of how to exchange messages between clients and a server in an organized way—this is known as the client/server networking model. If you were to write a C program that implements the server rules of the IRC protocol, and then you run that program, you've made an IRC server. All you'd need is to similarly write a client that implements the client rules of the IRC protocol, and provide that source (or compiled build) to users and have them run each client as they connect to the server through a valid port number. If the client you programmed allows users to write a message through a supplied interface (e.g. typing on the command-line), the server will broadcast it to all connected clients. Chat services such as Slack have relied on an IRC backend before implementing their own. Twitch chat still uses IRC. It's the simplest, oldest, and most well-known form of real-time communication method across the Web. There's more involved, such as the concept of channels, operators, and queries, but that's the general gist of this chat mechanism.

    Per tradition, people ask "Are you on IRC?" instead of "Do you use a chat system that implements the IRC protocol?" to simplify the conversation.

    Installing HexChat Client

    1. Download HexChat

    2. Select HexChat -> Network List from the top menu.

    3. Select Add from the dialog box. Type in handmade.network or some such memorable name.

    4. Change the value of newserver/6667 to irc.handmade.network/7777

    5. Make sure the "Use SSL for all the servers on this network" is checked for secure communication.

    6. Have a nickname and optionally a second choice if the first is taken (See note below as we explain how to register your nickname so it isn't taken away).

    7. If you have a registered nickname, select NickServ (/MSG NickServ + password) from the Login method field. Input your password.

    8. Close and hit Connect.

    NOTE: If you want to register your own nickname, after you've connected to the IRC type in

    /msg NickServ register YourPassword [email protected]s

    Installing Weechat Client (via Matt Mascarenhas)

    Handmade.Network IRC on WeeChat:

    WeeChat is an ncurses-based IRC client, available for Linux, Unix, BSD, GNU Hurd, Mac OS X and Windows (cygwin). This short guide assumes you have installed WeeChat and the CA certificates – on Arch Linux: pacman -S weechat ca-certificates – launched WeeChat and have your typing fingers poised to get yourself into the Handmade.Network IRC.

    To add the secured (SSL) Handmade.Network IRC server to WeeChat, autoconnect to the server upon launching WeeChat and autojoin the #dev, #hero, #hmn and #random channels upon connecting to the server, run the following command:
    /server add HMN irc.handmade.network/7777 -autoconnect -autojoin=#dev,#hero,#hmn,#random -ssl

    To set your nicks and username for Handmade.Network, run the following commands replacing YourPreferred*:
    /set irc.server.HMN.nicks "YourPreferredNick"

    /set irc.server.HMN.username "YourPreferredUsername"

    To use /secure (see /help secure for more information) to store your password, run the following command replacing YourPreferredPassword:
    /secure set HMN YourPreferredPassword

    And finally to use this secured password to automatically identify with nickserv upon connecting to the server, run the following replacing YourPreferredUsername:
    /set irc.server.HMN.command "/msg nickserv identify YourPreferredUsername ${sec.data.HMN}"

    /set irc.server.HMN.password "${sec.data.HMN}"

    With all of this set – and I apologise that it couldn't be a one-liner – you should be able to invoke /connect HMN and so find yourself joined to #dev, #hero, #hmn and #random. To then navigate between these buffers, press Alt+1 (where 1 is a single-digit number) or Alt+j [release] 10 (where 10 is a double-digit number) corresponding to the buffer number of the channel you want. If this is your first encounter with WeeChat then you will want to install buffers.pl at the very least, to make navigating between buffers more pleasant:
    /script install buffers.pl

    If you're enjoying WeeChat so far, stay tuned for a walkthrough of my setup, to give you some ideas for making a really pleasant IRC environment.

    Welcome to the Handmade Network!

    Andrew Chronister April 24, 2016, 5:16 p.m.
    Greetings! We're proud to present the v1.0 release of Handmade Network to the public!

    Handmade Network is the home for dozens of projects that were inspired directly or indirectly by Handmade Hero. Some eschew libraries, while others are themselves libraries written in a simple an conscientious style. Some are released products, others are in early alpha, and some are just beginning to materialize.

    For each, we provide the option to have their own self-contained forums and blog, so they can share news about development and interact with the people using their software directly. Membership is site wide, so anyone who has an account here can post on any project. Additionally, we've inherited the Handmade Hero forums and all the accounts on it, so anyone who had an account on the old forums can log in anywhere on handmade.network with their old account credentials.
    (Note: a registration page for new members will be going up in the next day or two. If you didn't have an account on the HMH forums, keep your eyes peeled for that).

    This website has been a labor of love by our small team of staff -- Jeroen and I have been working around the clock to bring everything together. However, we have undoubtedly overlooked some things. Please report any bugs you find or features you wish existed, and we'll do our best to address them as soon as we can.

    We'll be working hard over the next few weeks to bring in all the features that we weren't able to add before launch, so keep checking back here as we blog about the challenges we faced while building the site and where we're going from here!

    Enjoy the site, and happy coding!
    -- Andrew