Learning To Program, Some Problems that People Have

Recently, I have seen different problems that people have had when starting to learn programming. 

It isn't that programming is very difficult, it is just that people assume too much. The main problem that kids have when learning to program, is that they do it expecting to make a simple game within a few days. Unfortunately, though, it's not about programming visually. They don't fully realize the fact that 'programming' is to write code similar to mathematics in a simple text editor, and not dragging and dropping objects onto a 2D or 3D plane. I found this problem when looking through a few Youtube (yes, I know, usually a bad idea) comments on indie game development or showcase videos. 

The way they see it, it is really easy. For example, this person implemented a variety of different attacks in a few hours. It may sound easy, but you have to really know all of these things. You can't expect half of the code (collisions, health, movement, etc) to be already written for you, so that all you have to code are the attacks and armor. My point is, you CANNOT start your programming with complicated 3D Java and Unity stuff. You have to start with things like Python, and get used to programming and it's methods. I've seen tons of people disappointed because they realize that they have to do a lot of things before they can create their game. It takes time, dedication, and work. 

Some people have the idea that creating game-making programs that are more like what kids would expect would help; however, I don't think that is what you need to do. This is why I dislike Scratch. Scratch is a popular animation and game maker, with things like logic. While there is no code written, you can drag and drop things like if/else statements, create variable, and so on. However, I find this a bit misleading. It is NOT programming, and one should not try teaching using a game or animation environment.

Most of these things I found out when trying to teach my (then) 8-year-old brother to program. I got him started with Learn To Program by Chris Pine, on how to start programming for beginners with Ruby. It was the same book I learned from, and even where I had gotten interested into programming in the first place. The book was not originally for me, it had been for my oldest brother. However, he was not very interested in it after a while, and eventually gave up. I picked it up, and started reading it. It was very interesting to me, especially creating text interactive games with input and if/else conditions. This was before I even played video games (three years ago, though, there was still Minecraft and other popular games), so I didn't have any big idea of what to make. 

When I gave it to my brother, he got about as far as printing text and if/else conditions before he had a problem. In a way, I expected it to happen. He was used to seeing me make Minecraft mods, walk around in a self-coded environment, and do many things with Minecraft Pi. I don't really know what he expected coding to be like, and there was no way I would have him get started with Java. He asked me when he could start doing things like what I was doing. Stuff like making games, and modding Minecraft. I tried to explain to him that it required lots of learning and work and memorization and practice to get as far as I was in programming (3 years of programming in total). 

For some people, programming can be interesting and fun. For others, it is a chore, like learning Algebra. You have to program not for the end result, but because you like doing it. If, for example, I only programmed to make a 3D game, I would lose interest fast. Doing all that 'work' of learning Java and it's methods wouldn't be worth it. However, I don't do it for the finished game. I do it because I like doing it, because it is fun for me. This doesn't mean that I'd lose interest in programming if I had to do it for work and the end result was the most important thing. In my mind, programming is what I like best, not the end result.

EcoCityCraft Minecraft Server

Recently I was looking for a Minecraft server to play on, and I wanted to play on a some fair, economic city server. Going through a few, I found some problems. The first had really bad staff (improper spelling and grammar is usually the first sign, not doing anything about people not following the rules is another), another was endless city that was really hard to play on unless you donated. This pretty much needs you need to travel hundreds of thousands of blocks to get to the end of the city (little or no warps), then travel much farther to find some wood or a material you could sell or use. Then, if you wanted to sell it (in order to buy a plot), you needed to find a person willing to buy. Most of the people one the server didn't bother with newcomers, so it was really difficult to get started. Finally, however, a few server listings down, I found a server called EcoCityCraft. I joined, went through a short tutorial (tutorials are a good sign that the server will cater to newcomers), then got started.

First of all, they had multiple worlds. One was the city world, and another was the 'wild' world. They set it up nicely, where the wild world got reset monthly. Griefing was frowned upon, but allowed, in this world (to prevent people from settling and getting mad when the world reset). PvP was disabled in all worlds except the Nether and PvP world.  I got lucky and when I joined, the wild world had been reset only a week before. Surprisingly, however, there was very little marks of people being there (aside from tons of marks of mining), so it wasn't hard to get wood. It was also awesome that you could use a command "/wild" that would teleport you to a random place in the world, meaning that there weren't any resources around spawn, you wouldn't have to waste hunger and travel far. 

The way the server is setup, you can rankup. The first beginning rank is Builder, then you can rankup to Resident when you earn enough money and read the rules and tutorials. After that, you can rankup to Mayor, which allows you to make a town/city, meaning you could rent/sell out plots or houses (called pre-builts) to players. Then, you could become a President, which meant that you could own two cities/towns. 

The players on the server were all very nice, and welcoming to newcomers. Right away, I was able to get a free apartment (usually fairly expensive, or at least not free) that was only available to newcomers and permission to use that city's farm. The reason farming is a great way to earn cash is because you can sell the produce to the server (instead of a player). This meant that one 'career' (or method of farming) would always sustain you at the same rate. That is opposed to selling to players. If you were trying to sell carrots, for instance, people wouldn't always want to buy from you. They also may as well make their own farms instead of repeatedly buying from you. However, when selling to the server (using a command), it would always give you the same amount per item. Then, you could really have a stable method of farming, and this also gives a stable economy to the rest of the server (prices for plots, for example, wouldn't sell depending on how much much money the average player has). 

The best method of farming (farming gave the most money, wood sold for very little and mining wasn't always dependable) was to farm cocoa beans, as they sold for a fair amount and were quick and easy to do with the proper tool. After about 15 minutes of farming cocoa beans in the town I lived in, I earned $1,000 Eco Dollars (the currency on the server). This was enough to buy a small 10x10 plot of land in the same town my apartment was in (prices change per town, but 1k for 10x10 was regular) right next to my apartment. However, I found out that once you buy a plot, you lose the apartment (probably because newcomers wouldn't be needing the apartment anymore if they have another place to stay. This was a rule for the specific town, however). I built a small business building (that I have only used as a small storage for now), complete with four stories and cyan-light blue glass windows. However, I did forget that the town had a max building limit (15 blocks) and mine went over it (17 blocks high), so I just had to lower it a bit. After some more more farming, I saw in chat (where people advertise houses, plots, jobs, etc) that someone was selling a lakeside house, and that it was the last one left in a row. I saw the house (donaters can use /tpa for teleportation), and immediately wanted to buy ,it. It cost $5,000 ED, and I only had $2k ED.  I was able to buy it for $2k, then pay back the $3k when I earned it (the amount people trust each other is nice, though if I hadn't paid it back the house would have been taken away. 

The last great feature about this server was the donation balance. There were tons of things you could donate for (including fly and teleportation), but while those seemed like big cheating things, it did not impede gameplay at all or even make it worse for non-donors. Most donators, in fact, helped other people who wanted to use the features (like helping teleport to each other). So though the donation rewards seemed huge, they did not seem to impede on gameplay much.

The Many Different 3D Printing Settings

To 3D print a model file, it must first be sliced. This process is where a model will get all of it's settings.

3D printing a 3D model isn't as easy as drag-and-drop. First of all, a 3D model file usually only contains mesh data (and sometimes textures). Where would you change the speed, quality, size, etc? For a 3D printer to print a model, the model must be converted into a different file that is a list of commands telling where the printer should go, at what speed, etc. The kind of programming that a printer understands is called gCode. 

When I slice a file, I use a program called Cura. You can most 3D model file types (like obj and stl), and then export to a gCode file. Of course, you should not consider the gCode file as a 3D model, or Cura as a model converter. When you import a model, you can choose many different settings. Some of them have to be specific to the filament or printer you are using, like the diameter of the plastic and the flow of how fast it goes into the extruder. Others, however, can be decided upon depending on the print itself (things like quality or whether or not to add supports). This allows you to get the right ratio of speed to quality, and sometimes you can print a high quality print in a short amount of times by choosing the right settings. 

The first setting in the list is the layer height. During the printing process, models are printed by laying one layer on top of another.  The layer height decides how many layers to fit into a space. The more layers, the higher quality, since the lines that you usually see on prints wouldn't be there. However, it takes longer since there are more layers to print. If you do less, then there would be visible lines on the print, though it does go faster since there are less layers to print. To little layers, however, and it won't bond with the layer underneath it. 

The next setting is shell thickness. This is how thick (or strong) the layer on the outside will be. The reason this is a setting is because sometimes you would want to print hollow models but don't want a weak shell, or even semi-hollow models. Usually, though, you wouldn't change this. Another setting is the bottom and top thickness. When printing with 50% infill, it creates a grid pattern on the inside without fully filling inside. The bottom and top thickness is how many layers to print before it starts the grid pattern and how many before the surface of the print is done. The fill density settings is next. The less you fill it, the more hollow it will be. When it becomes hollow, it creates a sort of honeycomb grid pattern inside. Less infill will drastically speed up the print, but make it feel cheaper due to light weight. The more infill, the longer the print will take. However, it is worth it for that strong plastic feel. This is where you could change the speed to a high amount, and fill the inside completely. 

The next setting is speed. This setting will change the time it takes to print the most. The value of this setting will most likely be specific to the piece you are doing. The higher speed, the lower quality, and it may be that the print could fail if this setting is too high. A lower speed helps the print hold together, and make it much stronger during and after printing. Sometimes, for large prints without delicate parts, I will make the speed very high. Usually, however, (especially for overnight prints), I will make the speed lower. Usually when quality matters or time doesn't. The next two settings are the nozzle and bed temperature. These are specific to the plastic you are using, and once you can find a nice temperature (or use the default) you usually wouldn't change it again.

A really nice option is an option to add supports. Due to the way printer do their printing (layer on top of layer), overhangs do not print well (if at all. Floating pieces don't print).  However, when you add the supports option, it adds a weak and easy to remove support underneath overhangs and floating pieces. This wastes a tiny (very tiny) bit of plastic, though the main problem is that it takes longer to print. However, for overhangs, it is necessary. Probably one of the big satisfying things of life is digging into a print with pliers and removing the supports. The collapse when pressed, making them come off in chunks. Normally, though, you wouldn't use supports.

Another option is the platform adhesion option. You would use this when dealing with warping and/or prints not sticking to the bed. The raft adhesion option prints a raft (hence the name) underneath the model, meaning that it warps instead of the print. It also means more of the print is touching the bed. Like the supports, it comes off of the print fairly easily. The next option is the brim option. It is similar to the raft, except instead of adding itself under the model it wraps around the model, sort of like a skirt. It prevents warping better, but not so much with adhesion problems. Both options take a lot longer to print, so it is better to get a heated bed or use a better adhesion solution (like ABS slurry).

There are some other more specific options, like the speed at which parts of the model print at, but almost all of the others have values specific to the printer.


Usually, to control your 3D printer and start prints, people use their computers or an SD card. However, they both have their limitations

The problem with 3D printing with a computer is that the computer has to stay connected to the printer. This means you can't really move the computer, and there are tons of situations in which you wouldn't want to be working next to a 3D printer. One of them is the slightly toxic smell of ABS plastic or Acetone. 

The problem with 3D printing from an SD card (you can plug an SD card into the printer, that has a file that the printer can print with) is that you have very little control over the printer. You can't view the temperature, the progress, you can't (properly) cancel prints or pause them. In fact, if your print does fail, the only way to stop the printer is by unplugging it. This is never advised, and usually means you have to power cycle the printer to get it to work again. 

Obviously, the majority of the people who own 3D printer don't use the above two options. But what do they use, then? The answer is a simple, $35 programmable board. Namely, the Raspberry Pi. There is a program that you can install on the Raspberry Pi called OctoPi (the project name is OctoPrint, but the version for Raspberry Pi is called OctoPi). All you need is a power cord for the Pi, an Ethernet or WiFi dongle, and another cord for connecting the Pi to the 3D printer. You can also get a camera module to view your current print (live!) and record timelapses.

What does it do? Well, it creates a whole online UI from which you can control your 3D printer. Normally, you can only access the UI when connected to the same network as the Pi, but you can set up a port forwarding system, allowing you to control and view your 3D printer from anywhere in the world, as long as you have internet connection. In some cases, for example, you would want to print a 70-hour object (things like helmets and exoskeleton pieces, mostly). You could have the 3D printer running while you go on a small trip to your grandparent's house, but if you used a computer and the print didn't go correctly, you could come home to a big mess. However, with OctoPi, you could view your prints (even on the road) and make sure everything is going correctly. The only thing that is missing that would make things really automated is a way to remove prints without actually being there.

There are many other things you can do with OctoPi, too. For one, you could upload your "slicing" (things like the speed and temperature of the printer) settings to OctoPi, and then it would turn your 3D model files into 3D printer files. This way, if you used a different computer, you wouldn't have to worry about copying all your settings over. OctoPi also has a gCode viewer, meaning you can view what the print will look like by viewing each layer individually. It also syncs with the printer progress, so you can see what it is supposed to be printing. Not only that, but it has a plugin system. There are currently about 20 different plugins you can get (things like model viewers), but the plugin API is very new so there could be many more coming. 

It also has a login system, so you don't have to worry about showing other people your 3D printer UI page. They can view the status of prints, view the print going live, even download timelapses, but they cannot control the printer or it's settings. This means that if you have a fairly large following, you can let other people see your 3D printer working! Also, with the plugin API, you could code a plugin that automatically shares timelapses to your social media. The timelapse feature on OctoPi is very nice, and timelapse settings are very configurable. Currently, I have my settings so that every time it goes up a layer it takes a picture. The effect is that the print seems to "grow" upwards. When you think about it, it used to just be a picture on a computer, and it has now grown into a real life object. Here is an example of a timelapse:

Installing the new Ubis 13 Hotend

Printrbot recently released a new hot end for their 3D printers, and can print with a lot more detail.

The hotend is the nozzle of the printer, the part that contains the extruder and the part that melts the plastic. Some nozzles are more detailed, some of them can handle more heat. This nozzle is way more precise, and even cheaper to make too! I ordered the new Ubis 13 hotend from Printrbot about a week after it came out. Looking at the instructions online, it seemed only mildly difficult to put together.

Normally, I would have my older brother put it together (he put together the heat bed). That is because every time I have ever tried installing or soldering any kind of hardware, something gets fried. However, it looked like there was little risk of things going wrong. After all, I only had to plug four things in; what could possibly go wrong? At first, nothing did go wrong. This hotend requires a fan to function correctly (if not, it jams), so I had a little extra work to do. I plugged both cords of the fan into the Printrboard (the PCB in the printer). Then, I removed the hotend I used previously (when I got a good look at it, it seemed really beat up and dirty). I screwed in the new hotend easily, then after a little bit of trouble I connected the hotend cords to the new hotend.

Finally, the moment of truth. However, it was not to be. I wasn't able to connect to the printer (it was spotty before anyway) using OctoPi, or any other computer. Then, I tried reflashing the firmware of the Printrboard (the software built into the printer), but even then I wasn't able to connect to it (which is supposedly impossible if it was functioning). I tried printing from an SD card (in case the micro USB input on the printer was broken), but that didn't do anything either. I thought that maybe my horrible luck when it came to putting things together had come back, and I had fried my 3D printer. 

Finally, I disconnected the fan and hotend cords from the printer that I had installed, and suddenly I was able to connect to the printer again. It crashed immediately, though, saying there was no extruder. I plugged the hotend back in, and the printer was functional. I was able to do everything like heating up the bed, extruder, moving the head, etc. However, it would melt the hotend if I tried using it without the fan, so my problems still weren't solved. 

After connecting the fan again, I was able to connect to it again but the fan wasn't functioning. Whenever the printer is on, the fan is supposed to turn on. I have a feeling that either the fan was broken before I got it, or I broke it when trying to connect it. Strangely, though, no one else had my problem.

3D Printing a Minecraft World

I recently had the idea of 3D printing Minecraft worlds, and even though I didn't expect much, it turned out really nice.

I never really tried 3D printing a Minecraft world before, but I realized I never had a reason why not to. I had the idea that it wouldn't work, and it was probably on account of the warping. But now that I had a heat bed and was using a really good adhesive method, I was getting almost no warping at all anymore. Out of curiosity, I 3D printed a portion of a world. The result was much better then I expected:

In this print, I included a lot of the underground to give it a good base. I made it 75% hollow, and I was able to actually see the caves (which were hollow, too) inside the print. If you cut this print in half, you could see the caves. Even on the side, where it cut into a cave, it is hollow and it goes down a bit. Then, I thought about selling 3D prints like these, of people's own worlds. I asked on a 3D printing community on Google Plus if anyone would be interested in buying a 3D print of their Minecraft world for about $4. Obviously, everyone there had a 3D printer so I didn't expect any offers. However, one person asked to get a print of two separate parts of their world (two different prints), and also two other prints for his sons. However, it was from a Pocket Edition world, which posed a big problem

The way I get the 3D models is using a program called Mineways, which allows  you to select a part of the world and export it as a 3D model. However, Minecraft: Pocket Edition was written in an entirely different language then the normal PC version, which meant that the worlds were coded in a whole different way. Not only that, but getting them off of the iOS/Android device is fairly hard, too. It may as well have been a completely different game. However, the latest development versions of MCEdit (a Minecraft world editing program) allows you to open these worlds (after you get them off the device, which wasn't as hard as imagined). From there, you should hypothetically be able to save/export it as a Minecraft PC world. Hypothetically. However, due to using a development version of MCEdit, it gives me an error when trying to save almost any world. This meant that I had to export it first as a schematic file (kind of like selecting an area and putting it on your clipboard), then import it into an empty PC world. This worked (thankfully), and I was able to open it in PC edition. It looked pretty cool, and this meant that I can switch worlds between PC and iOS fairly easily (probably, though, inventory contents wouldn't be saved).

From there, I was able to open the world in Mineways and export it as a model, and print it. You can see the result:

Calibrating a 3D printer

When building a 3D printer, calibrating it is the first thing you should do (after assembling, of course).

When you calibrate a 3D printer, you are making sure that the extruder (the part that squirts out the plastic) starts at exactly the right position. The horizontal and depth axis, X and Y, are easy. To calibrate the printer, one way is to move the head and bed manually (physically moving it with your hands, how horrible) to a corner position, and set that as 0 on both axis. Then, it knows that 6 inches (or whatever the max size is for your 3D printer) to the side on the X and Y axis is the limit it can go. If you moved the head and bed so that the extruder is in the middle, and set that to 0 for both axis, it will try to move six inches to both sides. Since it cannot move off of the board, it will grind horribly (it doesn't do much damage, if any, but it sounds really bad).

The X and Y axis don't really need much calibrating, and it's incredibly simple. However, the Z axis requires much more attention. The First Layer (pronounced "Thee" First Layer) is the most important part of a successful 3D print. When you think about it, what is even keeping the plastic 3D print onto the board? Really, it's just the pressure (commonly known as the "squish") of the first layer, which, when dried is still slightly bonded to the bed. However, you need a fair amount of squish for it not to come off. Too much, though, and the first lines will be flattened and the rest of the print will not go correctly. You have to get the distance between the hot end (the tip of the extruder) and the bed exactly right to 1/50 of a millimeter. Thankfully, however, you don't have to rely on your physical skills for this part. You can run commands that set the Z offset, and you can get very precise. Usually, you have to do quite a bit of test prints to try and get the right distance, and each time tweaking it slightly.

However, it is worth it in the end. Seeing the plastic squirt out in nice, straight, perfect lines is like getting a huge chunk of cookie dough in your cookie dough ice cream.

3D Printing Basics

I will explain how a 3D printer works, and problems that arise for people just starting.

3D printing can be explained as basically a motorized glue gun that is squirting out plastic instead of glue. It is also similar to a motorized pencil drawing in 2D. After it fills in an area, it moves up a little and starts laying plastic on top. It seems simple, and at first it is.

However, there are different kinds of things you can print in. There are different kinds of plastic, for example. There is PLA plastic, the cheaper kind, and ABS plastic, the slightly more expensive but drastically different kind. 

PLA plastic is simple, and when printing with it it will print a bit rougher. It has a more plasticy feel. However, due to it's slightly lower printing temperature, it's nice (some even say candy like) and non-toxic smell, and lower amounts of warping, it is a preferred options for those using their 3D printer for printing small fun things.

ABS plastic is the same plastic as the kind used in Legos, and rounds nicer, and has a more solid feel. You can get much higher detail with this plastic, but it is a lot harder. First, unlike PLA, it has a toxic-like smell. However, while it is not poisonous, it has given a few people headaches before. The biggest problem is that it warps heavily. When warping happens, the edges start to curl up. This isn't the main problem with warping, the main problem is that less and less of the print stays is on the board. This means that it will almost always pop off and make a mess. 

The solution to warping (which happens with both PLA and ABS, though not so much with PLA) is to get a heat bed. A heat bed pretty much means that the plate which prints are printed on can be heated. When it becomes hot, the bottom of the print touching the heat bed melts just a little, but enough that it stays put. Warping happens when it "dries" too fast, but with a heat bed it isn't a problem. This also means that it will stay on the bed without coming off.

7-Inch Touchscreen For Raspberry Pi

I teach an 8-year-old, and he got got a 7-inch touchscreen for his Raspberry Pi a few days ago.

The reason he wanted it, was because he had a small screen-case, similar to the ones for iPad. When he got the keyboard, he had also gotten a tablet. However, the tablet didn't work, so he sent it back but kept the keyboard. Then, he saw that he could get a screen compatible with the Raspberry Pi that would fit into the keyboard case, so he ordered it.

It came with drivers on a disc, but it was shipped from China. This meant that the disc was scratched so much that the drivers were corrupted. The company that sold the screen wasn't very big or popular, with only a few reviews on the screen itself. It was fairly hard to track down the original product page on the company website, then find the drivers online. However, it did have an installer, which made it a lot easier. After I installed it on the Raspberry Pi, it (very surprisingly) worked immediately. And another great thing about the screen is that it doesn't need much power to work or even a separate power supply, it just plugs into the Pi via HDMI and USB (HDMI for the screen, USB for power and touchscreen).

This touchscreen is capacitive, meaning it responds from the small amount of electricity in the finger and body. This is the same kind used in iPads and most touchscreen devices.

The other kind, resistive, creates two thin layers of material, one on top of the other. When you press on the top on, the part that you pressed down touches the bottom pad. Then, it detects when and where that happens and responds correctly. This means that any kind of pressure works, but it is more accurate.

Unreal Engine 4

Unreal Engine 4 is similar to Unity, but concentrates more on graphics, optimization, lighting, etc.

It is fairly new (about two years old), and as of now there has only been one actual game created, called Ark: Survival Evolved. However, it has a ton of potential, and unlike other games with really nice graphics, this engine is optimized enough so that there is little or no lag! One of the biggest features over Unity, however, is the landscape designer. This is a feature sorely lacking in Unity. You can easily design landscapes and "paint" them for different areas, like mountains, paths, fields, etc. Not only that, but you can also "paint" on foliage! You can choose what kind of foliage will go into a paintbrush (models/materials are produced by the developer) and just paint where you want it to go. This makes grass, trees, bushes, etc a lot easier to place, without having to worry about placing hundreds of models.

Beside the engine itself, however, Unreal Engine heavily supports game development and student learning. It is completely free (no "Pro" version, though you can buy assets in the store made by other people), and you don't even have to pay Unreal Engine to use your game commercially! You just have to give them 5% royalty of your game, and you get the 95% rest.

And if you have a game you are working on, and you have a first working beta version ready, you can get a grant (Unreal has 5,000,000 USD to give away in grants) that will help you with developing your game, and eventually releasing it the public. Most would assume that there is some catch; why would someone give you money for free? To quote them:

Why Would We Give Away Free Money?

Simply put, we succeed when you succeed. Unreal Dev Grants can give you the boost you need to take your project beyond working prototype. Epic wants to help you focus more on creation and worry less about keeping the lights on.
— https://www.unrealengine.com/unrealdevgrants

Unreal is focused on helping developers make better games, and not on making money.

Not enough for you to download it right now? Check out some of these videos of the engine in use:

Unity 5

Recently, I found out about a 3D (and 2D) game creator called Unity.

When using Unity, you will actually be concentrating as much (if not more) on the 3D modeling and level creating as you would on the programming (known as scripting to Unity). When you first open it, it seems a lot like a 3D modeler, minus the modeling. You can import tons of different kinds of 3D files, even .blend (Blender) files! Nearly any device works with it too, without having to change much. So if you developed a game for PC, then you would just have to add touchscreen controls and change the screen size if you wanted it for tablets/smartphones. Normally, you would have to program the whole game over again in a different language that is supported on smartphones!

There are also a ton of different options for models and even animation. For example, you could just check a tick box and you would have collision prevention implemented for that model. And for animation, you could animate in Blender, then in Unity segment off certain parts of the animation that would run when you wanted it to in a script. It is really easy to make custom animations for a player like running and jumping, too! Many games use Unity now, especially on the auto-optimization that comes with it.

Flappy Brain

Winkleink created a Flappy Bird clone called Flappy Brain, and it's pretty cool.

When you first hear that, you think, "Oh, it's another one of those Flappy Bird clones." But it is far from that. Controlled by the Raspberry Pi, Winkleink (pen name) used PyGame and his brainwave reader create   a brain controlled Flappy Bird game. The brainwave reader is a device you strap around your head, and it feels your pulse. When you think hard, it detects. While it cannot tell what you are thinking, it is useful for making games.

In this game, the bird goes up when you aren't thinking very hard, and down when you start thinking. You have to avoid obstacles, and it really quite hard. For example, when you have to go up, you have to try not to think of anything, and the closer it gets to an obstacle you have to make sure you don't get too excited. When going down, you have to think hard. Winkleink's method is to do simple arithmetic, and when he wants to go up he blinks a few times to stop his thoughts.

Space Engineers Game

I recently came across a new (relatively new, came out 6 months ago) game on Steam called Space Engineers. It had some pretty good reviews (4.9 out of 5), and I watched a few trailers. A few people described it as "Minecraft For the advanced". I would describe it more as "Minecraft with advanced physics in space". While it is not very blocky, you do build a lot. 

The game is in early access, which means that you can buy it for less ($25), but it will probably be unstable. The reason a developer would release a game before it is fully done is to get feedback so that a full release will appeal to the general public, and to get bugs fixed before (again) releasing to the general public. I have played it, and have not really come across any big (or even small) bugs.

The game has two modes, survival (not quite finished developing, but playable) and creative. In both modes, you can choose what kind of world you want. You can start on a plain platform, with a bit of fuel powering the oxygen and gravity generators. Or you can start on a platform with a large ship at your disposal, and a few small fighters and maintenance vehicles. The game, like Minecraft, has no end goal. In fact, you cannot even win the game, as you could in Minecraft (killing the Enderdragon). You build giant ships, small ships, station, and expand your space world with awesome creations. It has tons of features, like rotating pistons, hangar doors, motors, buttons, and more. You can build a space station, and have it send out mining drones that would find an asteroid, mine a bit, then come back and deposit the ores. You can also mass produce small ships, which can be sent out to explore the (optionally) infinite world. 

Of course, all games will get boring if everything is left to you. However, not everything that happens depends on what you do. Random ships will spawn in the world and be sent in a random direction. Each ship has guns that will shoot you down if you get too near, but some have less guns then others. Sometimes, it will be a few ships, like a mining transport and a military escort. There isn't really a story behind the game, though some people like to roleplay. Each ship has some loot or other, and a few even have traps that will blow up the whole ship if you aren't careful. In survival, these ships are very useful as that can be broken down for their materials. In creative, it really fun to build a small ship and try blowing up as much as possible, while dodging the shots. The game is also multiplayer, which means you can do battles between you and your friends! 

And if the game is to easy for you, or even if you want more of a challenge to your buildings, then you can turn on meteor showers. Depending on the setting, every few minutes randomly sized meteors will rain down causing considerable  damage to you and your buildings. Unfortunately, they always come from the same direction, meaning that you can just build your space station on the other side of an asteroid and be safe. 

And if it still isn't challenging or doesn't have enough features, it has a whole modding API! Some mods can add things like planets, or blocks, or just aesthetic features. Probably two of my favorite mods is one that makes the random ships that appear head towards you and attack you, and the other will spawn small ships at a random distance from you that have a small AI, which will try to do as much damage as possible to you. This means that adding guns to your base, even in creative mode, will actually become something you have to do to protect your buildings.

Overall, it is a really fun game, and I suggest you get it!

Windows 10

Microsoft will be releasing a new version of Windows, called Windows 10. Now, if you are currently running the latest Windows version, you should be running Windows 8. The question is, why skip Windows 9? There isn't really any official reason, but I'm guessing that 7 ate 9 (get it?).

One of the big things Microsoft is concentrating on are easier touchscreen controls. This means that the Windows menu will be looking a lot different, and a lot easier when you have a touchscreen computer. They are also upgrading the Windows 10 store, and announced that they are releasing a new version of Minecraft for Windows 10, called Minecraft: Windows 10 Edition Beta. What they basically did is port Minecraft: Pocket Edition (for iOS/Android/etc) to Windows 10, complete with long awaited touchscreen controls for touchscreen computers! It's not exactly the same, however. For one, they added normal keyboard/mouse controls, and it is supposed to be smoother. Not only that, but it is written in C++, which means a lot faster running. Currently, the Minecraft PC version is written in Java, which is easier to write in but harder on the performance. And since Windows 10 Edition Beta and Pocket Edition are so similar, they can finally join each other on worlds. Not only that, but you can join Xbox 360 worlds too!

For a while, there was some Windows to Xbox integration, but in Windows 10 not only can you play all Xbox (downloadable games only I assume) games, but you can stream them from your Xbox to your PC screen too! And when you play on the computer, you can record gameplay without any extra software. 

They are also taking a hint from Apple and Google, and will be adding a voice control AI called "Cortana". Cortana pretty much does everything that Siri does on iOS. They are also adding easier window switching when using Alt+Tab, making it easier to switch windows when you are a programmer and have a clutter of programs you need open.

Cortana isn't the only thing that they are copying from Apple. Windows 10 will feature it's own browser, called Spartan. It has pretty much everything that Safari has, including reader mode and a PDF viewer. 

Windows 10 is also coming to phones (there has been Windows 8 phones, and only those will get the upgrade), and the Windows 10 PC version will have better integration with the phones. Most (if not all) Windows 10 apps will share data across phones via Microsoft accounts.

Windows 10 will also feature a Tablet mode, which provides easier mobility when using a tablet/computer hybrid. This can be activated manually in settings, or used when a keyboard is disconnected from the tablet computer. Finally, they are merging the Control Panel into the PC Setting introduced in Windows 8, which means that you no longer need two windows for simple tasks.

I think that this will be a nice update, but my biggest hopes isn't for the features. I am hoping that it will be less RAM intensive, meaning that the whole system will use less RAM and become faster. This has been a big problem with Windows, because computer with 4GB of RAM or less cannot load Windows 8 Start Screen very fast, and sometimes only has 2GB of RAM free after the system has claimed it. 

Overall, I like what Microsoft is doing, and is finally heading in the right direction.

Teaching Programming To an 8 Year Old

My Dad has a website where he teaches parents how to develop talents in their children, and one of the people who bought his curriculum were some people who lived about a mile from our house.

Their 8-year-old son had an interest in general computer technology, and had the hardware and software to become good at programming. His parents asked me to come over to their house and teach him about computers and some general programming, and I showed them my 3D printer and Raspberry Pi projects (especially the wearable Raspberry Pi I'm calling WristPi), and basics on how they work. The son had a Minecraft account on the PC, and had just started installing mods.

I helped him out with installing a few mods, and how to switch versions of Minecraft depending on the mod version. I played a little with him on my server, and taught him how to use some of the more advanced mods. I listed a few sites where you could get mods, and where to buy the Raspberry Pi. I will be coming back in about a week to teach him some programming, and bringing a Raspberry Pi, too.

Wear The Raspberry Pi With Screen On Your Arm!

About a month ago, I got an idea to make a touchscreen computer that attaches to the upper arm/wrist. I ordered a PiTFT touchscreen , a battery, and the PowerBoost 500 Charger (battery and charger for making it portable). Then, even before it came in, I wrote a GUI in Python/PyGame. Currently, it has a camera, MP3 Player, picture gallery viewer, and video player (broken). I had first planned to make the MP3 player the only feature, then I decided adding a camera would be a good idea. After coding the MP3 player (311 lines of code) in a file, I then made a separate file for the main/home screen. I added the camera (73 lines of code) and image viewer (149 lines of code). They were all separate programs, which turned out to be a VERY bad idea. 

Basically, how it would work, is the main screen was a simple PyGame program with barely 100 lines of code, and when you clicked/tapped on one of the icons it would run a console command which ran the right Python program. This is one of the few times it sounds bad in theory but went fairly well in practice. Until, that is, I actually put it onto a Raspberry Pi. Everything on the Pi is about 4 times slower, and had about 8 times less memory then the computer I was working with when making the program. While opening a new window on top of the main screen had very little delay on the computer I was using, on the Pi it had about a 5 second delay. Not only that, it didn't work in fullscreen, and used up a lot of RAM with two programs running at once.

Finally, I admitted to myself the mistake of what I did, and combined all four programs into a single program, meaning only one display window. This got a much better response, and it has worked out fine. I did try adding a video/movie player to the Pi, but while the sound played fine, it just couldn't update the screen fast enough, and it was just too slow. I ordered a Pi 2 (more about that later), which has twice the RAM, and I may fix the video player later. 

I was actually able to run the GUI in fullscreen without starting booting to the desktop, which means that a lot less RAM is used up.

Some really cool features; to update the program, I use Dropbox. I update the program on the computer, then I upload it to a special folder on Dropbox. Then, on the main screen of the Pi, there is a button which checks for a newer version of the program on Dropbox. It one is found, it uses it and restarts the program. Another great feature is the one for putting music onto the Pi. All you have to do it plug a USB stick into the Pi, then tap a button on the MP3 player screen, and it will copy all music from the USB stick to the music list. I also added a feature which would upload pictures from the gallery to Dropbox. 

I will be 3D printing a case for it soon, but I need a heat bed first. After it looks good enough to boast about, I'll probably do a video about it.

Maker Faire Bay Area 2015 Event

I finally got to go to the  10th annual Maker Faire in the Bay Area, and it was great. The Maker Faire is a where tons of "makers" (people who make really cool tech futuristic things) come and set up exhibits where they show off all of their cool tech. It is a giant event, and about 30,000 came. I got to see a ton of famous developers, including some of the head Microsoft directors, Eben Upton, the creator of the Raspberry Pi, Autodesk directors, and even the developers of the 3D printer I have now (Printrbot). In some areas, I got access to online tools and beta apps that you could only get if you go to the Maker Faire. I saw drones battling each other, life size R2D2 units from StarWars, and at least 50 different 3D printers. 

The first thing I saw was a "hovering" seat, which acted similar to how air hockey works. The small platform-seat had a black air bag on the bottom, with small holes. The air back is constantly being filled with air, which is exiting through the small holes at the bottom, giving it a slight hovering effect. Then inside a building (the whole Faire was held both inside and outside) I saw ton of different printers. I saw a Dremel printer, which did pretty much the opposite of a 3D printer. If you put a block of wood on the printer bed, it would carve things if given a 3D file. I passed a lot of different 3D printers and their developers, and even a 2D printer. This printer acted similar to a 3D printer, but you gave it a pencil instead of filament and only "printed" on one layer. 

Then, probably my favorite part, I saw a newish app called Imaginary Spaces. It lets you build a house in 3D, then simulate it in first person view (and at the same time building it). Then, you can actually export it into both Minecraft and as an STL file for 3D printing. I got a "business card" in the form of a 3D printed castle (made in the app) with the words ImgSpc at the bottom. I also got access to an early beta version of the app for iPad/iPhone. Then, in the next building, I saw an example of using servo motors and an iPad to move things. There was a lot of iPads in the booth, which, when you moved the little cursor, it would move a balloon tied to one of the motors. Next to that booth, I saw a fighting robot, which would be able to deflect and know when the best time to attack was. In this case, though, it had a balloon instead of a stick. I also saw an example of sensors, combined with the Raspberry Pi and the Arduino, including color sensors, motion sensors, pressure sensors, and depth sensors. Then, I saw some 3D scanners, by Apple, which was basically a pad which you placed an object on and it would get scanned. After that, I saw a Kinect 3D scanning station for scanning people. It was a rotating platform and a robot that moved the Kinect up and down slowly. You just stand on the platform, and it would scan you and export to a 3D model.

I also saw tutorials on how to solder, which I probably should have taken (seeing as I had short circuited two Raspberry Pi's as a result of a failed soldering). Then I saw a popular game called Roblox, which had been out for a while. Roblox was very similar to Minecraft (but existed way longer) which basically was a game engine built for making your own worlds, then sharing them for multiplayer battles. In this booth, you could use a special game engine which allows you to code your own logic into worlds that you built. Only people who went to the Maker Faire could use this engine. Then, I saw a freaky humanoid robot (only the upper half). The fingers were especially creepy, as well as the (probably prosthetic) teeth. It had a very monsterish deep voice, too. I saw a thermal camera, which could detect heat. If you rubbed your hands a lot, then it would see the heat resulting from the friction. Then I saw a thing called Game of Drones, where people used custom built (and even bulletproof) cases for their drones, then battled them. It was a large area, with a net around it. If a drone got too near the net, it would get tangled. It was very crowded around there. 

Raspberry Pi SmartPhone

While browsing Instructables, I found a tutorial on how to build your own smartphone using Raspberry Pi and some other fairly cheap components on Adafruit. It looked fairly simple. The author had made his own operating system called Tyfone, and it could receive and send texts, call, and do most things a normal phone could do. It was a modification of the Raspbian operating system, and didn't look too hard to make. You can't download apps, you make your own, which I thought sounds pretty awesome. Plus, you can make both apps and OS using Python, which is my favorite programming language! 

I actually already have a lot of the requirements for building a smartphone. Over the years (or months), I have bought small things for the Raspberry Pi like a camera, USB hub, adapters, things like that. The two big things I need now, is a portable power supply and a small touchscreen. Thankfully, you can get both of these things for about $40 each. 

PrintrBot Simple Metal 3D Printer

I would have written a blog post about it sooner, but my younger brother and I got a 3D printer that came in yesterday. This is the PrintrBot Simple Metal, which is a really nice printer for a cheaper price (about $600 for the assembled, $529 for the un-assembled). I immediately tried it out a bit, mostly moving the nozzle around, then tried for some printing. I ordered 24 feet of filament for $20 on Amazon (white), and I tried it now. After a few hours, I FINALLY got it to print a bit, but it was extremely messy and didn't come out right. I had to do a lot of calibrating around on the Z axis (up and down), and finally got the right distance above the bed. Even now, it has to "warm up", I need to start it printing, wait for the filament to actually start coming out, then quickly cancel the print, move the nozzle away, take away the filament mess that it left, and try over again. Then, when it still didn't work, I searched online and found that hairspray actually helps to make the filament stick when it first comes out. Sure enough, it did the trick. The first successful print was of a friend who had visited that day. My older brother quickly scanned him, sent me the model, about an inch big, and I printed it. It took only about half an hour! I don't have any images of the print, though. My older brother did take a timelapse, which I will upload once/if he sends it to me. 

The next successful print was a fan shroud. The printer has a fan next to the extruder which dries the plastic when it is put on the print model. The shroud is something that PrintrBot left off, so that you could print it. It mostly just directs the air onto the plastic that is being laid down. I actually had problems with warping, where one corner would lift up a bit, then another. Then, it would come off the bed and get picked up by the extruder, ending in a mess which would have to be cleaned off of the extruder. However, in Cura (the 3D printing program) I found an option that prevents warping. It makes a "raft" underneath the model, in plastic, and you can easily take it off of the main model. It really helps, though it used up a bit more plastic and took about 10 minutes longer for larger prints.

Then, I decided to see how I could print a few Lego pieces. My older brother found a 3D model of a 4x2 Lego brick which he sent to me and I printed it. It had some small problems, but it actually fit onto normal Legos. Then, we printed a clone helmet. This one was very difficult, as we had to get the right size. We did three prints, the first too small, the second too big, and the last was about the right size for Lego minifigures. After cleaning it out a bit, we were able to fit it onto a Lego clone. After we added a bit of black using a permanent marker, it looked very similar to the normal Lego clone trooper helmets.

After that, I printed what I really wanted to print. The SD Card Filing Cabinet. The drawer wasn't very good, it didn't have a bottom and parts that were supposed to be filled weren't. Later, I figured out the problem and fixed it. However, an SD Card did fit into it. I then printed the rest of the filing cabinet, which took a while. It didn't have any problems, but when I tried fitting the drawer into it, it was really tight. In fact, the back part on the drawer snapped off. Right now, I am printing the cabinet, a bit smaller. I am pretty certain that the SD cards will still fit in, though. 

One of the features on the Printer, is that you can put a micro SD card into it. Then, from Cura, you can tell it to print from the SD card. After that, I can just unplug the computer from the printer. If I need to stop it, I can plug the computer in again, and enter in the command to stop it. 

SD Card Miniature Filing Cabinet

I was thinking of things I could model and 3D print, and for some reason, a miniature filing cabinet for SD cards popped into my head. It would act as a normal filing cabinet (miniature, of course. About 8 inches high at the most), with drawers, but each drawer would have five slots to insert SD cards. The advantage to having this over a little case, is that each drawer could hold different things. For example, one drawer would be marked with Family Photos, another Business Files, and another Raspberry Pi (totally!). The downside, is that people use USB flash drives for files more then SD cards. I would create this for USB drives, but they can come in all kinds of sizes with their cases. Now that I think about it, there isn't any downside to using SD cards over USB flash drives. 

I drew up some plans for this (I never knew a ruler could come in so much use), with the exact inch sizes. Then, I gave this to my brother who uses SolidWorks, a program for modeling but especially for things such as 3D printing and working with physics. You can see his blog post about SolidWorks on his blog here. Here is just a single paper that I worked on:

This paper shows different sizes of the SD card, and the drawer. Here is a GIF I made in Blender of the drawer (haven't yet created the full cabinet):