Follow Slashdot stories on Twitter


Forgot your password?

Slashdot videos: Now with more Slashdot!

  • View

  • Discuss

  • Share

We've improved Slashdot's video section; now you can view our video interviews, product close-ups and site visits with all the usual Slashdot options to comment, share, etc. No more walled garden! It's a work in progress -- we hope you'll check it out (Learn more about the recent updates).


Comment: VIdeo Games are Great For Teaching Code (Score 2) 175

by joetainment (#48944041) Attached to: Ask Slashdot: How Do I Engage 5th-8th Graders In Computing?

I strongly suggest video games related material, in particular, Unity3D, Unreal 4, or for really simple intros, Scratch. All of these examples can be used to teach programming in a very interesting way that is fun for students and gives immediate feedback and results.

Unreal 4 is pretty amazing because the "blueprint" system is a visual block/node based programming langauge that can function as a complete programming language without much concern for codes/syntax.

Unity is better for direct coding. Boo is the easiest of the supported languages to teach, and very much like python, which is the 3D industry's standard scripting language, so I often start with that, and then some students move on up to C# coding. It's really about the same but with slightly different syntax, and of course the C# is less forgiving.

Another great method, although it isn't quite a full blown game engine, is Python programming in Blender. There's an interactive command line for working with the 3D scene. The great things about programming for 3D software and game engines is that stuff can be extremely immediate and visual, so concepts can be understood quickly. For games, often you can see what's happening in your "world" by pausing the game and interactively exploring the state of things. Blender actually has a built in game engine, although it's pretty basic and limited compared to Unity or Unreal 4.

If they are young, then you needn't focus on job skills just yet. What's more important is getting them interested so they start teaching themselves and getting into the habit of independent learning. You also don't necessarily *need* to do anything with hardware, focusing on software can work just fine as a intro for students.

In conclusion, I suggest that you should be successful using anything that gives very immediate visual feedback on the state of the world (without debugging or printing/logging), and which has the "oh wow, this is fun" factor, something that grabs children's attention and triggers their imaginations.

I can say with confidence that when teaching children, grabbing their attention and making it "fun" is a huge priority. I've been teaching this stuff for almost 20 years, and the games / VFX industry is full of my students. I've taught many adults, but also many children as well. If I can help at all, or if you would ever like to talk, feel free to contact me more directly. If you like, you can email me using: questions in the domain (To avoid spam I didn't directly put the exact info there, but you can piece it together I'm sure!)

Comment: Narrow definition of sharing used (Score 4, Insightful) 719

by joetainment (#48636445) Attached to: Skeptics Would Like Media To Stop Calling Science Deniers 'Skeptics'

Overall I like the sentiment of the post made, but it falls apart at the point when it incorrectly defines sharing:

>> "Sharing: Willingly giving a portion of your possessions to another, denying you use or benefit thereof."

You have just redefined sharing for your own purpose. Your argument makes the same mistake it seeks to oppose, loading words for it's own purpose.

Sharing is not so limited in definition. I can "share" my knowledge with my students, and not be deprived of anything myself. In addition, I can share things that don't belong to me with others, although it might be illegal, it's still pretty clearly sharing. In particular, transferring information is definitely "sharing" and is not always illegal. I could be sharing information I created myself, perhaps my own artwork.

Even if your definition is copy pasted a dictionary definition, one particular dictionary definition does not suffice to fully define a word. Dictionaries are extremely simplified definitions written for quick reference. Etymology and semantics of words are much more complex. For example, even by just using other dictionaries I can find that a common definition is "to use or enjoy something jointly".

Specific types of copying can (and do) run afoul of particular laws, so "copyright infringement" meets your definition of it, but sharing simultaneously meets a definition of sharing that is more reasonable and widespread than that which you use. Copying itself, and in general, is not wrong. Whether particular copyright infringement is ethical or not depends on a lot of factors too complex to really get in to here (eg. the legitimacy of the laws in effect, the proper functioning of democracy, the consent of those governed, etc).

Comment: Undo support yet? (Score 4, Interesting) 49

by joetainment (#47317525) Attached to: Google I/O 2014 Begins [updated]

It's painful to see all these incredibly complex things, but not see the addition of basic undo support for native text editing widgets in Android.

Please Google please, make all native gui elements/widgets support undo. Pretty much every other platform/toolkit already does! (See Qt as one example, or perhaps iOS.) Get the basics right first, then go for the complicated stuff.

The issue tracker has this mentioned several times and it's just not getting the priority and attention it should be getting.

Comment: Re:Python (Score 1) 465

by joetainment (#45158963) Attached to: Ask Slashdot: Best Language To Learn For Scientific Computing?

>> Python and C++, because numpy/scipy can't do everything

Yes, definitely true, and it's actually pretty easy to use them together.

If you don't want to write C++ however, there are a couple other options:

Cython - basically let's you generate c/c++ by writing Python like code and is very easy to use interacting with Python. It keeps the Cython parts of your code super fast, like straight up C.

Pypy - a super fast version of Python. If you write Python code yourself, and don't use off the shelf Python stuff, Pypy is crazy fast. (About C speed in my own tests of doing C like things.) Pypy gets slower if you use a lot of other Python code that wasn't written with Pypy in mind, but even then it's still normally much faster than regular Python. Using Pypy, you might just be able to write all the code in it and not have to bother with anything else.

Both of these are easy enough that you can be up and running, writing/using new code, same day as downloading.

Finally, even if you are calling other code from C/C++, there's some new tools to make that easier. CFFI is a good example. It makes calling C/C++ pretty easy. I'm not sure how ready it is for a lot of real world use though.

Comment: Why Unity Is Used (Score 4, Informative) 150

by joetainment (#40363703) Attached to: Unity 4 Adds Linux Support

As response to the above I can confirm that Unity is very much used because of the development environment, ease of use for 3D artists, and an incredibly simple tool chain that lets you target many platforms with one codebase. Art assets can be shared between platforms as well, or specified per platform.

For these reasons, Unity is used a lot at small studios, particularly where gameplay is the main focus and the technology doesn't have to be cutting edge. Systems like Unreal and CryEngine are more powerful from a technology and graphics standpoint, but are not nearly as easy to use for small teams of developers.

In particular, Unity's documentation, specifically its scripting documentation, is outstanding. The documentation for other systems is extremely rough by comparison.

I have no affiliation with Unity3D, other than the fact that I've used the software in the past and like it. I know the facts I mention above because I've done consulting and training for many local game studios, many of which have used or are using Unity3D. Also, hundreds of my students currently work in the game industry (many in Vancouver BC) so I often hear about what's going on in local studios.

Comment: Re:Python (Score 2) 530

by joetainment (#39911921) Attached to: Ask Slashdot: What Language Should a Former Coder Dig Into?

I agree that Python is a great choice.

Python is perfect for someone in your situation because it is very easy to get into, and you have room to grow with it, since it can be made to work as fast as you need it to.

Keep in mind that there is a good chance that you will find you never need to code anything in C or C++ for speed reasons. Python could turn out to be "fast enough" for everything you want to do. You'll probably use libraries to do the heavy lifting, and they are probably already C or C++ based.

However, when Python isn't fast enough, it's pretty easy to write 95% of code in Python, profile your code, find the slow parts, and then write the really CPU heavy stuff in C or C++. Getting C and C++ code working with Python is pretty automated these days. In fact, Python even has "cython" available which is essentially C coding with a more python-like syntax. (It can compile to C).

For an IDE, you can use Eclipse and PyDev. Both are entirely free and excellent. There are plenty of other free tools as well.

For GUI development, you have easy access to the best GUI toolkit on Earth, QT. The Pyside project provides the official binding to QT, and the bindings are excellent. QT is used in incredibly complicated software such as Autodesk Maya, so it's not just for small stuff. At the same time, it takes about 5 minutes to write a fairly simple but useful application using QT and Pyside. (As an example, a GUI for wrapping the functionality of a command line program.)

Another great thing about Python as a language is that you pretty much never run up against a wall. "No, you can't do that" is something you almost never hear when people ask questions about Python. It's more often, "no, you *shouldn't do that.... but you can if you want".

You'll save so much time writing apps in Python that you'll have hours and hours of free time to spare optimizing the slow parts or adding new features. As a personal example, I'm comfortable in other languages as well, but I can make working apps about 5 times faster in Python than in C# or Java, just because there's less code to write. Assertions and test driven development can make the code just as robust as other languages with compile time type checking.

Comment: Re:Disagree. (Score 2) 406

by joetainment (#38735584) Attached to: PS4: What Sony Should and Shouldn't Do

I second that. Wii works great for FPS games. Even if it's not as good as a mouse and keyboard, it's better than analog sticks, (since you can instantly point to where you want without overshooting) and it's *way* more fun. There's something about holding and pointing the Wiimote, as if it is a gun, that makes the experience far more gratifying. It made Golden Eye fantastic. Also, I've replayed Quake and Doom on the Wii Homebrew channel, and I've had much more fun than I did playing them the first time on PC.

Obviously it's very subjective and personal, but if you haven't tried it, it's definitely worth a shot.

Comment: Re:I do think people need to understand that (Score 2) 663

by joetainment (#34864030) Attached to: Ars Thinks Google Takes a Step Backwards For Openness

Simply pass the request on to the OS's media layer. That way any format the OS knows how to play, you play.

A lot of browsers have been able to do this for years, and if every browser and OS had a free open standard that content browsers could bank on being present, then it wouldn't be a problem. The problem now though is that a content developer can't be sure that the codec used is installed on the end-user's system.

By requiring Flash, the developer gets around the problem since the developer can safely assume that Flash will have the same codec support everywhere. Of course, Flash is bad for the internet since it isn't a free and open standard, which is why we are dealing with all this WebM stuff now. We need a format for video that is equal to PNG/JPEG in term of freedom and openness.

*Imagine if there were no image standards for the net* if images were just left to the OS. We'd constantly be downloading new image codecs, or we'd run across images pages where we couldn't view the images. I think everyone can agree that would be awful. Video deserves a free and open standard just as much as images do.

Hopefully this is useful to someone. A lot of posts I read seem to come from people unaware or misinformed of these basic issues. (I probably should have included this in my last post but I hadn't thought of it yet!)

Comment: Re:I do think people need to understand that (Score 1) 663

by joetainment (#34863904) Attached to: Ars Thinks Google Takes a Step Backwards For Openness

Free and Open Source software is fundamentally incompatible with "Free as in Speech" but not "Free as in Beer" standards. (At least from a distribution perspective.)

When people say we need a standard that is free and open they mean both "Free as in Speech" and "Free as in Beer". Anything else puts Free Software at a disadvantage.

Giving up on the argument that standards should be both open and free of charge means giving up on Free software as a whole, which I for one am unwilling to do.

Comment: Re:Putting the snideness of the summary aside... (Score 1) 663

by joetainment (#34863812) Attached to: Ars Thinks Google Takes a Step Backwards For Openness

Chrome was created to make money *indirectly*. The Chrome browser itself will probably never actually make money, but if it encourages increased internet use and increased ease of development for the web through free open standards, then it will increase Google's core business.

Regardless, it shouldn't even matter if Google does somehow make money from this. A widely available free open standard for internet video is a huge net win for everyone. The only people it could possibly hurt are those who currently make money from licensing, or benefit from the disadvantage that Free Software has in not being able to legally incorporate patented technology. Every argument I've seen presented against WebM and for H264 is short sighted, and fails to take into account the long term implications. Once such argument being: "Devices support H264 and not WebM" when clearly, future devices could easily support WebM at no licensing cost. Another argument being that WebM isn't good enough, which fails to take into account its rapid pace of improvement, and the fact that since there are patent free legal open source implementations, new versions of the standard can continue to progress freely.

Arguments in favor of H264 also ignore the disadvantage that it imposes on Free Software. Such a disadvantage is not acceptable for an internet standard. Hopefully once enough support gets together for WebM, the W3C people will incorporate it into the official web standards.

My guess is that the people at Google realize that we're *never going to get* a ubiquitous high quality free open video standard for the web *unless* they really put their foot down on this issue. This action directly benefits me, and it benefits nearly all other web users long term. If the decision benefits Google too, I'm OK with that.

Comment: I second this, OpenGL and QT are both great. (Score 5, Interesting) 331

by joetainment (#34362452) Attached to: What 2D GUI Foundation Do You Use?

I second the parent post. However, in my opinion, OpenGL only is pretty tough to use. It takes a lot of knowledge. (GLUT can help to get you started.)

Where OpenGL would require you to program too much functionality from scratch, I personally recommend QT, using OpenGL only where you need it. QT is easy to learn, easy to code for, provides *tons* of functionality, and it performs great. In fact it performs well enough for very heavy 3D animation software to rely on it. (Maya has now been rewritten to use QT, and it is a big improvement.) You can paint your own custom anything, and even easily integrate 3D into your project. I really can't say enough good things about QT. It is now available under the LGPL, so you can use it for open source or closed sourced projects.

As mentioned above by the parent, QT isn't lightweight, but it isn't a pig either. You can use as much or as little of the toolkit as you like, and it can run very fast and have very low overhead. It is light enough that Nokia is using it as their primary development framework for mobile apps with their upcoming Meego based phones. From my personal experience QT flies.

Also, I've had great results with PyQt and with PySide. PySide is the new, "official" binding for QT on Python. They have examples in their demo folder of custom canvas based applications, and they work great and are easy to follow. You can have your own similar program, written from scratch in Python, up and running in 10 minutes.

It should also be noted that because QT works so well cross-platform, it has a huge advantage over toolkits that are tied to a single operating system. (Particularly those from MS.) In my own work, I won't even consider using something that doesn't run on Windows, Mac, Linux, and potentially more operating systems. I use all kinds of devices, and I don't want to be tied down. QT makes cross platform development straightforward, and software like Autodesk Maya is proof that it works even for highly complex projects.

I know I'm starting to sound like a salesman, but my experiences really have been that positive. About the only downside is that there aren't current C# or Java bindings for it. This doesn't matter to me though, because I've got C++ where I need performance and Python where I want ease of use. (With Cython, you can easily have performance and ease of use at the same time.)

I hope that helps.

Comment: Some Suggestions (Score 1) 172

by joetainment (#33609116) Attached to: Teaching Game Development To Fine Arts Students?

I'll try to provide some useful advice. I have been teaching 3D graphics and game development for 12 years, and most of the major game studios (including EA, Ubisoft, Blizzard, and more) now employ at least one of my students.

Students of mine have had great success using UDK. I highly recommend it. There are plenty of tutorials on the main site student can watch to quickly learn how to use it. The learning curve is quite easy. Students of mine have been able to create nice looking content on the same day they were introduced to the software.

In particular, what's great about UDK is that it allows non programmers to create Gameplay logic, because of its visual scripting system. Many of my more artistically minded students now use UDK to create their demo reels since UDK is capable of such high visual quality.

Unity3D is also a viable choice, however, it is much more work to get a high-end game up and running because most of the gameplay programming has to be written from scratch. At the moment it is also lagging very far behind UDK's visual ability. Unity has nothing that comes close to the "lightmass" global illumination system in UDK, which can be used to create fantastic looking levels.

UDK's weakness is that for gameplay development, it is quite hard to make a game totally different from the sample game it ships with. ("UdkGame") Programming for UDK is much more difficult and programming for Unity or most other systems. This is mostly because the UDK API is poorly documented by comparison, and UDK isn't supported in the same way as the full Unreal Engine.

If you are looking for an open source or linux based program, Blender can be used. The newest beta version is actually quite powerful. Blender has a game engine built in and it allows students to create visual "logic bricks" but also to program their game using python. (Of all the languages I have taught, students new to programming consistently pick up Python the fastest.) The Blender game engine Python API is well documented and easy to work with in my experience, though it does have some limitations, such as not being able to create new logic bricks on the fly, or being able to get a reference to a logic brick that is not "connected" to the currently running script. Fortunately, Blender is open source, so you could fix these issues yourself if you needed to.

Also, as another pieces of advice, you should decide on whether you want your students to focus on gameplay or graphics (or if you want to be able to give them the choice). Either one is a valid choice, but tudents tend to specialize in one or the other, and most students don't have enough time to get really both at both.

If you would like to discuss anything further, please contact me, I'll do my best to help.

You can read more about my teaching at:

"Mr. Watson, come here, I want you." -- Alexander Graham Bell